Re: [HACKERS] Speedup twophase transactions
От | Nikhil Sontakke |
---|---|
Тема | Re: [HACKERS] Speedup twophase transactions |
Дата | |
Msg-id | CAMGcDxe=8wm3O_wduNBXhi9=yLF71--Yf9PW+kJFt==xei4qNg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] Speedup twophase transactions (Michael Paquier <michael.paquier@gmail.com>) |
Ответы |
Re: [HACKERS] Speedup twophase transactions
|
Список | pgsql-hackers |
>> Having CheckPointTwoPhase() do the flush would mean shifting the data >> from KnownPreparedList into TwoPhaseState shmem. > > Er, no. For CheckPointTwoPhase(), at recovery what needs to be done is > to have all the entries in KnownPreparedList() flushed to disk and > have those entries removed while holding a shared memory lock. The KnownPreparedList is constructed by the recovery process. CheckPointTwoPhase() gets called by the checkpointer process. The checkpointer does not have access to this valid KnownPreparedList. >And for > the rest we need to be careful to have PrescanPreparedTransactions, > RecoverPreparedTransactions and StandbyRecoverPreparedTransactions > aware of entries that are in KnownPreparedList(). Yeah, that part is straightforward. It does involve duplication of the earlier while loops to work against KnownPreparedList. A smart single while loop which loops over the 2PC files followed by the list would help here :-) > Let's leave the > business of putting the information from KnownPreparedList to > TwoPhaseState in RecoverPreparedTransactions, which need to be aware > of entries in KnownPreparedList() anyway. The only thing that differs > is how the 2PC information is fetched: from the segments or from the > files in pg_twophase. > Yeah. This part is also ok. We also got to be careful to mark the shmem gxact entry with "ondisk = false" and need to set prepare_start_lsn/prepare_end_lsn properly as well. >> I wonder what's the best location for this in the common case when we >> do shutdown of standby. We could add code in XLOG_CHECKPOINT_SHUTDOWN >> and XLOG_CHECKPOINT_ONLINE xlog_redo code path. > > ShutdownXLOG() calls CreateRestartPoint() when a standby shuts down, > so doing all the durability work in CheckPointTwoPhase() would take > care of any problems. > ShutdownXLOG() gets called from the checkpointer process. See comments above about the checkpointer not having access to the proper KnownPreparedList. The following test sequence will trigger the issue: 1) start master 2) start replica 3) prepare a transaction on master 4) shutdown master 5) shutdown replica CheckPointTwoPhase() in (5) does not sync this prepared transaction because the checkpointer's KnownPreparedList is empty. Regards, Nikhils -- Nikhil Sontakke http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training & Services
В списке pgsql-hackers по дате отправления: