Re: Curing plpgsql's memory leaks for statement-lifespan values
От | Tom Lane |
---|---|
Тема | Re: Curing plpgsql's memory leaks for statement-lifespan values |
Дата | |
Msg-id | 6969.1469630991@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: Curing plpgsql's memory leaks for statement-lifespan values (Robert Haas <robertmhaas@gmail.com>) |
Ответы |
Re: Curing plpgsql's memory leaks for statement-lifespan values
|
Список | pgsql-hackers |
Robert Haas <robertmhaas@gmail.com> writes: > On Mon, Jul 25, 2016 at 6:04 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> I suppose that a fix based on putting PG_TRY blocks into all the affected >> functions might be simple enough that we'd risk back-patching it, but >> I don't really want to go that way. > try/catch blocks aren't completely free, either, and PL/pgsql is not > suffering from a deplorable excess of execution speed. BTW, just to annotate that a bit: I did some measurements and found out that on my Linux box, creating/deleting a memory context (AllocSetContextCreate + MemoryContextDelete) is somewhere around 10x more expensive than a PG_TRY block. This means that the PG_TRY approach would actually be faster for cases involving only a small number of statements-needing-local-storage within a single plpgsql function execution. However, the memory context creation cost is amortized across repeated executions of a statement, whereas of course PG_TRY won't be. We can roughly estimate that PG_TRY would lose any time we loop through the statement in question more than circa ten times. So I believe the way I want to do it will win speed-wise in cases where it matters, but it's not entirely an open-and-shut conclusion. Anyway, there are enough other reasons not to go the PG_TRY route. regards, tom lane
В списке pgsql-hackers по дате отправления: