There’s a bunch of improvements & fixes in this month’s release, but before we get to those, I want to talk about you, dear reader.
When you buy my stuff, you’re funding my work on the First Responder Kit. I couldn’t do this if it wasn’t for you.
Y’all literally pay my rent.
I thank you. Erika thanks you. The rest of the community thanks you, too, because we all rely on the First Responder Kit to do our jobs every month.
If you want to contribute, check out my Black Friday sale this month. Whether you buy a Recorded Class Season Pass for $195, the Masters recordings for $695, or a Live Class Season Pass for $895, you’re doing your part to help make the First Responder Kit releases happen all year long.
And of course, if you’re already a member here, or a code contributor, thank you. You rock. You make all this possible for the entire SQL Server community.
To get the new version:
- Download the updated FirstResponderKit.zip
- Azure Data Studio users with the First Responder Kit extension:
ctrl/command+shift+p, First Responder Kit: Import.
- PowerShell users: run Install-DbaFirstResponderKit from dbatools
- Download the updated Consultant Toolkit in your account
- EU customers: check your email for the updated version from Gumroad, our European distributor
Consultant Toolkit Changes
I updated it to this month’s First Responder Kit, but no changes to querymanifest.json or the spreadsheet. If you’ve customized those, no changes are necessary this month: just copy the /Resources/SQLServerSetup checklist folder over your existing files to replace the SQL scripts.
- Improvement: new check for log backups to NUL, which would break point-in-time recovery. (#2640, thanks DBAdminDB.)
- Fix: stop alerting about usage of service accounts on the Launchpad service. (#2664, thanks Todd Chitt.)
- Improvement: added @SortOrder = ‘unused grant’, useful for when you have a lot of queries that are all hitting the max grant, and you’re looking for low-hanging fruit of the ones that use the least memory. (#2646)
- Fix: removed extra LOWER calls. (#2633, thanks Maikel van Gorkom)
- Fix: when outputting the results to table, the PlanCreationTimeHours calculated column now correctly refers to the difference between when the plan was created vs when the data was saved to table, as opposed to the current time (which would have been artificially long). (#2655, thanks Adrian Buckman.)
- Fix: parameterized queries in different databases were flagged as multiple query plans for the same query. (#2653, thanks Erik Darling.)
- Fix: we were excluding wait types that weren’t in our predefined list, which was a problem if you were hitting a new or obscure wait type. (Hello, EC.) (#2631)
- Fix: when saving sp_BlitzFirst’s output to table, we now trim it to 4,000 characters to avoid problems with really long warnings. (#2660, thanks Jefferson Elias aka JeffChulg.)
- Improvement: revamped the sort orders to make the output more clear and actionable, and clarified the wording on some of the warnings. For example, “Cold Calculator” is now “Serial Forcer – Computed Column with Scalar UDF.” Also added a new documentation file with the prioritized list of checks. (#2662)
- @Mode = 0 (default): now lists priorities 1-100, the most urgent things to fix.
- @Mode = 4: all priorities, 1-255, which includes not-easy-to-fix stuff (like bad clustering key designs or really wide tables), and informational warnings (like hey, you have temporal tables.)
- Improvement: added @SortDirection parameter that works in combination with the @SortOrder parameter for @Mode = 2, letting you sort by asc or desc. (#2651, thanks David A. Poole.)
- Fix: statistics updates will now show “never” if they’ve never been updated. (#2643, thanks Excelosaurus.)
- Fix: instead of showing 0 reads/writes in the summary, show “Not Tracked” on spatial indexes and “Disabled” on disabled indexes. (#2650)
- Work in progress, but not really working well yet: on SQL Server 2019, next to missing index requests in the table-level Mode 2 output and Mode 3 output, we show a sample query plan linked to that missing index request. (#2185, thanks Erik Darling.)
- Fix: statistics warning for low sampling rate was never firing because it was looking for rows < 1 rather than percent sampled < 1. (Caught & fixed this while I was working on #2662.)
- Fix: statistics checks now work in @GetAllDatabases = 1. (Caught & fixed this while I was working on #2662.)
- Fix: removed an extra space. (#2673, thanks John McCall.)
- Fix: was throwing an error on AG readable secondaries when sp_BlitzFirst called sp_BlitzWho due to duplicate temp table names. (#2491, thanks Adrian B.)
- Fix: we now pad the number of days a query’s been running with 2 digits instead of 0, so queries running more than 9 days (!!!) sort to the top of the list. (#2652, thanks Ahmet Rende.)
- Improvement: @StopAt can now skip full backups, too. (#2600, thanks Sergedess.)
- Improvement: new @SkipBackupsAlreadyInMsdb setting. When set to 1, we check MSDB for the most recently restored backup from this log path, and skip all backup files prior to that. Useful if you’re pulling backups from across a slow network and you don’t want to wait to check the restore header of each backup. (#2644, thanks Greg Dodd and Raphael Ducom.)
When you have questions about how the tools work, talk with the community in the #FirstResponderKit Slack channel. If you need a free invite, hit SQLslack.com. Be patient – it’s staffed with volunteers who have day jobs.
When you find a bug or want something changed, read the contributing.md file.
When you have a question about what the scripts found, first make sure you read the “More Details” URL for any warning you find. We put a lot of work into documentation, and we wouldn’t want someone to yell at you to go read the fine manual. After that, when you’ve still got questions about how something works in SQL Server, post a question at DBA.StackExchange.com and the community (that includes me!) will help. Include exact errors and any applicable screenshots, your SQL Server version number (including the build #), and the version of the tool you’re working with.