Releases: erikdarlingdata/DarlingData
Updates_20260401
April 1, 2026 Release
What's New
sp_QuickieStore 6.4
- New
@find_high_impactparameter — automated diagnostic that identifies high-impact queries, plan instability, and workload concentration - Workload concentration summary in
@find_high_impactoutput - Physical reads clarification in
@find_high_impactoutput - Start/end dates displayed in local time for
@find_high_impact - Fix: plan/object IDs no longer leak into
query_id_listin@find_high_impact - Expert Mode output for
sys.dm_db_tuning_recommendations(thanks @ReeceGoding — issue #483)
sp_QuickieStore @find_high_impact performance & output improvements
- Performance overhaul: ~60s → ~10s on large Query Stores
- Split 4-way DMV joins into staged temp table steps (interval IDs → runtime stats → plan rollup → query hash)
- Pre-staged query_ids and plan_ids reused across representative text, time bucketing, identifiers, and plan fetch
- Static SQL INSERT for scoring/diagnostics, separate OUTER APPLY for plans
- EXISTS semi-join patterns for interval filtering and plan fetch
- Clustered PKs on 7 temp tables for better optimizer estimates
- Removed redundant maintenance filters and
query_plan IS NOT NULLcheck
query_sql_textnow uses processing-instruction XML format (clickable in SSMS)top_waitscolumn omitted when Query Store wait stats unavailable (SQL 2016 or waits not enabled)@sort_orderparameter now serves as tiebreaker whenimpact_scoreties (defaults tocpu_share)- Representative text query rewritten to GROUP BY integer columns instead of
nvarchar(max)
sp_HealthParser 3.4
- Added MAXDOP 1 to all SELECT INTO queries for consistent performance
sp_IndexCleanup 2.4
- Fix: merge bug that lost include columns in subset chains
- Fix: unique constraints now recognized as superset targets in Key Subset detection (#721)
- Performance: stage
dm_db_index_usage_statsinto temp table (~4 min → ~10s) - Performance: replace
ISNULL(t.schema_id, v.schema_id)schema join withsys.objectsin all queries
Repo
- Issue templates converted from markdown to YAML issue forms
Version Bumps
All procedures updated to x.4 / 20260401:
| Procedure | Version |
|---|---|
| sp_HealthParser | 3.4 |
| sp_HumanEvents | 7.4 |
| sp_HumanEventsBlockViewer | 5.4 |
| sp_IndexCleanup | 2.4 |
| sp_LogHunter | 3.4 |
| sp_PerfCheck | 2.4 |
| sp_PressureDetector | 6.4 |
| sp_QueryReproBuilder | 1.4 |
| sp_QueryStoreCleanup | 1.4 |
| sp_QuickieStore | 6.4 |
Updates_20260301
March 1, 2026 Release
What's New
sp_HealthParser 3.3
- New
@skip_waitsparameter to skip the wait stats section - New
@use_ring_bufferparameter to use ring_buffer target instead of file target for faster collection
sp_PerfCheck 2.3
- Rework and README accuracy fixes
sp_PressureDetector 6.3
- 14 new perfmon counters
- Filter out zero-rate perfmon counters
sp_QuickieStore 6.3
- Expert Mode now always shows plan hashes
- Expert Mode T-SQL for plan forcing, unforcing, hint setting, and hint removal (thanks @ReeceGoding — PR #684)
- Expert Mode output for
sys.database_automatic_tuning_configurations(thanks @ReeceGoding — issue #661)
Version Bumps
All procedures updated to x.3 / 20260301:
| Procedure | Version |
|---|---|
| sp_HealthParser | 3.3 |
| sp_HumanEvents | 7.3 |
| sp_HumanEventsBlockViewer | 5.3 |
| sp_IndexCleanup | 2.3 |
| sp_LogHunter | 3.3 |
| sp_PerfCheck | 2.3 |
| sp_PressureDetector | 6.3 |
| sp_QueryReproBuilder | 1.3 |
| sp_QueryStoreCleanup | 1.3 |
| sp_QuickieStore | 6.3 |
What's Changed
- Add CI pipeline for multi-version SQL Server testing by @erikdarlingdata in #665
- Add @skip_waits parameter to sp_HealthParser by @erikdarlingdata in #666
- Add @skip_waits parameter to sp_HealthParser by @erikdarlingdata in #667
- Add @use_ring_buffer parameter to sp_HealthParser (v3.4) by @erikdarlingdata in #668
- Release sp_HealthParser 3.4 — @use_ring_buffer parameter by @erikdarlingdata in #669
- Fix build automation + add ring buffer target by @erikdarlingdata in #671
- Merge dev: build automation fix + ring buffer target by @erikdarlingdata in #672
- Switch build automation to PR-based workflow by @erikdarlingdata in #673
- Automation: Format and Build SQL File by @erikdarlingdata in #674
- Switch build automation to GitHub App token by @erikdarlingdata in #676
- Release: sp_PerfCheck v2.3 + README accuracy fixes by @erikdarlingdata in #677
- Add 14 perfmon counters to sp_PressureDetector by @erikdarlingdata in #683
- sp_QuickieStore: tweak feature/661-automatic-tuning so we respect our filters by @ReeceGoding in #681
- sp_QuickieStore: never hide plan hashes in Expert Mode. by @ReeceGoding in #680
- sp_QuickieStore: added expert mode T-SQL for plan forcing and hinting by @ReeceGoding in #684
- March 1 2026 release by @erikdarlingdata in #685
- sp_QuickieStore: add sys.database_automatic_tuning_configurations support by @erikdarlingdata in #686
- March 1 2026 release (v2) by @erikdarlingdata in #687
Full Changelog: Updates_20260215...Updates_20260301
Valentine's Day Massacre (of Bugs) 💘🐛
🎉 New Stored Procedure: sp_QueryStoreCleanup
Query Store collects a lot of noise — system DMV queries, index maintenance, statistics updates, DBCC commands — all cluttering up your Query Store and making it harder to find the queries you actually care about.
sp_QueryStoreCleanup identifies and removes duplicate and noisy queries from Query Store in any database on your server.
🔍 Text pattern matching to find system and maintenance noise
🧹 Hash-based deduplication (query_hash, plan_hash, or both)
🛡️ Queries with forced plans are always protected
📊 Report-only mode to preview before removing
⏳ Optional age filter to only remove stale queries
/* Preview what would be removed */
EXEC dbo.sp_QueryStoreCleanup
@database_name = 'YourDatabase',
@report_only = 1;
/* Remove the noise */
EXEC dbo.sp_QueryStoreCleanup
@database_name = 'YourDatabase';Full documentation: sp_QueryStoreCleanup README
🐛 32 Bug Fixes Across All 10 Stored Procedures
Two rounds of deep code review identified and fixed 32 logical bugs. Every fix was validated against SQL Server 2016, 2017, 2019, 2022, and 2025 — 50/50 installs and 50/50 executions, zero regressions.
sp_QuickieStore (5 fixes)
- Fixed cursor skipping databases when
@get_all_databases = 1(missing FETCH NEXT/CONTINUE) - Fixed compile memory calculation inflated 8x (
_kbcolumns already in KB, not pages) - Fixed log bytes calculation deflated ~95x (wrong divisor: 100000000 → 1048576)
- Removed duplicate TRUNCATE statements
- Added
@@DATEFIRSTwarning when@workdays = 1with unsupported regional settings
sp_PressureDetector (4 fixes)
- Fixed missing
SET LOCK_TIMEOUT -1in@cool_new_columns = 1branch - Fixed
DATEDIFFdivide-by-zero in perfmontotal_per_second - Fixed sampled
avg_ms_per_waitusing incorrect averaging (now uses proper delta calculation) - Fixed
@prefixNULL on Azure SQL causing query failures
sp_IndexCleanup (5 fixes)
- Fixed
LEN()trailing space trim causing off-by-one in comma-separated list truncation (switched toDATALENGTH) - Fixed
t.max_length = -1never matching for(max)columns (should bec.max_length) - Plus 3 additional fixes from prior review
sp_HumanEvents (4 fixes)
- Fixed memory filter, CATCH cleanup, QUOTENAME schema/table handling
sp_PerfCheck (3 fixes)
- Fixed NULL
@processorscausing bad detail strings - Fixed TOKENANDPERMUSERSTORE priority gap (
BETWEEN 3 AND 5→BETWEEN 2 AND 5) - Wrapped DMV queries in
VIEW SERVER STATEguard
sp_QueryReproBuilder (2 fixes)
- Fixed version gates from
@new(SQL 2019+) to@sql_2017for columns available since SQL 2017
sp_HumanEventsBlockViewer (2 fixes)
- Fixed table mode XML handling and DATEADD overflow guard
sp_QueryStoreCleanup (1 fix)
- Fixed
COUNT_BIG(*)false positives →COUNT_BIG(DISTINCT)(eliminated 39% false positive rate)
sp_HealthParser (1 fix)
- Fixed XPath inputbuf extraction
sp_LogHunter (1 fix)
- Added archive > 0 guard
🔧 Additional Improvements
Round 2 Fixes (5 additional)
- sp_HealthParser: Added missing
N''unicode prefix on dynamic SQL string - sp_HumanEventsBlockViewer: Fixed debug label mismatch (
#blocking_sh→#blocking_xml_sh) - sp_PerfCheck:
GETDATE()→SYSDATETIME()for uptime calculation consistency - sp_PressureDetector: Renamed misleading
physical_readscolumn tological_reads(source wasder.logical_reads) - sp_PressureDetector: Fixed
SUBSTRINGstart position off-by-one in debug PRINT
sp_PressureDetector
- Filter out zero-rate perfmon counters from output
Tested on SQL Server 2016, 2017, 2019, 2022, and 2025 ✅
February 2026 Bug Fixes
Bug Fixes
This release includes bug fixes across multiple stored procedures discovered during code review.
sp_IndexCleanup (2.2.5)
- Fixed rule prioritization for Key Duplicates of MAKE UNIQUE indexes (Rule 7.6)
- Fixed MERGE scripts for non-compressible indexes (changed INNER JOIN to LEFT JOIN)
- Added missing semicolons to generated scripts
sp_HumanEvents (7.2.5)
- Fixed duplicate column name
blocked_process_reportin blocking output (renamed XML data column toblocked_process_report_xml)
sp_HumanEventsBlockViewer (5.2.5)
- Version bump for consistency
sp_LogHunter (3.2.5)
- Fixed RAISERROR format specifier mismatch (
%ichanged to%I64dfor bigint variable)
sp_PerfCheck (2.2.5)
- Fixed file growth calculation formula
- Fixed COUNT_BIG to integer assignment mismatch
- Fixed WHERE clause logic error
- Added missing AS keyword in column alias
sp_PressureDetector (6.2.5)
- Fixed column alias mismatch in UNION (
total_avg_stallvstotal_avg_stall_ms) - Fixed bit variable compared to string 'true' instead of 1
sp_QueryReproBuilder (1.2.5)
- Fixed temp table
#procedure_object_idsused before creation when wildcard procedure name used - Fixed SUBSTRING error in parameter extraction when query plans lack ParameterList XML
- Added missing semicolon after END CATCH
sp_HealthParser (3.2.5)
- Added table logging for blocking/deadlocks
- Fixed data types
- Added blocked process attributes
sp_QuickieStore (6.2.5)
- Added total sort options
Happy New Year
- Added @target_output parameter to sp_HumanEvents, if you want to use a file instead of the ring buffer.
- Removed the geometry stuff from sp_QuickieStore. I haven't quite figured out how to make it work yet. Also removed some vestigial checks that are no longer required in Azure.
- Tuned WhatsUpLocks to run less terribly when there are a lot of locks
- Added compression type to WhatsUpIndexes
- Added new 2025 memory pressure stuff to sp_PressureDetector and sp_PerfCheck
- Did extensive work on sp_PerfCheck to fix a lot of stuff I was unhappy with. Difficult to list it all.
- Did extensive work on sp_IndexCleanup to make it more reliable and less complicated.
You'll note that the version dates for these is January 15th. While I am releasing this now (early), I probably won't be back looking at this stuff until January 5th or so. Hopefully you won't either!
It's lonely out in space
What's Changed
- burg by @erikdarlingdata in #636
- Dev by @erikdarlingdata in #642
- sp_QuickieStore: Correct window function in lasts by @ReeceGoding in #644
- Dev by @erikdarlingdata in #647
Full Changelog: Updates_20250901...Updates_20251114
This release has a ton of tiny fixes and tweaks that I've been making to complement the training stuff I've been working on.
It also introduces a new stored procedure called sp_QueryReproBuilder, that uses Query Store data to build easy-to-execute parameterized repro queries. This is a bit of an alpha release, so please be gentle when reporting issues.
Back to School
What's Changed
- Update sp_HumanEventsBlockViewer.sql by @erikdarlingdata in #622
- Dev by @erikdarlingdata in #626
- Fix Incorrect syntax near NULL when using @include_query_hash_totals = 1 by @Kysluss in #629
- Made sp_HumanEventsBlockViewer able to use the ring buffer for system_health. by @ReeceGoding in #632
- Dev by @erikdarlingdata in #635
New Contributors
Full Changelog: Updates_20250601...Updates_20250901
Updates_20250601
What's Changed
- sp_QuickieStore: Appended _ms where it was missing for avg_cpu_time by @ReeceGoding in #600
- sp_QuickieStore: Moved validation of @sort_order to be much earlier on. by @ReeceGoding in #602
- sp_QuickieStore: Moved special sorting columns for special sort order values to be jus… by @ReeceGoding in #604
- sp_QuickieStore: Made plan hash, query hash, or sql handle show when the parameter for filtering them out is passed in by @ReeceGoding in #608
- sp_QuickieStore: Documents that @format_output = 1 removes most decimals. by @ReeceGoding in #606
- Adding support for indexed views in addition to indexes on tables. by @FirstCall42 in #610
- sp_QuickieStore: Move regression validation to just after sort order by @ReeceGoding in #612
- Made sp_HumanEventsBlockViewer not error out when system_health is used by @ReeceGoding in #618
Full Changelog: Updates_20250501...Updates_20250601
May Flowers
What's Changed
- fix for 00 decimals on avg_read/write_stall_ms and total_avg_stall_ms by @VladDBA in #567
- sp_QuickieStore's Readme.md file - Markdown needs the escape character escaped by @VladDBA in #572
- sp_QuickieStore: Consistent PRIMARY KEY syntax. by @ReeceGoding in #578
- sp_QuickieStore: Made skipping maintenance plans optional by @ReeceGoding in #580
- Expand wait_time_percent_of_uptime to accomodate >1,000% waits by @ChrisMayIVCE in #585
- sp_QuickieStore: Multiple changes to how wait stats are handled by @ReeceGoding in #590
- Made filtering by @execution_count be done with a temp table rather than a variable by @ReeceGoding in #593
New Contributors
- @VladDBA made their first contribution in #567
- @ChrisMayIVCE made their first contribution in #585
Full Changelog: Updates_20240404...Updates_20250501
4.4 @ 4:44
This release fixes a bunch of stuff that I found in deeper testing across different environments.
It also introduces a new stored procedure called sp_PerfCheck, which does a targeted set of checks for performance-related stuff only. No backups, no checkdb, no security, etc. It's built to work with Azure SQLDB too, which is... I guess sort of helpful, given how little you can change while running SQL Server in Safe Mode. I will be adding more specific checks for cloudy things in the future.
For now, check out the readme to learn more.
Also, give it a run. Let me know what you think. I care about your feelings.
What's Changed
- sp_QuickieStore: @utc_offset_string nvarchar(max) changed to nvarchar(6) by @ReeceGoding in #537
- Compression eligibility changes by @FirstCall42 in #549
New Contributors
- @FirstCall42 made their first contribution in #549
Full Changelog: Updates_20250401...Updates_20240404