Re: [HACKERS] Why MarkBufferDirtyHint doesn't increment shared_blks_dirtied
On Wed, Mar 26, 2014 at 11:23 PM, Amit Kapila wrote: > On Thu, Mar 27, 2014 at 1:39 AM, Robert Haas wrote: >> On Mon, Mar 24, 2014 at 9:02 PM, Amit Kapila wrote: >>> MarkBufferDirty() always increment BufferUsage counter >>> (shared_blks_dirtied) for dirty blocks whenever it dirties any >>> block, whereas same is not true for MarkBufferDirtyHint(). >>> Is there any particular reason for not incrementing >>> shared_blks_dirtied in MarkBufferDirtyHint()? >> >> Hmm, I think that's a bug, dating back to this commit: >> >> commit 2254367435fcc4a31cc3b6d8324e33c5c30f265a > > Right. > Do you think the fix attached in my previous mail is appropriate? > http://www.postgresql.org/message-id/CAA4eK1KQQSpNmfxg8Cg3-JZD23Q4Ee3iCsuLZGekH=dnagp...@mail.gmail.com Looks right to me. Committed and back-patched to 9.2. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
Re: [HACKERS] Why MarkBufferDirtyHint doesn't increment shared_blks_dirtied
On Thu, Mar 27, 2014 at 1:39 AM, Robert Haas wrote: > On Mon, Mar 24, 2014 at 9:02 PM, Amit Kapila wrote: >> MarkBufferDirty() always increment BufferUsage counter >> (shared_blks_dirtied) for dirty blocks whenever it dirties any >> block, whereas same is not true for MarkBufferDirtyHint(). >> Is there any particular reason for not incrementing >> shared_blks_dirtied in MarkBufferDirtyHint()? > > Hmm, I think that's a bug, dating back to this commit: > > commit 2254367435fcc4a31cc3b6d8324e33c5c30f265a Right. Do you think the fix attached in my previous mail is appropriate? http://www.postgresql.org/message-id/CAA4eK1KQQSpNmfxg8Cg3-JZD23Q4Ee3iCsuLZGekH=dnagp...@mail.gmail.com With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
Re: [HACKERS] Why MarkBufferDirtyHint doesn't increment shared_blks_dirtied
On Mon, Mar 24, 2014 at 9:02 PM, Amit Kapila wrote: > MarkBufferDirty() always increment BufferUsage counter > (shared_blks_dirtied) for dirty blocks whenever it dirties any > block, whereas same is not true for MarkBufferDirtyHint(). > Is there any particular reason for not incrementing > shared_blks_dirtied in MarkBufferDirtyHint()? Hmm, I think that's a bug, dating back to this commit: commit 2254367435fcc4a31cc3b6d8324e33c5c30f265a Author: Robert Haas Date: Wed Feb 22 20:33:05 2012 -0500 Make EXPLAIN (BUFFERS) track blocks dirtied, as well as those written. Also expose the new counters through pg_stat_statements. Patch by me. Review by Fujii Masao and Greg Smith. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
Re: [HACKERS] Why MarkBufferDirtyHint doesn't increment shared_blks_dirtied
On Tue, Mar 25, 2014 at 9:32 AM, Amit Kapila wrote: > MarkBufferDirty() always increment BufferUsage counter > (shared_blks_dirtied) for dirty blocks whenever it dirties any > block, whereas same is not true for MarkBufferDirtyHint(). > Is there any particular reason for not incrementing > shared_blks_dirtied in MarkBufferDirtyHint()? The issue can be reproduced with below test: postgresql.conf - autovacuum = off create table t1(c1 int, c2 char(500)) with (fillfactor=10); insert into t1 values(generate_series(1,1),'aaa'); exit session (\q) Stop and start the server connect a new session select count(*) from t1; -- here it has to mark each block dirty for -- setting hint bit postgres=# select query, shared_blks_dirtied from pg_stat_statements; query| shared_blks_dirtied +- select count(*) from t1; | 0 Above query should show shared_blks_dirtied = 1. Attached patch fixes this problem and result with patch is as below: After following steps above again, it will show correct results. postgres=# select query, shared_blks_dirtied from pg_stat_statements; query| shared_blks_dirtied +- select count(*) from t1; | 1 As expected shared_blks_dirtied is 1 I understand that issue is quite trivial, but fixing it will give correct stats. With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com increment_dirty_buffer_count-v1.patch Description: Binary data -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
[HACKERS] Why MarkBufferDirtyHint doesn't increment shared_blks_dirtied
MarkBufferDirty() always increment BufferUsage counter (shared_blks_dirtied) for dirty blocks whenever it dirties any block, whereas same is not true for MarkBufferDirtyHint(). Is there any particular reason for not incrementing shared_blks_dirtied in MarkBufferDirtyHint()? With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers