Re: BUG #14830: Missed NOTIFications, PostgreSQL 9.1.24
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Marko Tiikkaja <marko@joh.to>,
Michael Paquier <michael.paquier@gmail.com>,
PostgreSQL mailing lists <pgsql-bugs@postgresql.org>
Date: 2017-10-11T17:00:18Z
Lists: pgsql-bugs
Attachments
- fix-notify-xact-testing-2.patch (text/x-diff) patch
I wrote: > It occurred to me that it's easy to measure the worst case, ie always > one message per notify interrupt: > > $ cat bnch.txt > LISTEN foo\; NOTIFY foo; > $ pgbench -n -c 1 -T 10 -f bnch.txt > > On this case it seems that the patch is circa 2% slower than HEAD, > though that's only barely above the noise level in my measurements. On looking at the patch again, I realized that it's not really necessary to check TransactionIdIsCurrentTransactionId in the per-message loop. Although it is possible to run the message-scanning code in a transaction that's executed NOTIFY (if it also executed the session's first LISTEN), at that point we will not yet have pushed the transaction's messages into the queue. Therefore there is no case where the loop can see messages queued by its own transaction. Although TransactionIdIsCurrentTransactionId isn't really all that expensive, removing it brings the above test case to a statistical tie: median of 3 60-second runs is 26054 tps in HEAD or 26034 tps with patch. (The cross-run variation is a couple hundred tps.) So I'm now satisfied with the attached form of the patch, and will proceed to make back-ported versions. regards, tom lane
Commits
-
Fix low-probability loss of NOTIFY messages due to XID wraparound.
- 525b09adae78 9.2.24 landed
- f4cdf781a1d2 10.1 landed
- 7573d122f157 9.3.20 landed
- 69bc245d9296 9.5.10 landed
- 36c687a22f49 9.6.6 landed
- 118e99c3d71e 11.0 landed
- 0e84f70752cf 9.4.15 landed