Re: Speed up Clog Access by increasing CLOG buffers
Robert Haas <robertmhaas@gmail.com>
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? If we didn't try, we wouldn't need the all_trans_same_page flag, which would reduce the amount of code change. Would that hurt anything? Taking it even further, we could remove the check from TransactionGroupUpdateXidStatus too. I'd be curious to know whether that set of changes would improve performance or regress it. Or maybe it does nothing, in which case perhaps simpler is better. All things being equal, it's probably better if the cases where transactions from different pages get into the list together is something that is more or less expected rather than a once-in-a-blue-moon scenario - that way, if any bugs exist, we'll find them. The downside of that is that we could increase latency for the leader that way - doing other work on the same page shouldn't hurt much but different pages is a bigger hit. But that hit might be trivial enough not to be worth worrying about. + /* + * Now that we've released the lock, go back and wake everybody up. We + * don't do this under the lock so as to keep lock hold times to a + * minimum. The system calls we need to perform to wake other processes + * up are probably much slower than the simple memory writes we did while + * holding the lock. + */ This comment was true in the place that you cut-and-pasted it from, but it's not true here, since we potentially need to read from disk. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
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