Re: MultiXact\SLRU buffers configuration
x4mmm@yandex-team.ru
From: "Andrey M. Borodin" <x4mmm@yandex-team.ru>
To: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2020-05-13T18:08:37Z
Lists: pgsql-hackers
> 11 мая 2020 г., в 16:17, Andrey M. Borodin <x4mmm@yandex-team.ru> написал(а): > > I've went ahead and created 3 patches: > 1. Configurable SLRU buffer sizes for MultiXacOffsets and MultiXactMembers > 2. Reduce locking level to shared on read of MultiXactId members > 3. Configurable cache size I'm looking more at MultiXact and it seems to me that we have a race condition there. When we create a new MultiXact we do: 1. Generate new MultiXactId under MultiXactGenLock 2. Record new mxid with members and offset to WAL 3. Write offset to SLRU under MultiXactOffsetControlLock 4. Write members to SLRU under MultiXactMemberControlLock When we read MultiXact we do: 1. Retrieve offset by mxid from SLRU under MultiXactOffsetControlLock 2. If offset is 0 - it's not filled in at step 4 of previous algorithm, we sleep and goto 1 3. Retrieve members from SLRU under MultiXactMemberControlLock 4. ..... what we do if there are just zeroes because step 4 is not executed yet? Nothing, return empty members list. What am I missing? Best regards, Andrey Borodin.
Commits
-
Rework new SLRU test with injection points
- 94a3373ac5c3 18.0 landed
-
injection_point: Add injection_points.stats
- 2e35c67f9568 18.0 landed
-
injection_points: Add initialization of shmem state when loading module
- b2b023aa3706 18.0 landed
-
Add injection-point test for new multixact CV usage
- 768a9fd5535f 18.0 landed
-
Use conditional variable to wait for next MultiXact offset
- a0e0fb1ba56f 17.0 landed
-
Improve performance of subsystems on top of SLRU
- 53c2a97a9266 17.0 landed
-
Adjust VACUUM hastup LP_REDIRECT comments.
- 325bc54eed4e 16.0 cited
-
Test replay of regression tests, attempt II.
- f47ed79cc8a0 15.0 cited