Обсуждение: pg_stat_statements, write activity
I would guess that shared_blks_dirtied in pg_stat_statements is basically the count of blocks which will be logged into WALand written back during checkpoints. So then what is shared_blks_written? Or do I misunderstand shared_blks_dirtied??? -- Scott Ribe scott_ribe@elevated-dev.com https://www.linkedin.com/in/scottribe/
On 16/5/25 20:10, Scott Ribe wrote: > I would guess that shared_blks_dirtied in pg_stat_statements is basically the count of blocks which will be logged intoWAL and written back during checkpoints. So then what is shared_blks_written? Or do I misunderstand shared_blks_dirtied??? My understanding is that dirtied will be eventually written, via checkpoint or bg writer, so it's a matter of timing. > > -- > Scott Ribe > scott_ribe@elevated-dev.com > https://www.linkedin.com/in/scottribe/ > > > > >
On Fri, 2025-05-16 at 11:10 -0600, Scott Ribe wrote: > I would guess that shared_blks_dirtied in pg_stat_statements is basically the > count of blocks which will be logged into WAL and written back during checkpoints. > So then what is shared_blks_written? Or do I misunderstand shared_blks_dirtied??? The statistics track how many blocks were dirtied or written by the backend process that performed the SQL statement. Typically, the backend only dirties the blocks, but doesn't write them to disk itself. This is done by the checkpointer or the background writer later on. Sometimes, a backend writes a block to disk itself. This might happen if a lot of cache pressure, but usually it happens when the table is extended with new blocks. Yours, Laurenz Albe
> On May 16, 2025, at 1:37 PM, Laurenz Albe <laurenz.albe@cybertec.at> wrote: > > Sometimes, a backend writes a block to disk itself. This might happen if a lot > of cache pressure, but usually it happens when the table is extended with new > blocks. Ah, that's the piece I was missing! Do the written blocks get counted as dirty first, or only as written?
On Sat, 2025-05-17 at 08:50 -0600, Scott Ribe wrote: > > On May 16, 2025, at 1:37 PM, Laurenz Albe <laurenz.albe@cybertec.at> wrote: > > > > Sometimes, a backend writes a block to disk itself. This might happen if a lot > > of cache pressure, but usually it happens when the table is extended with new > > blocks. > > Ah, that's the piece I was missing! > > Do the written blocks get counted as dirty first, or only as written? They will certainly be dirty as well. You can use simple experiments to answer questions like this: CREATE TABLE new(id integer); EXPLAIN (ANALYZE, BUFFERS, COSTS OFF, SUMMARY OFF) INSERT INTO new VALUES (42); QUERY PLAN ════════════════════════════════════════════════════════════ Insert on new (actual time=0.165..0.166 rows=0.00 loops=1) Buffers: shared dirtied=1 written=1 -> Result (actual time=0.002..0.003 rows=1.00 loops=1) Yours, Laurenz Albe
ooh yeah, I had forgotten those relatively new additions to explain...