]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Avoid O(N^2) behavior when the standby process releases many locks.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 31 Oct 2021 19:31:29 +0000 (15:31 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 31 Oct 2021 19:31:38 +0000 (15:31 -0400)
commit8424dfced790a5c2886ac33f9ce33eb57bf99f09
tree94e32392919524646e7aa04d1a304421c8d3c78b
parentbd9f4cf0ee5336ce4f9f3103521740baccfb3825
Avoid O(N^2) behavior when the standby process releases many locks.

When replaying a transaction that held many exclusive locks on the
primary, a standby server's startup process would expend O(N^2)
effort on manipulating the list of locks.  This code was fine when
written, but commit 1cff1b95a made repetitive list_delete_first()
calls inefficient, as explained in its commit message.  Fix by just
iterating the list normally, and releasing storage only when done.
(This'd be inadequate if we needed to recover from an error occurring
partway through; but we don't.)

Back-patch to v13 where 1cff1b95a came in.

Nathan Bossart

Discussion: https://postgr.es/m/CD2F0E7F-9822-45EC-A411-AE56F14DEA9F@amazon.com
src/backend/storage/ipc/standby.c