Re: POC: converting Lists into arrays
Tom Lane <tgl@sss.pgh.pa.us>
Alvaro Herrera <alvherre@2ndquadrant.com> writes: > On 2019-Aug-09, Tom Lane wrote: >> I poked at this, and attached is a patch, but again I'm not seeing >> that there's any real performance-based argument for it. > I'm confused. I thought that the point of doing this wasn't that we > wanted to improve performance, but rather that we're now able to remove > the array without *losing* performance. I mean, those arrays were there > to improve performance for code that wanted fast access to specific list > items, but now we have fast access to the list items without it. So a > measurement that finds no performance difference is good news, and we > can get rid of the now-pointless optimization ... Yeah, fair enough, so pushed. In principle, this change adds an extra indirection in exec_rt_fetch, so I went looking to see if there were any such calls in arguably performance-critical paths. Unsurprisingly, most calls are in executor initialization, and they tend to be adjacent to table_open() or other expensive operations, so it's pretty hard to claim that there could be any measurable hit. However, I did notice that trigger.c uses ExecUpdateLockMode() and GetAllUpdatedColumns() in ExecBRUpdateTriggers which executes per-row, and so might be worth trying to optimize. exec_rt_fetch itself is not the main cost in either of those, but I wonder why we are doing those calculations over again for each row in the first place. I'm not excited enough about the issue to do anything right now, but the next time somebody whines about trigger-firing overhead, there might be an easy win available there. regards, tom lane
Commits
-
Remove EState.es_range_table_array.
- 3c926587b592 13.0 landed
-
Rationalize use of list_concat + list_copy combinations.
- 5ee190f8ec37 13.0 landed
-
Cosmetic improvements in setup of planner's per-RTE arrays.
- 1661a4050593 13.0 landed
-
Make better use of the new List implementation in a couple of places
- efdcca55a3df 13.0 landed
-
Fix sepgsql test results for commit d97b714a2.
- 82c8a3c52adf 13.0 landed
-
Avoid using lcons and list_delete_first where it's easy to do so.
- d97b714a2199 13.0 landed
-
Remove lappend_cell...() family of List functions.
- c245776906b0 13.0 landed
-
Clean up some ad-hoc code for sorting and de-duplicating Lists.
- 2f5b8eb5a28b 13.0 landed
-
Redesign the API for list sorting (list_qsort becomes list_sort).
- 569ed7f48312 13.0 landed
-
Remove dead code.
- 4c3d05d875dd 13.0 landed
-
Represent Lists as expansible arrays, not chains of cons-cells.
- 1cff1b95ab6d 13.0 landed
-
Standardize some more loops that chase down parallel lists.
- c94fb8e8acc0 12.0 landed
-
Reimplement the linked list data structure used throughout the backend.
- d0b4399d81f3 8.0.0 cited