Re: BUG #17949: Adding an index introduces serialisation anomalies.

Поиск
Список
Период
Сортировка
От Thomas Munro
Тема Re: BUG #17949: Adding an index introduces serialisation anomalies.
Дата
Msg-id CA+hUKGLgtMZbzm5md-eKtoKQo7tZU+FVM95YPTfH9k+3UQcvSQ@mail.gmail.com
обсуждение исходный текст
Ответ на BUG #17949: Adding an index introduces serialisation anomalies.  (PG Bug reporting form <noreply@postgresql.org>)
Ответы Re: BUG #17949: Adding an index introduces serialisation anomalies.  (Artem Anisimov <artem.anisimov.255@gmail.com>)
Re: BUG #17949: Adding an index introduces serialisation anomalies.  (Dmitry Dolgov <9erthalion6@gmail.com>)
Список pgsql-bugs
Hi,

Reproduced here.  Thanks for the reproducer.  I agree that something
is wrong here, but I haven't had time to figure out what, yet, but let
me share what I noticed so far... I modified your test to add a pid
column to the locks table and to insert insert pg_backend_pid() into
it, and got:

postgres=# select xmin, * from locks;

┌───────┬──────┬───────┐
│ xmin  │ path │  pid  │
├───────┼──────┼───────┤
│ 17634 │ xyz  │ 32932 │
│ 17639 │ xyz  │ 32957 │
└───────┴──────┴───────┘

Then I filtered the logs (having turned the logging up to capture all
queries) so I could see just those PIDs and saw this sequence:

2023-05-29 00:15:43.933 EDT [32932] LOG:  duration: 0.182 ms
statement: BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE
2023-05-29 00:15:43.934 EDT [32957] LOG:  duration: 0.276 ms
statement: BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE
2023-05-29 00:15:43.935 EDT [32932] LOG:  duration: 1.563 ms
statement: SELECT * FROM locks WHERE path = 'xyz'
2023-05-29 00:15:43.936 EDT [32932] LOG:  duration: 0.126 ms
statement: INSERT INTO locks(path, pid) VALUES('xyz',
pg_backend_pid())
2023-05-29 00:15:43.937 EDT [32957] LOG:  duration: 2.191 ms
statement: SELECT * FROM locks WHERE path = 'xyz'
2023-05-29 00:15:43.937 EDT [32957] LOG:  duration: 0.261 ms
statement: INSERT INTO locks(path, pid) VALUES('xyz',
pg_backend_pid())
2023-05-29 00:15:43.937 EDT [32932] LOG:  duration: 0.222 ms  statement: COMMIT
2023-05-29 00:15:43.939 EDT [32957] LOG:  duration: 1.775 ms  statement: COMMIT

That sequence if run (without overlap) in the logged order is normally
rejected.  The query plan being used (at least when I run the query
myself) looks like this:

Query Text: SELECT * FROM locks WHERE path = 'xyz'
Bitmap Heap Scan on locks  (cost=4.20..13.67 rows=6 width=36)
  Recheck Cond: (path = 'xyz'::text)
  ->  Bitmap Index Scan on locks_path_idx  (cost=0.00..4.20 rows=6 width=0)
        Index Cond: (path = 'xyz'::text)



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

Предыдущее
От: Magnus Hagander
Дата:
Сообщение: Re: BUG #17919: "client hello" message / SNI / Openshift Routes
Следующее
От: Ba Jinsheng
Дата:
Сообщение: Suspicious Estimated Number of Returned Rows