Re: BUG #17949: Adding an index introduces serialisation anomalies.
От | Dmitry Dolgov |
---|---|
Тема | Re: BUG #17949: Adding an index introduces serialisation anomalies. |
Дата | |
Msg-id | 20230621090421.4rr55ybndttng7xl@ddolgov.remote.csb обсуждение исходный текст |
Ответ на | Re: BUG #17949: Adding an index introduces serialisation anomalies. (Thomas Munro <thomas.munro@gmail.com>) |
Ответы |
Re: BUG #17949: Adding an index introduces serialisation anomalies.
|
Список | pgsql-bugs |
> On Wed, Jun 21, 2023 at 11:20:28AM +1200, Thomas Munro wrote: > On Wed, Jun 21, 2023 at 10:54 AM Thomas Munro <thomas.munro@gmail.com> wrote: > > This is probably going to go faster if I CC the authors of commit > > 0bef1c06. Any ideas about how we're missing rw-conflicts under high > > concurrency? > > I guess one (probably stupid) question I have: where is the > CheckForSerializableConflictIn(rootPostingTree) that I was expecting > to see when writing to an existing posting tree? IIUC that should > pair with PredicateLockPage(btree->index, rootPostingTree, snapshot) > when reading. I can't find it either, but based on my superficial investigation this particular reproducer doesn't seem to hit posting trees functionality at all. What I observe is the inserting transaction uses ginHeapTupleFastCollect + ginHeapTupleFastInsert, and the corresponding commentary says that serialization in this case depends on the metabuffer: /* * An insertion to the pending list could logically belong anywhere in the * tree, so it conflicts with all serializable scans. All scans acquire a * predicate lock on the metabuffer to represent that. */ Now the reading transaction actually does PredicateLockPage on the metabuffer inside scanPendingInsert, but strangely enough it doesn't lock anything because the SerializationNeededForRead condition is false. I'm trying to verify if it's somehow a part of the issue, or something is broken on my side.
В списке pgsql-bugs по дате отправления: