Re: SUBTRANS: Minimizing calls to SubTransSetParent() - Mailing list pgsql-hackers

From Dilip Kumar
Subject Re: SUBTRANS: Minimizing calls to SubTransSetParent()
Date
Msg-id CAFiTN-sX2_4gJ_Hm0AGRXwyCg2pJfgzBtnfqLQrCpC4a3Zec9Q@mail.gmail.com
Whole thread Raw
In response to Re: SUBTRANS: Minimizing calls to SubTransSetParent()  (Julien Tachoires <julmon@gmail.com>)
Responses Re: SUBTRANS: Minimizing calls to SubTransSetParent()
List pgsql-hackers
On Fri, Oct 28, 2022 at 10:55 PM Julien Tachoires <julmon@gmail.com> wrote:
>
> Hi,
>
> Le lun. 26 sept. 2022 à 15:57, Simon Riggs
> <simon.riggs@enterprisedb.com> a écrit :
> >
> > On Fri, 16 Sept 2022 at 13:20, Simon Riggs <simon.riggs@enterprisedb.com> wrote:
> > >
> > > Thanks for the review.
> > >
> > > v10 attached
> >
> > v11 attached, corrected for recent commit
> > 14ff44f80c09718d43d853363941457f5468cc03.
>
> Please find below the performance tests results I have produced for this patch.
> Attaching some charts and the scripts used to reproduce these tests.
>
> 1. Assumption
>
> The number of sub-transaction issued by only one long running
> transaction may affect global TPS throughput if the number of
> sub-transaction exceeds 64 (sub-overflow)
>
> 2. Testing scenario
>
> Based on pgbench, 2 different types of DB activity are applied concurrently:
> - 1 long running transaction, including N sub-transactions
> - X pgbench clients running read-only workload
>
> Tests are executed with a varying number of sub-transactions: from 0 to 128
> Key metric is the TPS rate reported by pgbench runs in read-only mode
>
> Tests are executed against
> - HEAD (14a737)
> - HEAD (14a737) + 002_minimize_calls_to_SubTransSetParent.v11.patch
>
> 3. Long transaction anatomy
>
> Two different long transactions are tested because they don't have the
> exact same impact on performance.
>
> Transaction number 1 includes one UPDATE affecting each row of
> pgbench_accounts, plus an additional UPDATE affecting only one row but
> executed in its own rollbacked sub-transaction:
> BEGIN;
> SAVEPOINT s1;
> SAVEPOINT s2;
> -- ...
> SAVEPOINT sN - 1;
> UPDATE pgbench_accounts SET abalance = abalance + 1  WHERE aid > 0;
> SAVEPOINT sN;
> UPDATE pgbench_accounts SET abalance = abalance + 1 WHERE aid = 12345;
> ROLLBACK TO SAVEPOINT sN;
> -- sleeping until the end of the test
> ROLLBACK;
>
> Transaction 2 includes one UPDATE affecting each row of pgbench_accounts:
> BEGIN;
> SAVEPOINT s1;
> SAVEPOINT s2;
> -- ...
> SAVEPOINT sN;
> UPDATE pgbench_accounts SET abalance = abalance + 1 WHERE aid > 0;
> -- sleeping until the end of the test
> ROLLBACK;
>
> 4. Test results with transaction 1
>
> TPS vs number of sub-transaction
>
> nsubx  HEAD  patched
> --------------------
>   0   441109  439474
>   8   439045  438103
>  16   439123  436993
>  24   436269  434194
>  32   439707  437429
>  40   439997  437220
>  48   439388  437422
>  56   439409  437210
>  64   439748  437366
>  72    92869  434448
>  80    66577  434100
>  88    61243  434255
>  96    57016  434419
> 104    52132  434917
> 112    49181  433755
> 120    46581  434044
> 128    44067  434268
>
> Perf profiling on HEAD with 80 sub-transactions:
> Overhead  Symbol
>   51.26%  [.] LWLockAttemptLock
>   24.59%  [.] LWLockRelease
>    0.36%  [.] base_yyparse
>    0.35%  [.] PinBuffer
>    0.34%  [.] AllocSetAlloc
>    0.33%  [.] hash_search_with_hash_value
>    0.22%  [.] LWLockAcquire
>    0.20%  [.] UnpinBuffer
>    0.15%  [.] SimpleLruReadPage_ReadOnly
>    0.15%  [.] _bt_compare
>
> Perf profiling on patched with 80 sub-transactions:
> Overhead  Symbol
>   2.64%  [.] AllocSetAlloc
>   2.09%  [.] base_yyparse
>   1.76%  [.] hash_search_with_hash_value
>   1.62%  [.] LWLockAttemptLock
>   1.26%  [.] MemoryContextAllocZeroAligned
>   0.93%  [.] _bt_compare
>   0.92%  [.] expression_tree_walker_impl.part.4
>   0.84%  [.] SearchCatCache1
>   0.79%  [.] palloc
>   0.64%  [.] core_yylex
>
> 5. Test results with transaction 2
>
> nsubx  HEAD  patched
> --------------------
>   0  440145  443816
>   8  438867  443081
>  16  438634  441786
>  24  436406  440187
>  32  439203  442447
>  40  439819  443574
>  48  439314  442941
>  56  439801  443736
>  64  439074  441970
>  72  439833  444132
>  80  148737  439941
>  88  413714  443343
>  96  251098  442021
> 104   70190  443488
> 112  405507  438866
> 120  177827  443202
> 128  399431  441842
>
> From the performance point of view, this patch clearly fixes the
> dramatic TPS collapse shown in these tests.

I think these are really promising results.  Although the perf result
shows that the bottleneck on the SLRU is no more there with the patch,
I think it would be nice to see the wait event as well.

--
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com



pgsql-hackers by date:

Previous
From: Bharath Rupireddy
Date:
Subject: Re: Adding doubly linked list type which stores the number of items in the list
Next
From: Alexander Korotkov
Date:
Subject: Re: Lockless queue of waiters in LWLock