Releases: erikdarlingdata/DarlingData
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 |
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
Sweet Caroline!
What's Changed
- changed column name to remove duplicate by @DForck42 in #509
- added QUOTENAME to the output of the 'original_index_definition' colu… by @HannahVernon in #529
- added note about index_count column to the README.md by @HannahVernon in #530
There's no way to quickly or easily summarize this many changes, but:
sp_HealthParser:
- Added new event collections around errors, memory, and more cpu stuff
- Added the ability to log to tables
- Removed a lot of repetitive code by templating dynamic sql
sp_HumanEventsBlockViewer:
- Added the ability to log to a table. I know it's somewhat redundant to sp_HumanEvents, but it focuses purely on blocking and uses the final results from here rather than somewhat raw data with a view over it
- Added the ability to read from a table storing the blocked process report in an XML column
sp_PressureDetector
- Added table logging
sp_QuickieStore:
- Made the results query far less repetitive, no longer broken up over four sections of annoying to maintain code
- Pushed @include_query_hashes data deeper into the procedure so it's not just based on the results
AND THE BIG ONE!
sp_IndexCleanup
- No longer in beta!
- Reasonably functional, but still needs testing
Also fixed up some annoying formatting inconsistencies, etc. in various places.
New Contributors
Full Changelog: Updates_20250101...Updates_20250401