Repository navigation
Store Checkpointer Pressure judges the average sync per checkpoint, not the interval's sum (#4037) - #4096
Merged
Conversation
erikdarlingdata
enabled auto-merge (squash)
September 24, 2026 00:02
…the distance to the top rung, not 1
erikdarlingdata
deleted the
fix/4037-checkpointer-per-checkpoint-bar
branch
September 24, 2026 00:36
This was referenced Sep 24, 2026
erikdarlingdata
added a commit
that referenced
this pull request
Sep 24, 2026
* Add 48 buffered CHANGELOG entries in one splice Adds 48 entries and 48 link refs (#4057, #4077, #4079, #4081, #4082, #4083, #4084, #4085, #4086, #4087, #4088, #4089, #4090, #4091, #4092, #4093, #4095, #4096, #4099, #4100, #4101, #4103, #4105, #4106, #4107, #4108, #4109, #4110, #4111, #4113, #4114, #4115, #4116, #4117, #4118, #4119, #4120, #4121, #4122, #4123, #4124, #4125, #4126, #4127, #4131, #4133, #4136, #4141). Each PR's entry was buffered, and this lands every entry whose PR was merged on origin/dev when it ran. Entries found under a bare section line (none unless the old script ran again) move into the matching ### section, below the new entries. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQh8LczP1HGLXQYAx4oTZC * Changelog splice: add #4137's entry, which merged before the splice but was missed #4137 (pg_plan_capture reads csvlog) merged at 05:57Z with a CHANGELOG entry section in its body. It was neither spliced nor listed as needing no entry. Its entry goes under Fixed, right after #4136's, and #4136's last sentence now points to it instead of saying plan capture is unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NUU29PuGg9TUFBsACgZg2K --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Store Checkpointer Pressure now judges the average sync time per checkpoint in the interval, not the interval's summed sync time. The old rule compared an hourly sum (about twelve timed checkpoints on the default five-minute
checkpoint_timeout) against a per-checkpoint bar (CheckpointSyncBarMs, 10 s, the MCP read deadline). So a healthy store whose checkpoints each sync in five to eight seconds breached every interval and never recovered: about four alerts a day at the 360-minute cooldown on one production store, and a second store sitting on the bar.Closes #4037
What changed
collect.store_metrics.checkpoints_timed, filled on theobject_kind = 'checkpointer'row only, with no default and no backfill.StorageVersion.SchemaVersiongoes 139 → 140, and the viewer's schema probe recognises the new column. Fleet stores go from schema 139 (or 137) to 140 on the next install.StoreSelfMetricswrites the timed count frompg_stat_checkpointer.num_timed(PostgreSQL 17+) orpg_stat_bgwriter.checkpoints_timed(older).DarlingStoreMetricsReader:CheckpointerSampleandCheckpointerDeltacarry the timed count.CheckpointCount = timed + requested, andAverageSyncMsPerCheckpoint = sync / count.IsPressureis now requested > 0 (unchanged) or average > bar.DarlingSelfAlertEvaluator: the alert message, detail, short message and recovery message state the checkpoint count and the per-checkpoint average. The stale pointers to two fixes that already shipped are removed. The served text has no issue refs.get_store_metrics: the checkpointer block addstimed,cumulative_timed,checkpoint_countandaverage_sync_ms_per_checkpoint. No field is renamed, andsync_bar_msstays. The reading note states the average and the count. No tool description changed.Tests
StoreToastAndCheckpointerTests(67): each case pinned:The column-list and SQL assertions and the four
CheckpointerPressure_*message assertions are also updated.New
CheckpointsTimedRungTests(3) takes over the top-rung claims fromPostmasterStartTimeRungTests(5), following the V138 → V139 hand-off pattern.What was run (coordinator, on the branch head)
CheckpointsTimedRungTests3/3;PostmasterStartTimeRungTests5/5;StoreSelfMetricsTests33/33 (the insert writes the new column on PostgreSQL 18);StoreToastAndCheckpointerTests67/67;QsCaptureModeRouteKnobToastRungTests6/6.Not verified
pg_stat_bgwriter.checkpoints_timedagainst a live server. The fixture runs 18.CHANGELOG entry
get_store_metricsreport the checkpoint count and the average. Adds schema rung V140 (store_metrics.checkpoints_timed). (Store Checkpointer Pressure compares an hourly sync sum to a per-checkpoint bar, so it fires permanently on healthy stores #4037)