Move RecoveryLockList into a hash table.
Thomas Munro <tmunro@postgresql.org>
Move RecoveryLockList into a hash table. Standbys frequently need to release all locks held by a given xid. Instead of searching one big list linearly, let's create one list per xid and put them in a hash table, so we can find what we need in O(1) time. Earlier analysis and a prototype were done by David Rowley, though this isn't his patch. Back-patch all the way. Author: Thomas Munro Diagnosed-by: David Rowley, Andres Freund Reviewed-by: Andres Freund, Tom Lane, Robert Haas Discussion: https://postgr.es/m/CAEepm%3D1mL0KiQ2KJ4yuPpLGX94a4Ns_W6TL4EGRouxWibu56pA%40mail.gmail.com Discussion: https://postgr.es/m/CAKJS1f9vJ841HY%3DwonnLVbfkTWGYWdPN72VMxnArcGCjF3SywA%40mail.gmail.com
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/storage/ipc/standby.c | modified | +92 −83 |
Discussion
- Excessive CPU usage in StandbyReleaseLocks() 12 messages · 2018-06-19 → 2018-06-26
- Patch to improve performance of replay of AccessExclusiveLock 22 messages · 2017-03-01 → 2017-03-22