diff --git a/pageserver/src/metrics.rs b/pageserver/src/metrics.rs index 3e824b59fb..8f697558d6 100644 --- a/pageserver/src/metrics.rs +++ b/pageserver/src/metrics.rs @@ -2092,6 +2092,7 @@ pub(crate) struct WalIngestMetrics { pub(crate) records_received: IntCounter, pub(crate) records_committed: IntCounter, pub(crate) records_filtered: IntCounter, + pub(crate) gap_blocks_zeroed_on_rel_extend: IntCounter, } pub(crate) static WAL_INGEST: Lazy = Lazy::new(|| WalIngestMetrics { @@ -2115,6 +2116,11 @@ pub(crate) static WAL_INGEST: Lazy = Lazy::new(|| WalIngestMet "Number of WAL records filtered out due to sharding" ) .expect("failed to define a metric"), + gap_blocks_zeroed_on_rel_extend: register_int_counter!( + "pageserver_gap_blocks_zeroed_on_rel_extend", + "Total number of zero gap blocks written on relation extends" + ) + .expect("failed to define a metric"), }); pub(crate) static WAL_REDO_TIME: Lazy = Lazy::new(|| { diff --git a/pageserver/src/walingest.rs b/pageserver/src/walingest.rs index 95d1f76920..d3e8bf59f2 100644 --- a/pageserver/src/walingest.rs +++ b/pageserver/src/walingest.rs @@ -1915,7 +1915,9 @@ impl WalIngest { modification.put_rel_extend(rel, new_nblocks, ctx).await?; let mut key = rel_block_to_key(rel, blknum); + // fill the gap with zeros + let mut gap_blocks_filled: u64 = 0; for gap_blknum in old_nblocks..blknum { key.field6 = gap_blknum; @@ -1924,7 +1926,12 @@ impl WalIngest { } modification.put_rel_page_image_zero(rel, gap_blknum)?; + gap_blocks_filled += 1; } + + WAL_INGEST + .gap_blocks_zeroed_on_rel_extend + .inc_by(gap_blocks_filled); } Ok(()) }