pgsql: bufmgr: Acquire and clean victim buffer separately

Поиск
Список
Период
Сортировка
От Andres Freund
Тема pgsql: bufmgr: Acquire and clean victim buffer separately
Дата
Msg-id E1pkA4J-001Y30-25@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
bufmgr: Acquire and clean victim buffer separately

Previously we held buffer locks for two buffer mapping partitions at the same
time to change the identity of buffers.  Particularly for extending relations
needing to hold the extension lock while acquiring a victim buffer is
painful.But it also creates a bottleneck for workloads that just involve
reads.

Now we instead first acquire a victim buffer and write it out, if
necessary. Then we remove that buffer from the old partition with just the old
partition's partition lock held and insert it into the new partition with just
that partition's lock held.

By separating out the victim buffer acquisition, future commits will be able
to change relation extensions to scale better.

On my workstation, a micro-benchmark exercising buffered reads strenuously and
under a lot of concurrency, sees a >2x improvement.

Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi>
Reviewed-by: Melanie Plageman <melanieplageman@gmail.com>
Discussion: https://postgr.es/m/20221029025420.eplyow6k7tgu6he3@awork3.anarazel.de

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/dad50f677c42de207168a3f08982ba23c9fc6720

Modified Files
--------------
src/backend/storage/buffer/bufmgr.c   | 558 +++++++++++++++++++---------------
src/backend/storage/buffer/localbuf.c | 115 +++----
2 files changed, 369 insertions(+), 304 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Acquire locks on views in AcquirePlannerLocks, too.
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Support "Right Anti Join" plan shapes.