Re: Parallel scan with SubTransGetTopmostTransaction assert coredump
От | Robert Haas |
---|---|
Тема | Re: Parallel scan with SubTransGetTopmostTransaction assert coredump |
Дата | |
Msg-id | CA+TgmobZdQp6pKF6S20LT00viObp1Ue=kNw_8HqwjqnJAMZD3g@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Parallel scan with SubTransGetTopmostTransaction assert coredump (Greg Nancarrow <gregn4422@gmail.com>) |
Ответы |
Re: Parallel scan with SubTransGetTopmostTransaction assert coredump
|
Список | pgsql-hackers |
On Fri, Aug 13, 2021 at 2:52 AM Greg Nancarrow <gregn4422@gmail.com> wrote: > With your proposed approach, what I'm seeing is that the worker calls > GetTransactionSnapshot() at some point, which then builds a new > snapshot, and results in increasing TransactionXmin (probably because > another concurrent transaction has since completed). This snapshot is > thus later than the snapshot used in the execution state of the query > being executed. This causes the Assert in > SubTransGetTopmostTransaction() to fire because the xid doesn't follow > or equal the TransactionXmin value. Ah ha! Thank you. So I think what I was missing here is that even though the transaction snapshot is not a well-defined concept when !IsolationUsesXactSnapshot(), we still need TransactionXmin to be set to a value that's earlier than any XID we might inquire about. So the proposal to install the leader's active snapshot as the worker's transaction snapshot is really just a way of making that happen. Now that I understand better, that seems OK to me when !IsolationUsesXactSnapshot(), but otherwise I think we need to serialize and restore the actual transaction snapshot. Do you agree? -- Robert Haas EDB: http://www.enterprisedb.com
В списке pgsql-hackers по дате отправления: