Re: Speed up Clog Access by increasing CLOG buffers
Amit Kapila <amit.kapila16@gmail.com>
On Mon, Sep 7, 2015 at 7:04 PM, Alvaro Herrera <alvherre@2ndquadrant.com> wrote: > > Andres Freund wrote: > > > The buffer replacement algorithm for clog is rather stupid - I do wonder > > where the cutoff is that it hurts. > > > > Could you perhaps try to create a testcase where xids are accessed that > > are so far apart on average that they're unlikely to be in memory? > > Yes, I am working on it, what I have in mind is to create a table with large number of rows (say 50000000) and have each row with different transaction id. Now each transaction should try to update rows that are at least 1048576 (number of transactions whose status can be held in 32 CLog buffers) distance apart, that way for each update it will try to access Clog page that is not in-memory. Let me know if you can think of any better or simpler way. > > There's two reasons that I'd like to see that: First I'd like to avoid > > regression, second I'd like to avoid having to bump the maximum number > > of buffers by small buffers after every hardware generation... > > I wonder if it would make sense to explore an idea that has been floated > for years now -- to have pg_clog pages be allocated as part of shared > buffers rather than have their own separate pool. > There could be some benefits of it, but I think we still have to acquire Exclusive lock while committing transaction or while Extending Clog which are also major sources of contention in this area. I think the benefits of moving it to shared_buffers could be that the upper limit on number of pages that can be retained in memory could be increased and even if we have to replace the page, responsibility to flush it could be delegated to checkpoint. So yes, there could be benefits with this idea, but not sure if they are worth investigating this idea, one thing we could try if you think that is beneficial is that just skip fsync during write of clog pages and if thats beneficial, then we can think of pushing it to checkpoint (something similar to what Andres has mentioned on nearby thread). Yet another way could be to have configuration variable for clog buffers (Clog_Buffers). 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