On Thu, Dec 19, 2024 at 11:11 PM Nisha Moond <nisha.moond...@gmail.com> wrote: > > Here is further performance test analysis with v16 patch-set. > > > In the test scenarios already shared on -hackers [1], where pgbench was run > only on the publisher node in a pub-sub setup, no performance degradation was > observed on either node. > > > > In contrast, when pgbench was run only on the subscriber side with > detect_update_deleted=on [2], the TPS performance was reduced due to dead > tuple accumulation. This performance drop depended on the > wal_receiver_status_interval—larger intervals resulted in more dead tuple > accumulation on the subscriber node. However, after the improvement in patch > v16-0002, which dynamically tunes the status request, the default TPS > reduction was limited to only 1%. > > > > We performed more benchmarks with the v16-patches where pgbench was run on > both the publisher and subscriber, focusing on TPS performance. To summarize > the key observations: > > - No performance impact on the publisher as dead tuple accumulation does not > occur on the publisher.
Nice. It means that frequently getting in-commit-phase transactions by the subscriber didn't have a negative impact on the publisher's performance. > > - The performance is reduced on the subscriber side (TPS reduction (~50%) > [3] ) due to dead tuple retention for the conflict detection when > detect_update_deleted=on. > > - Performance reduction happens only on the subscriber side, as workload on > the publisher is pretty high and the apply workers must wait for the amount > of transactions with earlier timestamps to be applied and flushed before > advancing the non-removable XID to remove dead tuples. Assuming that the performance dip happened due to dead tuple retention for the conflict detection, would TPS on other databases also be affected? > > > [3] Test with pgbench run on both publisher and subscriber. > > > > Test setup: > > - Tests performed on pgHead + v16 patches > > - Created a pub-sub replication system. > > - Parameters for both instances were: > > > > share_buffers = 30GB > > min_wal_size = 10GB > > max_wal_size = 20GB > > autovacuum = false Since you disabled autovacuum on the subscriber, dead tuples created by non-hot updates are accumulated anyway regardless of detect_update_deleted setting, is that right? > Test Run: > > - Ran pgbench(read-write) on both the publisher and the subscriber with 30 > clients for a duration of 120 seconds, collecting data over 5 runs. > > - Note that pgbench was running for different tables on pub and sub. > > (The scripts used for test "case1-2_measure.sh" and case1-2_setup.sh" are > attached). > > > > Results: > > > > Run# pub TPS sub TPS > > 1 32209 13704 > > 2 32378 13684 > > 3 32720 13680 > > 4 31483 13681 > > 5 31773 13813 > > median 32209 13684 > > regression 7% -53% What was the TPS on the subscriber when detect_update_deleted = false? And how much were the tables bloated compared to when detect_update_deleted = false? Regards, -- Masahiko Sawada Amazon Web Services: https://aws.amazon.com