Skip to content

A report-side Unresolved reason suffix still splits the fingerprint from its DMV twin #1898

Description

@erikdarlingdata

Found while implementing [#1893], and deliberately left out of that PR.

[#1893] closed the last database-naming gap between the two blocking collectors: both now write Unresolved: <type> lock, database: <resource database> for a lock whose object they could not name, so a cross-database lock fingerprints once. One difference remains, and it is not about the database.

[#1865] gave the report side's sentinel a trailing reason — Unresolved: key lock, database: Foo (no metadata access), (page reallocated), (database unavailable), (page lookup needs sql server 2019). The DMV side has no equivalent and cannot acquire one: it never attempts the object lookup, so there is no failure to classify. So when both collectors see the same unresolvable lock AND the report side attached a reason, the labels differ by that suffix:

label
blocked_process_report Unresolved: key lock, database: Foo (no metadata access)
dmv_blocking_snapshots Unresolved: key lock, database: Foo

[#1876]'s normalizer deliberately preserves the suffix (pinned by A_Label_Already_In_Report_Form_Is_Returned_Untouched, which includes a (page reallocated) case), so these hash to two DedupKeys — a third-order version of the same defect [#1876] and [#1893] each narrowed.

Why it is narrow

It needs the report side to have attached a reason at all, which happens in two situations:

  • (no metadata access) — the monitoring login has no user in the contended database. Permanent while the posture lasts, so the split is stable rather than churning: one extra incident, not a stream of them.
  • (page reallocated) — transient by definition, and the DMV sweep is unlikely to catch the same instant.

The common case — an object that simply could not be resolved, with no reason recorded — already produces byte-identical labels on both sides, which is what [#1893] verified live.

Why it needs a decision rather than a patch

The obvious fix is to drop the reason from the incident identity while keeping it on the row. That is a real design question, not a tweak:

Not a regression. Before [#1876] these rows did not dedup at all.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions