From: Alexander Lakhin <exclusion@gmail.com>
To: Heikki Linnakangas <hlinnaka@iki.fi>
To: Maxim Orlov <orlovmg@gmail.com>
Cc: Thomas Munro <thomas.munro@gmail.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Cc: Yura Sokolov <y.sokolov@postgrespro.ru>
Cc: Andres Freund <andres@anarazel.de>
Subject: Re: Latches vs lwlock contention
Date: Thu, 27 Mar 2025 07:00:07 +0200
Message-ID: <e11a30e5-c0d8-491d-8546-3a1b50c10ad4@gmail.com> (raw)
In-Reply-To: <b4a53c52-a983-499e-bde0-2d2c818751c5@iki.fi>
References: <CA+hUKGKmO7ze0Z6WXKdrLxmvYa=zVGGXOO30MMktufofVwEm1A@mail.gmail.com>
<53c844e1-a21a-e481-cca5-2184c8aa47b9@iki.fi>
<7c2090cd-a72a-4e34-afaa-6dd2ef31440e@iki.fi>
<CACG=ezYS6sKbWa=Py23jH8P-SXGbZ+z6T_rYaEwfjGfh_yLgrQ@mail.gmail.com>
<b4a53c52-a983-499e-bde0-2d2c818751c5@iki.fi>
Hello Heikki,
04.11.2024 18:08, Heikki Linnakangas wrote:
> Committed, thanks for the review!
I've discovered that the following script:
export PGOPTIONS='-c lock_timeout=1s'
createdb regression
for i in {1..100}; do
echo "ITERATION: $i"
psql -c "CREATE TABLE t(i int);"
cat << 'EOF' | psql &
DO $$
DECLARE
i int;
BEGIN
FOR i IN 1 .. 5000000 LOOP
INSERT INTO t VALUES (1);
END LOOP;
END;
$$;
EOF
sleep 1
psql -c "DROP TABLE t" &
cat << 'EOF' | psql &
COPY t FROM STDIN;
0
\.
EOF
wait
psql -c "DROP TABLE t" || break;
done
causes a segmentation fault on master (it fails on iterations 5, 4, 26 for me):
ITERATION: 26
CREATE TABLE
ERROR: canceling statement due to lock timeout
ERROR: canceling statement due to lock timeout
invalid command \.
ERROR: syntax error at or near "0"
LINE 1: 0
^
server closed the connection unexpectedly
Core was generated by `postgres: law regression [local] idle '.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 GrantLockLocal (locallock=0x5a1d75c35ba8, owner=0x5a1d75c18630) at lock.c:1805
1805 lockOwners[i].owner = owner;
(gdb) bt
#0 GrantLockLocal (locallock=0x5a1d75c35ba8, owner=0x5a1d75c18630) at lock.c:1805
#1 0x00005a1d51e93ee7 in GrantAwaitedLock () at lock.c:1887
#2 0x00005a1d51ea1e58 in LockErrorCleanup () at proc.c:814
#3 0x00005a1d51b9a1a7 in AbortTransaction () at xact.c:2853
#4 0x00005a1d51b9abc6 in AbortCurrentTransactionInternal () at xact.c:3579
#5 AbortCurrentTransaction () at xact.c:3457
#6 0x00005a1d51eafeda in PostgresMain (dbname=<optimized out>, username=0x5a1d75c139b8 "law") at postgres.c:4440
(gdb) p lockOwners
$1 = (LOCALLOCKOWNER *) 0x0
git bisect led me to 3c0fd64fe.
Could you please take a look?
Best regards,
Alexander Lakhin
Neon (https://neon.tech)
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: exclusion@gmail.com, hlinnaka@iki.fi, orlovmg@gmail.com, thomas.munro@gmail.com, y.sokolov@postgrespro.ru, andres@anarazel.de
Subject: Re: Latches vs lwlock contention
In-Reply-To: <e11a30e5-c0d8-491d-8546-3a1b50c10ad4@gmail.com>
* 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