]> granicus.if.org Git - postgresql/commit
Improve ResourceOwners' behavior for large numbers of owned objects.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 26 Jan 2016 20:20:22 +0000 (15:20 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 26 Jan 2016 20:20:30 +0000 (15:20 -0500)
commitcc988fbb0bf60a83b628b5615e6bade5ae9ae6f4
tree406d462838cc8bb05376801802de58d8bef4d631
parent879d71393de001880e031255e41ca322c6027713
Improve ResourceOwners' behavior for large numbers of owned objects.

The original coding was quite fast so long as objects were always
released in reverse order of addition; otherwise, it degenerated into
O(N^2) behavior due to searching for the array element to delete.
Improve matters by switching to hashed storage when the number of
objects of a given type exceeds 64.  (The cutover point is open to
discussion, of course, but some simple performance testing suggests
that hashing has enough overhead to be a loser below there.)

Also, refactor resowner.c so that we don't need N copies of the array
management code.  Since all the resource IDs the code currently needs
to deal with are either pointers or integers, it seems sufficient to
create a one-size-fits-all infrastructure in which everything is
converted to a Datum for storage.

Aleksander Alekseev, reviewed by Stas Kelvich, further fixes by me
src/backend/access/hash/hashfunc.c
src/backend/utils/resowner/resowner.c