From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Jan Wieck <jan(at)wi3ck(dot)info> |
Cc: | PostgreSQL Development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Double linking MemoryContext children |
Date: | 2015-09-11 13:38:39 |
Message-ID: | 1186.1441978719@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Jan Wieck <jan(at)wi3ck(dot)info> writes:
> The attached script demonstrates an O(N^2) problem we recently became
> aware of. The script simply executes a large anonymous code block that
> doesn't do anything useful. Usage is
> ./t1.py [NUM_STMTS] | psql [DBNAME]
> NUM_STMTS defaults to 20,000. The code block executes rather fast, but
> the entire script runs for over a minute (at 20,000 statements) on a
> 2.66 GHz Xeon.
> The time is spent when all the prepared SPI statements are freed at the
> end of execution. All prepared SPI statements are children of the Cache
> context. MemoryContext children are a single linked list where new
> members are inserted at the head. This works best when children are
> created and destroyed in a last-in-first-out pattern. SPI however
> destroys the SPI statements in the order they were created, forcing
> MemoryContextSetParent() to traverse the entire linked list for each child.
> The attached patch makes MemoryContext children a double linked list
> that no longer needs any list traversal no find the position of the
> child within the list.
Seems less invasive to fix SPI to delete in the opposite order?
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Stephen Frost | 2015-09-11 13:48:32 | Re: RLS open items are vague and unactionable |
Previous Message | Jan Wieck | 2015-09-11 13:33:40 | Double linking MemoryContext children |