Re: Speed up Clog Access by increasing CLOG buffers
Amit Kapila <amit.kapila16@gmail.com>
On Mon, Feb 29, 2016 at 11:10 PM, Robert Haas <robertmhaas@gmail.com> wrote: > > On Fri, Feb 26, 2016 at 11:37 PM, Amit Kapila <amit.kapila16@gmail.com> wrote: > > On Sat, Feb 27, 2016 at 10:03 AM, Amit Kapila <amit.kapila16@gmail.com> > > wrote: > >> > >> Here, we can see that there is a gain of ~15% to ~38% at higher client > >> count. > >> > >> The attached document (perf_write_clogcontrollock_data_v6.ods) contains > >> data, mainly focussing on single client performance. The data is for > >> multiple runs on different machines, so I thought it is better to present in > >> form of document rather than dumping everything in e-mail. Do let me know > >> if there is any confusion in understanding/interpreting the data. > > > > Forgot to mention that all these tests have been done by reverting > > commit-ac1d794. > > OK, that seems better. But I have a question: if we don't really need > to make this optimization apply only when everything is on the same > page, then why even try? > This is to save the case when sub-transactions belonging to a transaction are on different pages, and the reason for same is that currently I am using XidCache as stored in each proc to pass the information of subtransactions to TransactionIdSetPageStatusInternal(), now if we allow subtransactions from different pages then I need to extract subxid's from that cache which belong to the page on which we are trying to update the status. Now this will add few more cycles in the code path under ExclusiveLock without any clear benefit, thats why I have not implemented it. I have explained the same in code comments as well: This optimization is only applicable if the transaction and + * all child sub-transactions belong to same page which we presume to be the + * most common case, we might be able to apply this when they are not on same + * page, but that needs us to map sub-transactions in proc's XidCache based + * on pageno for which each time Group leader needs to set the transaction + * status and that can lead to some performance penalty as well because it + * needs to be done after acquiring CLogControlLock, so let's leave that + * case for now. With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com
Commits
-
Use group updates when setting transaction status in clog.
- baaf272ac908 11.0 landed
- ccce90b39867 10.0 landed
-
Improve 64bit atomics support.
- e8fdbd58fe56 10.0 landed
-
Add ProcArrayGroupUpdate wait event.
- d4116a771925 10.0 landed
-
Make the different Unix-y semaphore implementations ABI-compatible.
- be7b2848c6d8 10.0 cited
-
Fix broken ALTER INDEX documentation
- 2143f5e12790 9.6.0 cited
-
Code and docs review for commit 3187d6de0e5a9e805b27c48437897e8c39071d45.
- d12e5bb79bb5 9.6.0 cited
-
Partition the freelist for shared dynahash tables.
- 44ca4022f3f9 9.6.0 cited
-
Correct StartupSUBTRANS for page wraparound
- 481725c0ba73 9.6.0 cited
-
Make idle backends exit if the postmaster dies.
- ac1d7945f866 9.6.0 cited
-
contrib/sslinfo: add ssl_extension_info SRF
- 49124613f134 9.6.0 cited
-
Reduce ProcArrayLock contention by removing backends in batches.
- 0e141c0fbb21 9.6.0 cited
-
Fix `make installcheck` for serializable transactions.
- 253de7e1eb9a 9.6.0 cited
-
Lockless StrategyGetBuffer clock sweep hot path.
- d72731a70450 9.5.0 cited
-
Reduce sinval synchronization overhead.
- b4fbe392f8ff 9.2.0 cited