Re: [HACKERS] GSoC 2017 : Patch for predicate locking in Gist index
От | Alexander Korotkov |
---|---|
Тема | Re: [HACKERS] GSoC 2017 : Patch for predicate locking in Gist index |
Дата | |
Msg-id | CAPpHfdsJ9JfgDgTKzN7s-Qt84jYrAGHidTVMcFFh6t+1AS13_Q@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] GSoC 2017 : Patch for predicate locking in Gist index (Andrey Borodin <x4mmm@yandex-team.ru>) |
Ответы |
Re: [HACKERS] GSoC 2017 : Patch for predicate locking in Gist index
|
Список | pgsql-hackers |
> 27 марта 2018 г., в 12:53, Teodor Sigaev <teodor@sigaev.ru> написал(а):
>
> I have a question: why do not CheckForSerializableConflictIn() move into begining of gistplacetopage()? Seems, it is the single function which actually changes page and all predicate locking stuff will be placed in single function...
gistplacetopage() is called from
1. Buffered build - probably harmless
Yes, harmless, but useless.
2. Finish split - i'm not sure about this. It seems to me that it is necessary... then your version is correct.
Yes, it's necessary, because GiST scan can end up on non-leaf page. So, scan and modify of same non-leaf page should conflict.
Checking for serializable conflicts from buffering build seems useless overhead. gistplacetopage()
is called from only two places: gistinserttuples() and gistbufferinginserttuples( ). In order to evade
useless overhead for buffering build, I've moved CheckForSerializableConflictIn () into gistinserttuples().
Also, I find that we call PredicateLockPageSplit() for every page produced by split including
original. That also seems to cause extra overhead. This is why I've moved
PredicateLockPageSplit() into loop where we do assign new buffers.
------
Alexander Korotkov
Postgres Professional: http://www. postgrespro.com
The Russian Postgres Company
Alexander Korotkov
Postgres Professional: http://www.
The Russian Postgres Company
Вложения
В списке pgsql-hackers по дате отправления: