RE: Time delayed LR (WAS Re: logical replication restrictions) - Mailing list pgsql-hackers
From | Hayato Kuroda (Fujitsu) |
---|---|
Subject | RE: Time delayed LR (WAS Re: logical replication restrictions) |
Date | |
Msg-id | TYAPR01MB5866C5153713CFF4FE1DBA69F5439@TYAPR01MB5866.jpnprd01.prod.outlook.com Whole thread Raw |
In response to | Re: Time delayed LR (WAS Re: logical replication restrictions) (Amit Kapila <amit.kapila16@gmail.com>) |
Responses |
RE: Time delayed LR (WAS Re: logical replication restrictions)
|
List | pgsql-hackers |
Dear Amit, Thank you for giving suggestions. > > Dear hackers, > > > > I rebased and refined my PoC. Followings are the changes: > > > > 1. Is my understanding correct that this patch creates the delay files > for each transaction? If so, did you consider other approaches such as > using one file to avoid creating many files? I have been analyzing the approach which uses only one file per subscription, per your suggestion. Currently I'm not sure whether it is good approach or not, so could you please give me any feedbacks? TL;DR: rotating segment files like WALs may be used, but there are several issues. # Assumption * Streamed txns are also serialized to the same permanent file, in the received order. * No additional sorting is considered. # Considerations As a premise, applied txns must be removed from files, otherwise the disk becomes full in some day and it leads PANIC. ## Naive approach - serialize all the changes to one large file If workers continue to write received changes from the head naively, it may be difficult to purge applied txns because there seems not to have a good way to truncate the first part of the file. I could not find related functions in fd.h. ## Alternative approach - separate the file into segments Alternative approach I came up with is that the file is divided into some segments - like WAL - and remove it if all written txns are applied. It may work well in non-streaming, 1pc case, but may not in other cases. ### Regarding the PREPARE transactions At that time it is more likely to occur that the segment which contains the actual txn is differ from the segment where COMMIT PREPARED. Hence the worker must check all the remained segments to find the actual messages from them. Isn't it inefficient? There is another approach that workers apply the PREPARE immediately and spill to file only COMMIT PREPARED, but in this case the worker have been acquiring the lock and never released it till delay is done. ### Regarding the streamed transactions As for streaming case, chunks of txns are separated into several segments. Hence the worker must check all the remained segments to find chunks messages from them, same as above. Isn't it inefficient too? Additionally, segments which have prepared or streamed transactions cannot be removed, so even if the case many files may be generated and remained. Anyway, it may be difficult to accept to stream in-progress transactions while delaying the application. IIUC the motivation of steaming is to reduce the lag between nodes, and it is opposite of this feature. So it might be okay, not sure. ### Regarding the publisher - timing to send schema may be fuzzy Another issue is that the timing when publisher sends the schema information cannot be determined on publisher itself. As discussed on hackers, publisher must send schema information once per segment file, but it is controlled on subscriber side. I'm thinking that the walsender cannot recognize the changing of segments and understand the timing to send them. That's it. I'm very happy to get idea. Best Regards, Hayato Kuroda FUJITSU LIMITED
pgsql-hackers by date: