VladDBA / PSBlitz

a PowerShell-based tool that outputs SQL Server health and performance diagnostics data to either Excel or HTML, and saves execution plans and deadlock graphs as .sqlplan and .xdl files.
https://vladdba.com/2022/09/15/psblitz-easily-outputs-sql-server-diagnostic-data/
Other
78 stars 17 forks source link
deadlock deadlock-graph execution-plan powershell sp-blitz sp-blitzcache sp-blitzfirst sp-blitzindex sp-blitzlock sql sql-server sql-server-performance-scripts wait-stats

PSBlitz

Navigation

Intro

Since I'm a big fan of Brent Ozar's SQL Server First Responder Kit and I've found myself in many situations where I would have liked a quick way to easily export the output of sp_Blitz, sp_BlitzCache, sp_BlitzFirst, sp_BlitzIndex, sp_BlitzLock, and sp_BlitzWho to Excel, as well as saving to disk the execution plans identified by sp_BlitzCache and deadlock graphs from sp_BlitzLock, I've decided to put together a PowerShell script that does just that.
As of version 3.0.0, PSBlitz is also capable of exporting the report to HTML making Excel/Office no longer a hard requirement for running PSBlitz.
As of version 4.0.1, PSBlitz is also compatible with Azure SQL DB and Azure SQL Managed Instance.
As of version 4.3.4, PSBlitz can be executed using PowerShell on Linux, the output will default to HTML regardless of the option used.

Compatibility

PSBlitz can be executed with:

What it does

Outputs the following to an Excel spreadsheet or to an HTML report:

Exports the following files:

Note

If the execution of PSBlitz took longer than 15 minutes up until the call to sp_BlitzLock, the timeframe for sp_BlitzLock will be narrowed down to the last 7 days in order to keep execution time within a reasonable amount.
If PSBlitz detects an exclusive lock being held on a table or index it will automatically skip that table/index from the index fragmentation information and will make a note of that in the Execution Log.

Prerequisites

  1. In order to be able to run the PSBlitz.ps1 script, you'll need to unblock it:
    Unblock-File .\PSBlitz.ps1
  2. If you want the report to be in Excel format, then the MS Office suite needs to be installed on the machine where you're executing PSBlitz, otherwise use the HTML format.
  3. Sufficient permissions to query DMVs, server state, and get database objects' definitions.

You don't need to have any of the sp_Blitz stored procedures present on the instance that you're executing PSBlitz.ps1 for, all the scripts are contained in the PSBlitz\Resources directory in non-stored procedure format.

Limitations:

Back to top

Installation

Download the latest zip file from the Releases section of the repository and extract its contents.

Do not change the directory structure and file names.

Back to top

What it runs

PSBlitz.ps1 uses slightly modified, non-stored procedure versions, of the following components from Brent Ozar's SQL Server First Responder Kit:

Aside from the above scripts, PSBlitz also runs the following scripts to return sp_BlitzWho data, instance and resource information, TempDB usage, opened transactions, statistics and index fragmentation info:

You can find the all the scripts in the repository's Resources directory

Back to top

Paramaters

Parameter Description
-ServerName The name of your SQL Server instance or Azure SQL DB connection info.

Accepted input format:
HostName\InstanceID for named instances.
HostName,Port when using a port number instead of an instance ID.
HostName for default instances.

For Azure SQL DB the format is:
YourServer.database.windows.net,PortNumber:YourDatabase if you want to specify the port number.
YourServer.database.windows.net:YourDatabase if you don't want to specify the port number.
If your Azure SQL DB instance doesn't use the database.windows.net portion (e.g.: it's configured to use an IP instead) then you should provide the database name via the -CheckDB parameter.

Other options:
If you provide ? or Help as a value for -ServerName, the script will return a brief help menu.
If no value is provided, the script will go into interactive mode and prompt for the appropriate input
-SQLLogin The name of the SQL login used to run the script. If not provided, the script will use integrated security.
-SQLPass The password for the SQL login provided via the -SQLLogin parameter, omit if -SQLLogin was not used.
-IsIndepth Providing Y as a value will tell PSBlitz.ps1 to run a more in-depth check against the instance/database. Omit for default check.
-CheckDB Used to provide the name of a specific database against which sp_BlitzIndex, sp_BlitzCache, and sp_BlitzLock will be ran. Omit to run against the whole instance.

For Azure SQL DB
Can also be used to provide the name of the Azure SQL DB database if you haven't provided it as part of the
-ServerName paramter.
If the database name is not provided here, nor as part of the -ServerName, and the environment is detected as Azure SQL DB, then you'll be prompted to provide the database name.
-CacheTop Used to specify if more/less than the default top 10 queries should be returned for the sp_BlitzCache step. Only works for HTML output (-ToHTM Y). Has no effect on the recent compilations sort order.
-CacheMinutesBack Used to specify how many minutes back to begin plan cache analysis. Defaults to entire contents of the plan cache since instance startup.
In order to avoid missing the desired timeframe, the value is dynamically adjusted based on the runtime of PSBlitz up until the plan cache analysis point.
-OutputDir Used to provide a path where the output directory should be saved to. Defaults to PSBlitz.ps1's directory if not specified or a non-existent path is provided.
-ToHTML Providing Y as a value will tell PSBlitz.ps1 to output the report as HTML instead of an Excel file. This is perfect when running PSBlitz from a machine that doesn't have Office installed.
-ZipOutput Providing Y as a value will tell PSBlitz.ps1 to also create a zip archive of the output files.
-BlitzWhoDelay Used to sepcify the number of seconds between each sp_BlitzWho execution. Defaults to 10 if not specified.
-ConnTimeout Can be used to increased the timeout limit in seconds for connecting to SQL Server. Defaults to 15 seconds if not specified.
-MaxTimeout Can be used to set a higher timeout for sp_BlitzIndex and Stats and Index info retrieval. Defaults to 1000 (16.6 minutes)
-DebugInfo Switch used to get more information for debugging and troubleshooting purposes.

Back to top

Default check VS in-depth check

Output files

The output directory will be created by default in the PSBlitz directory where the PSBlitz.ps1 script lives.
If you want to script to write the output directory to another path, use the -OutputDir parameter followed by the desired path (the path has to be valid otherwise PSBlitz will use the default output path).

Output directory name [HostName]_[Instance]_[TimeStamp] for an instance-wide check, or [HostName]_[Instance]_[TimeStamp]_[Database] for a database-specific check.

Deadlocks will be saved in the Deadlocks directory under the output directory.

Deadlock file naming convention - [EventDate]_[EventTime]_[RecordNumberOfDistinctDeadlockGroupVictim].xdl

Execution plans will be saved in the Plans directory under the output directory.

Execution plans file naming convention:

Back to top

Usage examples

You can run PSBlitz.ps1 by simply right-clicking on the script and then clicking on "Run With PowerShell" which will execute the script in interactive mode, prompting you for the required input.
Note that parameters like -DebugMode, -OutputDir, -CacheTop, and -MaxTimeout are only available in command line mode.

Otherwise you can navigate in PowerShell to the directory where the script is and execute it by providing parameters and appropriate values.

Back to top

Report a Bug

If you've ran into an error while running PSBlitz, please read this before opening an issue.

Screenshots

GIF Screenshot1 Screenshot2 Screenshot4

Back to top