pgsql: Increment xactCompletionCount during subtransaction abort.

Поиск
Список
Период
Сортировка
От Andres Freund
Тема pgsql: Increment xactCompletionCount during subtransaction abort.
Дата
Msg-id E1lToY5-00080O-0I@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Increment xactCompletionCount during subtransaction abort.

Snapshot caching, introduced in 623a9ba79b, did not increment
xactCompletionCount during subtransaction abort. That could lead to an older
snapshot being reused. That is, at least as far as I can see, not a
correctness issue (for MVCC snapshots there's no difference between "in
progress" and "aborted"). The only difference between the old and new
snapshots would be a newer ->xmax.

While HeapTupleSatisfiesMVCC makes the same visibility determination, reusing
the old snapshot leads HeapTupleSatisfiesMVCC to not set
HEAP_XMIN_INVALID. Which subsequently causes the kill_prior_tuple optimization
to not kick in (via HeapTupleIsSurelyDead() returning false). The performance
effects of doing the same index-lookups over and over again is how the issue
was discovered...

Fix the issue by incrementing xactCompletionCount in
XidCacheRemoveRunningXids. It already acquires ProcArrayLock exclusively,
making that an easy proposition.

Add a test to ensure that kill_prior_tuple prevents index growth when it
involves aborted subtransaction of the current transaction.

Author: Andres Freund
Discussion: https://postgr.es/m/20210406043521.lopeo7bbigad3n6t@alap3.anarazel.de
Discussion: https://postgr.es/m/20210317055718.v6qs3ltzrformqoa%40alap3.anarazel.de

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/90c885cdab8bc5a5f12a243774fa0db51002a2fd

Modified Files
--------------
src/backend/storage/ipc/procarray.c |  8 +++++++
src/test/regress/expected/mvcc.out  | 42 +++++++++++++++++++++++++++++++++++
src/test/regress/parallel_schedule  |  2 +-
src/test/regress/serial_schedule    |  1 +
src/test/regress/sql/mvcc.sql       | 44 +++++++++++++++++++++++++++++++++++++
5 files changed, 96 insertions(+), 1 deletion(-)


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

Предыдущее
От: Peter Geoghegan
Дата:
Сообщение: pgsql: Remove tupgone special case from vacuumlazy.c.
Следующее
От: Fujii Masao
Дата:
Сообщение: pgsql: postgres_fdw: Allow partitions specified in LIMIT TO to be impor