Re: [Patch] Optimize dropping of relation buffers using dlist
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: "k.jamison@fujitsu.com" <k.jamison@fujitsu.com>
Cc: "tsunakawa.takay@fujitsu.com" <tsunakawa.takay@fujitsu.com>, Kyotaro Horiguchi <horikyota.ntt@gmail.com>,
"tgl@sss.pgh.pa.us" <tgl@sss.pgh.pa.us>, "andres@anarazel.de" <andres@anarazel.de>,
"robertmhaas@gmail.com" <robertmhaas@gmail.com>, "tomas.vondra@2ndquadrant.com" <tomas.vondra@2ndquadrant.com>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2020-09-26T06:14:04Z
Lists: pgsql-hackers
On Fri, Sep 25, 2020 at 1:49 PM k.jamison@fujitsu.com <k.jamison@fujitsu.com> wrote: > > Hi. > > > I'll send performance measurement results in the next email. Thanks a lot for > > the reviews! > > Below are the performance measurement results. > I was only able to use low-spec machine: > CPU 4v, Memory 8GB, RHEL, xfs filesystem. > > [Failover/Recovery Test] > 1. (Master) Create table (ex. 10,000 tables). Insert data to tables. > 2. (M) DELETE FROM TABLE (ex. all rows of 10,000 tables) > 3. (Standby) To test with failover, pause the WAL replay on standby server. > (SELECT pg_wal_replay_pause();) > 4. (M) psql -c "\timing on" (measures total execution of SQL queries) > 5. (M) VACUUM (whole db) > 6. (M) After vacuum finishes, stop primary server: pg_ctl stop -w -mi > 7. (S) Resume wal replay and promote standby. > Because it's difficult to measure recovery time I used the attached script (resume.sh) > that prints timestamp before and after promotion. It basically does the following > - "SELECT pg_wal_replay_resume();" is executed and the WAL application is resumed. > - "pg_ctl promote" to promote standby. > - The time difference of "select pg_is_in_recovery();" from "t" to "f" is measured. > > [Results] > Recovery/Failover performance (in seconds). 3 trial runs. > > | shared_buffers | master | patch | %reg | > |----------------|--------|--------|---------| > | 128MB | 32.406 | 33.785 | 4.08% | > | 1GB | 36.188 | 32.747 | -10.51% | > | 2GB | 41.996 | 32.88 | -27.73% | > > There's a bit of small regression with the default shared_buffers (128MB), > I feel we should try to address this. Basically, we can see the smallest value of shared buffers above which the new algorithm is beneficial and try to use that as threshold for doing this optimization. I don't think it is beneficial to use this optimization for a small value of shared_buffers. > but as for the recovery time when we have large NBuffers, it's now at least almost constant > so there's boosted performance. IOW, we enter the optimization most of the time > during recovery. > Yeah, that is good to see. We can probably try to check with a much larger value of shared buffers. -- With Regards, Amit Kapila.
Commits
-
Fix size overflow in calculation introduced by commits d6ad34f3 and bea449c6.
- 519e4c9ee21a 14.0 landed
-
Optimize DropRelFileNodesAllBuffers() for recovery.
- bea449c635c0 14.0 landed
-
Optimize DropRelFileNodeBuffers() for recovery.
- d6ad34f3410f 14.0 landed
-
Cache smgrnblocks() results in recovery.
- c5315f4f4484 14.0 cited
-
Add a check to prevent overwriting valid data if smgrnblocks() gives a
- ffae5cc5a602 8.2.0 cited