pg.ddx.io pgsql-hackers@postgresql.org mailing list archive
help / color / mirror / Atom feed From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: Alexander Lakhin <exclusion@gmail.com>
Cc: Andrey M. Borodin <x4mmm@yandex-team.ru>
Cc: Dilip Kumar <dilipbalaut@gmail.com>
Cc: tender wang <tndrwang@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Cc: Tomas Vondra <tomas.vondra@enterprisedb.com>
Subject: Re: SLRU optimization - configurable buffer pool and partitioning the SLRU lock
Date: Wed, 3 Apr 2024 16:10:08 +0200
Message-ID: <202404031410.4salwbtgsw5q@alvherre.pgsql> (raw )
In-Reply-To: <2a25eaf4-a3a4-5fd1-6241-9d7c73142085@gmail.com >
Hello,
On 2024-Apr-03, Alexander Lakhin wrote:
> I've managed to trigger an assert added by 53c2a97a9.
> Please try the following script against a server compiled with
> -DTEST_SUMMARIZE_SERIAL (initially I observed this failure without the
> define, it just simplifies reproducing...):
Ah yes, absolutely, we're missing to trade the correct SLRU bank lock
there. This rewrite of that small piece should fix it. Thanks for
reporting this.
--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
"Pido que me den el Nobel por razones humanitarias" (Nicanor Parra)
Attachments:
0001-Fix-zeroing-of-pg_serial-page-without-SLRU-bank-lock.patch (text/x-diff, 1.8K) download
From 44c39cf4bf258fb0b65aa1acc5f84e5d7f729eb1 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Wed, 3 Apr 2024 16:00:24 +0200
Subject: [PATCH] Fix zeroing of pg_serial page without SLRU bank lock
---
src/backend/storage/lmgr/predicate.c | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c
index 3f378c0099..d5bbfbd4c6 100644
--- a/src/backend/storage/lmgr/predicate.c
+++ b/src/backend/storage/lmgr/predicate.c
@@ -137,7 +137,7 @@
* SerialControlLock
* - Protects SerialControlData members
*
- * SerialSLRULock
+ * SLRU per-bank locks
* - Protects SerialSlruCtl
*
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
@@ -908,20 +908,25 @@ SerialAdd(TransactionId xid, SerCommitSeqNo minConflictCommitSeqNo)
if (isNewPage)
serialControl->headPage = targetPage;
- LWLockAcquire(lock, LW_EXCLUSIVE);
-
if (isNewPage)
{
- /* Initialize intervening pages. */
- while (firstZeroPage != targetPage)
+ /* Initialize intervening pages; might involve trading locks */
+ for (;;)
{
- (void) SimpleLruZeroPage(SerialSlruCtl, firstZeroPage);
+ lock = SimpleLruGetBankLock(SerialSlruCtl, firstZeroPage);
+ LWLockAcquire(lock, LW_EXCLUSIVE);
+ slotno = SimpleLruZeroPage(SerialSlruCtl, firstZeroPage);
+ if (firstZeroPage == targetPage)
+ break;
firstZeroPage = SerialNextPage(firstZeroPage);
+ LWLockRelease(lock);
}
- slotno = SimpleLruZeroPage(SerialSlruCtl, targetPage);
}
else
+ {
+ LWLockAcquire(lock, LW_EXCLUSIVE);
slotno = SimpleLruReadPage(SerialSlruCtl, targetPage, true, xid);
+ }
SerialValue(slotno, xid) = minConflictCommitSeqNo;
SerialSlruCtl->shared->page_dirty[slotno] = true;
--
2.39.2
view thread (131+ messages) latest in thread
Message-ID: <202404031410.4salwbtgsw5q@alvherre.pgsql>
Permalink: ../202404031410.4salwbtgsw5q@alvherre.pgsql/
Also on: postgresql.org/message-id/202404031410.4salwbtgsw5q@alvherre.pgsql
copy link · copy postgr.es · copy git am
reply Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: alvherre@alvh.no-ip.org, exclusion@gmail.com, x4mmm@yandex-team.ru, dilipbalaut@gmail.com, tndrwang@gmail.com, pgsql-hackers@lists.postgresql.org, tomas.vondra@enterprisedb.com
Subject: Re: SLRU optimization - configurable buffer pool and partitioning the SLRU lock
In-Reply-To: <202404031410.4salwbtgsw5q@alvherre.pgsql>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox