From 877798a4840758a6ca184410996159eaddfee238 Mon Sep 17 00:00:00 2001 From: Vlad Drumea <48413726+VladDBA@users.noreply.github.com> Date: Mon, 25 Sep 2023 00:51:47 +0300 Subject: [PATCH 1/8] Add files via upload --- Resources/GetStatsInfoForWholeDB.sql | 48 ++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/Resources/GetStatsInfoForWholeDB.sql b/Resources/GetStatsInfoForWholeDB.sql index b388675..57b8e58 100644 --- a/Resources/GetStatsInfoForWholeDB.sql +++ b/Resources/GetStatsInfoForWholeDB.sql @@ -1,3 +1,6 @@ +/* + Part of PSBlitz - https://github.com/VladDBA/PSBlitz +*/ USE [..PSBlitzReplace..]; SET NOCOUNT ON; SET STATISTICS XML OFF; @@ -12,8 +15,10 @@ N'SELECT DB_NAME() AS [database],' + @LineFeed + N'+ [obj].[name] AS [object_name],' + @LineFeed + N'[obj].[type_desc] AS [object_type],' + @LineFeed + N'[stat].[name] AS [stats_name],' -+ @LineFeed + N'CASE WHEN [stat].[auto_created] = 1 THEN ''Auto-Created''' -+ @LineFeed + N'WHEN [stat].[auto_created] = 1 THEN ''User-Created''' ++ @LineFeed + N'CASE WHEN [stat].[auto_created] = 1 ' ++ N'AND [stat].[user_created] = 0 THEN ''Auto-Created''' ++ @LineFeed + N'WHEN [stat].[user_created] = 1 ' ++ N'AND [stat].[auto_created] = 0 THEN ''User-Created''' + @LineFeed + N' ELSE ''Index'' END AS [origin],' + @LineFeed + N'[stat].[filter_definition],' + @LineFeed + N'[sp].[last_updated],' @@ -29,8 +34,19 @@ N'SELECT DB_NAME() AS [database],' + @LineFeed + N'ELSE (CAST(CAST([sp].[modification_counter] AS FLOAT)' + @LineFeed + N'/ CAST([sp].[rows] AS FLOAT)' + @LineFeed + N'* 100.00 AS DECIMAL(38,2))) END AS [modified_percent],' ++ @LineFeed + N'CASE WHEN [stat].[is_incremental] = 1 THEN ''Yes''' ++ @LineFeed + N'ELSE ''No'' END AS [incremental],' ++ @LineFeed + N'CASE WHEN [stat].[is_temporary] = 1 THEN ''Yes''' ++ @LineFeed + N'ELSE ''No'' END AS [temporary],' ++ @LineFeed + N'CASE WHEN [stat].[no_recompute] = 1 THEN ''Yes''' ++ @LineFeed + N'ELSE ''No'' END AS [no_recompute],' ++ @LineFeed + N'CASE WHEN [stat].[has_persisted_sample] = 1 THEN ''Yes''' ++ @LineFeed + N'ELSE ''No'' END AS [persisted_sample],' ++ @LineFeed + N'[sp].[persisted_sample_percent],' + @LineFeed + N'ISNULL([sp].[steps],0) AS [steps],' + @LineFeed + N'''No'' AS [partitioned], 1 AS [partition_number]' ++ @LineFeed + N',''DBCC SHOW_STATISTICS ("''+SCHEMA_NAME([obj].[schema_id])+N''.''' ++'+[obj].[name]+N''", ''+[stat].[name]+N'');'' AS [get_details]' + @LineFeed + N'FROM [sys].[stats] AS [stat]' + @LineFeed + N'CROSS APPLY [sys].[dm_db_stats_properties]([stat].[object_id],' + @LineFeed + N'[stat].[stats_id]) AS [sp]' @@ -49,9 +65,11 @@ N'SELECT DB_NAME() AS [database],' + @LineFeed + N'+ [obj].[name] AS [object_name],' + @LineFeed + N'[obj].[type_desc] AS [object_type],' + @LineFeed + N'[stat].[name] AS [stats_name],' -+ @LineFeed + N'CASE WHEN [stat].[auto_created] = 1 THEN ''Auto-Created''' -+ @LineFeed + N'WHEN [stat].[auto_created] = 1 THEN ''User-Created''' -+ @LineFeed + N'ELSE ''Index'' END AS [origin],' ++ @LineFeed + N'CASE WHEN [stat].[auto_created] = 1 ' ++ N'AND [stat].[user_created] = 0 THEN ''Auto-Created''' ++ @LineFeed + N'WHEN [stat].[user_created] = 1 ' ++ N'AND [stat].[auto_created] = 0 THEN ''User-Created''' ++ @LineFeed + N' ELSE ''Index'' END AS [origin],' + @LineFeed + N'[stat].[filter_definition],' + @LineFeed + N'[sip].[last_updated],' + @LineFeed + N'ISNULL([sip].[rows],0) AS [rows],' @@ -68,9 +86,20 @@ N'SELECT DB_NAME() AS [database],' + @LineFeed + N'/ CAST([sip].[rows] AS FLOAT)' + @LineFeed + N'* 100.00 AS DECIMAL(5,2)))' + @LineFeed + N'END AS [modified_percent],' ++ @LineFeed + N'CASE WHEN [stat].[is_incremental] = 1 THEN ''Yes'' ' ++ @LineFeed + N'ELSE ''No'' END AS [incremental],' ++ @LineFeed + N'CASE WHEN [stat].[is_temporary] = 1 THEN ''Yes'' ' ++ @LineFeed + N'ELSE ''No'' END AS [temporary],' ++ @LineFeed + N'CASE WHEN [stat].[no_recompute] = 1 THEN ''Yes''' ++ @LineFeed + N'ELSE ''No'' END AS [no_recompute],' ++ @LineFeed + N'CASE WHEN [stat].[has_persisted_sample] = 1 THEN ''Yes''' ++ @LineFeed + N'ELSE ''No'' END AS [persisted_sample],' ++ @LineFeed + N'0 AS [persisted_sample_percent],' + @LineFeed + N'ISNULL([sip].[steps],0) AS [steps],' + @LineFeed + N'''Yes'' AS [partitioned],' + @LineFeed + N'[sip].[partition_number]' ++ @LineFeed + N',''DBCC SHOW_STATISTICS ("''+SCHEMA_NAME([obj].[schema_id])+N''.''' ++'+[obj].[name]+N''", ''+[stat].[name]+N'');'' AS [get_details]' + @LineFeed + N'FROM [sys].[stats] AS [stat]' + @LineFeed + N'CROSS APPLY [sys].[dm_db_incremental_stats_properties]([stat].[object_id],' + @LineFeed + N'[stat].[stats_id]) AS [sip]' @@ -80,9 +109,10 @@ N'SELECT DB_NAME() AS [database],' + @LineFeed + N'[obj].[type] IN ( ''U'', ''V'' )' /*limit objects to tables and potentially indexed views*/ + @LineFeed + N'AND [stat].[is_incremental] = 1' /*limit to incremental stats only */ + @LineFeed + N'AND [sip].[rows] >= 10000' /*only get tables with 10k rows or more*/ -+ @LineFeed + N'ORDER BY [modified_percent] DESC;' -ELSE ';' -END ++ @LineFeed + N'ORDER BY [modified_percent] DESC OPTION(RECOMPILE);' + ELSE + + @LineFeed + N'ORDER BY [modified_percent] DESC OPTION(RECOMPILE);' +END; BEGIN EXEC(@SQL); -END \ No newline at end of file +END; \ No newline at end of file From 73ad29a406cba034dfddbd82f3c148c5fad0c2b4 Mon Sep 17 00:00:00 2001 From: Vlad Drumea <48413726+VladDBA@users.noreply.github.com> Date: Mon, 25 Sep 2023 01:13:48 +0300 Subject: [PATCH 2/8] Add files via upload --- Resources/GetStatsInfoForWholeDB.sql | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Resources/GetStatsInfoForWholeDB.sql b/Resources/GetStatsInfoForWholeDB.sql index 57b8e58..c7bca45 100644 --- a/Resources/GetStatsInfoForWholeDB.sql +++ b/Resources/GetStatsInfoForWholeDB.sql @@ -1,5 +1,6 @@ /* - Part of PSBlitz - https://github.com/VladDBA/PSBlitz + Part of PSBlitz - https://github.com/VladDBA/PSBlitz + License - https://github.com/VladDBA/PSBlitz/blob/main/LICENSE */ USE [..PSBlitzReplace..]; SET NOCOUNT ON; @@ -7,8 +8,11 @@ SET STATISTICS XML OFF; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; DECLARE @SQL NVARCHAR(MAX); DECLARE @LineFeed NVARCHAR(5); +DECLARE @MinRecords INT; SET @LineFeed = CHAR(13) + CHAR(10); +SET @MinRecords = 10000; + SELECT @SQL = N'SELECT DB_NAME() AS [database],' + @LineFeed + N'SCHEMA_NAME([obj].[schema_id]) + ''.''' @@ -57,7 +61,7 @@ N'SELECT DB_NAME() AS [database],' + @LineFeed + CASE WHEN CAST(SERVERPROPERTY('ProductMajorVersion') AS TINYINT) > 11 THEN N'AND [stat].[is_incremental] = 0' ELSE N'' END /*limit to non-incremental stats only */ -+ @LineFeed + N'AND [sp].[rows] >= 10000' /*only get tables with 10k rows or more*/ ++ @LineFeed + N'AND [sp].[rows] >= ' + CAST(@MinRecords AS NVARCHAR(10)) + CASE WHEN CAST(SERVERPROPERTY('ProductMajorVersion') AS TINYINT) > 11 THEN + @LineFeed + N'UNION' + @LineFeed + N'SELECT DB_NAME() AS [database],' @@ -108,7 +112,7 @@ N'SELECT DB_NAME() AS [database],' + @LineFeed + N'WHERE' + @LineFeed + N'[obj].[type] IN ( ''U'', ''V'' )' /*limit objects to tables and potentially indexed views*/ + @LineFeed + N'AND [stat].[is_incremental] = 1' /*limit to incremental stats only */ -+ @LineFeed + N'AND [sip].[rows] >= 10000' /*only get tables with 10k rows or more*/ ++ @LineFeed + N'AND [sip].[rows] >= ' + CAST(@MinRecords AS NVARCHAR(10)) + @LineFeed + N'ORDER BY [modified_percent] DESC OPTION(RECOMPILE);' ELSE + @LineFeed + N'ORDER BY [modified_percent] DESC OPTION(RECOMPILE);' From 9128af135901555e7e831bf3a2abef2fedcb2cb8 Mon Sep 17 00:00:00 2001 From: Vlad Drumea <48413726+VladDBA@users.noreply.github.com> Date: Mon, 25 Sep 2023 01:14:43 +0300 Subject: [PATCH 3/8] Add files via upload --- Resources/GetStatsInfoForWholeDB.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/GetStatsInfoForWholeDB.sql b/Resources/GetStatsInfoForWholeDB.sql index c7bca45..218dfde 100644 --- a/Resources/GetStatsInfoForWholeDB.sql +++ b/Resources/GetStatsInfoForWholeDB.sql @@ -57,10 +57,10 @@ N'SELECT DB_NAME() AS [database],' + @LineFeed + N'INNER JOIN [sys].[objects] AS [obj]' + @LineFeed + N'ON [stat].[object_id] = [obj].[object_id]' + @LineFeed + N'WHERE' -+ @LineFeed + N'[obj].[type] IN ( ''U'', ''V'' )' /*limit objects to tables and potentially indexed views*/ ++ @LineFeed + N'[obj].[type] IN ( ''U'', ''V'' )' /*limit objects to tables and potentially indexed views*/ + @LineFeed + CASE WHEN CAST(SERVERPROPERTY('ProductMajorVersion') AS TINYINT) > 11 THEN N'AND [stat].[is_incremental] = 0' - ELSE N'' END /*limit to non-incremental stats only */ + ELSE N'' END /*limit to non-incremental stats only */ + @LineFeed + N'AND [sp].[rows] >= ' + CAST(@MinRecords AS NVARCHAR(10)) + CASE WHEN CAST(SERVERPROPERTY('ProductMajorVersion') AS TINYINT) > 11 THEN + @LineFeed + N'UNION' @@ -110,7 +110,7 @@ N'SELECT DB_NAME() AS [database],' + @LineFeed + N'INNER JOIN [sys].[objects] AS [obj]' + @LineFeed + N'ON [stat].[object_id] = [obj].[object_id]' + @LineFeed + N'WHERE' -+ @LineFeed + N'[obj].[type] IN ( ''U'', ''V'' )' /*limit objects to tables and potentially indexed views*/ ++ @LineFeed + N'[obj].[type] IN ( ''U'', ''V'' )' /*limit objects to tables and potentially indexed views*/ + @LineFeed + N'AND [stat].[is_incremental] = 1' /*limit to incremental stats only */ + @LineFeed + N'AND [sip].[rows] >= ' + CAST(@MinRecords AS NVARCHAR(10)) + @LineFeed + N'ORDER BY [modified_percent] DESC OPTION(RECOMPILE);' From 37f32adcd308b08eb2bc376bb9c16033c33a47c8 Mon Sep 17 00:00:00 2001 From: Vlad Drumea <48413726+VladDBA@users.noreply.github.com> Date: Mon, 25 Sep 2023 01:24:35 +0300 Subject: [PATCH 4/8] Add files via upload --- LICENSE | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index e55595a..4f50286 100644 --- a/LICENSE +++ b/LICENSE @@ -3,9 +3,11 @@ MIT License Copyright for sp_Blitz, sp_BlitzCache, sp_BlitzFirst, sp_BlitzIndex, sp_BlitzLock, and sp_BlitzWho is held by Brent Ozar Unlimited under MIT licence: [SQL Server First Responder Kit](https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit) -Copyright for PSBlitz.ps1 is held by Vlad Drumea, 2022 as described below. +Copyright for PSBlitz.ps1, GetStatsInfoForWholeDB.sql, GetOpenTransactions.sql, +GetIndexInfoForWholeDB.sql, GetInstanceInfo.sql, and GetTempDBUsageInfo.sql +is held by Vlad Drumea, 2023 as described below. -Copyright (c) 2023 Vlad Drumea +Copyright (c) 2023 Vlad Drumea - https://vladdba.com/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 36b4375d25a31d817bab432d743806582d1803c9 Mon Sep 17 00:00:00 2001 From: Vlad Drumea <48413726+VladDBA@users.noreply.github.com> Date: Mon, 25 Sep 2023 23:22:20 +0300 Subject: [PATCH 5/8] Add files via upload --- Resources/GetInstanceInfo.sql | 84 +++++++++++++++++++++++++++++------ 1 file changed, 70 insertions(+), 14 deletions(-) diff --git a/Resources/GetInstanceInfo.sql b/Resources/GetInstanceInfo.sql index 3fc5108..397c7ea 100644 --- a/Resources/GetInstanceInfo.sql +++ b/Resources/GetInstanceInfo.sql @@ -1,11 +1,16 @@ +/* + Part of PSBlitz - https://github.com/VladDBA/PSBlitz + License - https://github.com/VladDBA/PSBlitz/blob/main/LICENSE +*/ SET NOCOUNT ON; +SET STATISTICS XML OFF; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; /*Get instance info*/ SELECT SERVERPROPERTY('MachineName') AS [machine_name], ISNULL(CAST(SERVERPROPERTY('InstanceName') AS NVARCHAR(100)), '(default instance)') AS [instance_name], SERVERPROPERTY('ProductVersion') AS [product_version], SERVERPROPERTY('ProductLevel') AS [product_level], - SERVERPROPERTY('ProductUpdateLevel') AS [patch_level], + SERVERPROPERTY('ProductUpdateLevel') AS [patch_level], SERVERPROPERTY('Edition') AS [edition], CASE WHEN SERVERPROPERTY('IsClustered') = 1 THEN 'Yes' @@ -17,9 +22,31 @@ SELECT SERVERPROPERTY('MachineName') WHEN SERVERPROPERTY('IsHadrEnabled') = 0 THEN 'No' ELSE 'N/A' END AS [always_on_enabled], + CASE + WHEN SERVERPROPERTY('FilestreamConfiguredLevel') = 0 THEN '0 - Disabled' + WHEN SERVERPROPERTY('FilestreamConfiguredLevel') = 1 THEN '1 - T-SQL' + WHEN SERVERPROPERTY('FilestreamConfiguredLevel') = 2 THEN '2 - T-SQL & local streaming' + WHEN SERVERPROPERTY('FilestreamConfiguredLevel') = 3 THEN '3 - T-SQL & remote streaming' + ELSE 'N/A' + END AS [filestream_access_level], + CASE + WHEN SERVERPROPERTY('IsTempdbMetadataMemoryOptimized') = 1 THEN 'Yes' + WHEN SERVERPROPERTY('IsTempdbMetadataMemoryOptimized') = 0 THEN 'No' + ELSE 'N/A' + END AS [mem_optimized_tempdb_metadata], + CASE + WHEN SERVERPROPERTY('IsFullTextInstalled') = 1 THEN 'Yes' + WHEN SERVERPROPERTY('IsFullTextInstalled') = 0 THEN 'No' + ELSE 'N/A' + END AS [fulltext_installed], + SERVERPROPERTY('Collation') AS [instance_collation], [sqlserver_start_time] AS [instance_last_startup], - CAST(DATEDIFF(HH, [sqlserver_start_time], GETDATE()) / 24.00 AS NUMERIC(23, 2)) AS [uptime_days] -FROM [sys].[dm_os_sys_info]; + SERVERPROPERTY('ProcessID') AS [process_id], + CAST(DATEDIFF(HH, [sqlserver_start_time], GETDATE()) / 24.00 AS NUMERIC(23, 2)) AS [uptime_days], + (SELECT COUNT(*) + FROM [sys].[dm_exec_connections]) AS [client_connections] +FROM [sys].[dm_os_sys_info] +OPTION(RECOMPILE); /*Get resource info*/ @@ -37,21 +64,50 @@ SELECT @SQL = N'SELECT [cpu_count] AS [logical_cpu_cores],' THEN N'''-- N/A --''' ELSE N'( [socket_count] * [cores_per_socket] )' END +N' AS [physical_cpu_cores],' -+ @LineFeed + N'CAST(ROUND(( [physical_memory_kb] / 1024.0 / 1024 ), 1) AS INT) AS [physical_memory_GB],' -+ @LineFeed + N'(SELECT CAST(CAST([value_in_use] AS INT) / 1024.0 AS DECIMAL(15, 2))' -+ @LineFeed + N'FROM [sys].[configurations]' -+ @LineFeed + N'WHERE [name] = N''max server memory (MB)'') AS [max_server_memory_GB],' -+ @LineFeed + N'(SELECT TOP(1) CAST([cntr_value] / 1024.0 / 1024 AS DECIMAL(15, 2))' -+ @LineFeed + N'FROM [sys].[dm_os_performance_counters]' ++ @LineFeed + N'CAST(ROUND(( [physical_memory_kb] / 1024.00 / 1024.00 ), 1) AS DECIMAL(15, 2)) AS [physical_memory_GB],' ++ @LineFeed + N'(SELECT CAST(CAST([value_in_use] AS INT) / 1024.00 AS DECIMAL(15, 2))' ++ @LineFeed + N'FROM [sys].[configurations]' ++ @LineFeed + N'WHERE [name] = N''max server memory (MB)'') AS [max_server_memory_GB],' ++ @LineFeed + N'(SELECT TOP(1) CAST([cntr_value] / 1024.00 / 1024.00 AS DECIMAL(15, 2))' ++ @LineFeed + N'FROM [sys].[dm_os_performance_counters]' + @LineFeed + N'WHERE [object_name] LIKE N''%Memory Manager%''' + @LineFeed + N'AND [counter_name] LIKE N''Target Server Memory (KB)%''' + @LineFeed + N'ORDER BY [cntr_value] DESC) AS [target_server_memory_GB],' -+ @LineFeed + N'(SELECT TOP(1) CAST([cntr_value] / 1024.0 / 1024 AS DECIMAL(15, 2))' -+ @LineFeed + N'FROM [sys].[dm_os_performance_counters]' ++ @LineFeed + N'(SELECT TOP(1) CAST([cntr_value] / 1024.00 / 1024.00 AS DECIMAL(15, 2))' ++ @LineFeed + N'FROM [sys].[dm_os_performance_counters]' + @LineFeed + N'WHERE [object_name] LIKE N''%Memory Manager%''' -+ @LineFeed + N'AND [counter_name] LIKE N''Total Server Memory (KB)%'') AS [total_memory_used_GB]' -+ @LineFeed + N'FROM [sys].[dm_os_sys_info];' ++ @LineFeed + N'AND [counter_name] LIKE N''Total Server Memory (KB)%'') AS [total_memory_used_GB],' ++ @LineFeed + N'(SELECT CASE WHEN [process_physical_memory_low] = 1 THEN ''Yes''' ++ @LineFeed + N'ELSE ''No'' END FROM sys.dm_os_process_memory) AS [proc_physical_memory_low],' ++ @LineFeed + N'(SELECT CASE WHEN [process_virtual_memory_low] = 1 THEN ''Yes''' ++ @LineFeed + N'ELSE ''No'' END FROM sys.dm_os_process_memory) AS [proc_virtual_memory_low]' ++ @LineFeed + N'FROM [sys].[dm_os_sys_info] OPTION(RECOMPILE);' BEGIN -EXEC(@SQL); + EXEC(@SQL); END; + +/*Get connection info*/ +SELECT TOP 10 [d].[name] AS [DatabaseName], + COUNT([s].[status]) AS [ConnectionsCount], + RTRIM(LTRIM([s].[login_name])) AS [LoginName], + ISNULL([s].[host_name], N'N/A') AS [ClientHostName], + REPLACE(REPLACE([c].[client_net_address], N'<', N''), N'>', N'') AS [ClientIP], + [c].[net_transport] AS [ProtocolUsed], + MAX([c].[connect_time]) AS [OldestConnectionTime], + [s].[program_name] AS [Program] +FROM sys.dm_exec_sessions AS [s] + LEFT JOIN sys.databases AS [d] + ON [d].[database_id] = [s].[database_id] + INNER JOIN sys.dm_exec_connections AS [c] + ON [s].[session_id] = [c].[session_id] +GROUP BY [d].[database_id], + [d].[name], + [s].[login_name], + [s].[security_id], + [s].[host_name], + [c].[client_net_address], + [c].[net_transport], + [s].[program_name] +ORDER BY [ConnectionsCount] DESC +OPTION(RECOMPILE); From 3e01793ed1f402e6745ba091c096d0e6e3d5bdad Mon Sep 17 00:00:00 2001 From: Vlad Drumea <48413726+VladDBA@users.noreply.github.com> Date: Tue, 26 Sep 2023 00:12:48 +0300 Subject: [PATCH 6/8] Add files via upload --- Resources/GetInstanceInfo.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/GetInstanceInfo.sql b/Resources/GetInstanceInfo.sql index 397c7ea..cc28797 100644 --- a/Resources/GetInstanceInfo.sql +++ b/Resources/GetInstanceInfo.sql @@ -88,7 +88,7 @@ BEGIN END; /*Get connection info*/ -SELECT TOP 10 [d].[name] AS [DatabaseName], +SELECT TOP 10 [d].[name] AS [Database], COUNT([s].[status]) AS [ConnectionsCount], RTRIM(LTRIM([s].[login_name])) AS [LoginName], ISNULL([s].[host_name], N'N/A') AS [ClientHostName], From 1eaba0ac1c5ef52b28520af471c4f7bb0c96f434 Mon Sep 17 00:00:00 2001 From: Vlad Drumea <48413726+VladDBA@users.noreply.github.com> Date: Wed, 27 Sep 2023 00:32:37 +0300 Subject: [PATCH 7/8] Add files via upload --- Resources/GetInstanceInfo.sql | 2 +- Resources/PSBlitzOutput.xlsx | Bin 674086 -> 676490 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/GetInstanceInfo.sql b/Resources/GetInstanceInfo.sql index cc28797..5c0b8d0 100644 --- a/Resources/GetInstanceInfo.sql +++ b/Resources/GetInstanceInfo.sql @@ -110,4 +110,4 @@ GROUP BY [d].[database_id], [c].[net_transport], [s].[program_name] ORDER BY [ConnectionsCount] DESC -OPTION(RECOMPILE); +OPTION(RECOMPILE); \ No newline at end of file diff --git a/Resources/PSBlitzOutput.xlsx b/Resources/PSBlitzOutput.xlsx index e01751b898435f313dd42ffadb9b3a1c525c189a..565344abb110f78a72fd85c0ef0fd16720b8ef1a 100644 GIT binary patch delta 33241 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 delta 31236 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

s8c4%p>2Ekzb2mL;E__oEZb9!qZC7 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℘UIhV%nN1;JlYgxMXyW)tc;AwM-k?+DFKSJ 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 From bdd1da5034d0f213bcf6fec51afa73567fe060a7 Mon Sep 17 00:00:00 2001 From: Vlad Drumea <48413726+VladDBA@users.noreply.github.com> Date: Wed, 27 Sep 2023 00:33:05 +0300 Subject: [PATCH 8/8] Add files via upload --- PSBlitz.ps1 | 99 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 88 insertions(+), 11 deletions(-) diff --git a/PSBlitz.ps1 b/PSBlitz.ps1 index 862791d..c5982f3 100644 --- a/PSBlitz.ps1 +++ b/PSBlitz.ps1 @@ -72,8 +72,9 @@ Copyright for sp_Blitz, sp_BlitzCache, sp_BlitzFirst, sp_BlitzIndex, sp_BlitzLock, and sp_BlitzWho is held by Brent Ozar Unlimited under MIT licence: SQL Server First Responder Kit - https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit - Copyright for PSBlitz.ps1 is held by Vlad Drumea, 2023 as described below. - Copyright (c) 2023 Vlad Drumea + Copyright for PSBlitz.ps1, GetStatsInfoForWholeDB.sql, GetOpenTransactions.sql, + GetIndexInfoForWholeDB.sql, GetInstanceInfo.sql, and GetTempDBUsageInfo.sql + is held by Vlad Drumea, 2023 as described below. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -222,8 +223,8 @@ param( ###Internal params #Version -$Vers = "3.3.0" -$VersDate = "20230831" +$Vers = "3.3.1" +$VersDate = "20230927" #Get script path $ScriptPath = split-path -parent $MyInvocation.MyCommand.Definition #Set resources path @@ -1104,6 +1105,8 @@ try { $InstanceInfoTbl = $InstanceInfoSet.Tables[0] $ResourceInfoTbl = New-Object System.Data.DataTable $ResourceInfoTbl = $InstanceInfoSet.Tables[1] + $ConnectionsInfoTbl = New-Object System.Data.DataTable + $ConnectionsInfoTbl = $InstanceInfoSet.Tables[2] if ($ToHTML -eq "Y") { if ($DebugInfo) { @@ -1119,9 +1122,15 @@ try { @{Name = "Patch Level"; Expression = { $_."patch_level" } }, @{Name = "Edition"; Expression = { $_."edition" } }, @{Name = "Is Clustered?"; Expression = { $_."is_clustered" } }, - @{Name = "Is AlwaysOnAG?"; Expression = { $_."always_on_enabled" } }, + @{Name = "Is AlwaysOnAG?"; Expression = { $_."always_on_enabled" } }, + @{Name = "FILESTREAM Access Level"; Expression = { $_."filestream_access_level" } }, + @{Name = "Tempdb Metadata Memory Optimized"; Expression = { $_."mem_optimized_tempdb_metadata" } }, + @{Name = "Fulltext Instaled"; Expression = { $_."fulltext_installed" } }, + @{Name = "Instance Collation"; Expression = { $_."instance_collation" } }, + @{Name = "Process ID"; Expression = { $_."process_id" } }, @{Name = "Last Startup"; Expression = { $_."instance_last_startup" } }, @{Name = "Uptime (days)"; Expression = { $_."uptime_days" } }, + @{Name = "Client Connections"; Expression = { $_."client_connections" } }, "Estimated Response Latency (Sec)" | ConvertTo-Html -As Table -Fragment if ($DebugInfo) { @@ -1132,7 +1141,22 @@ try { @{Name = "Physical memory GB"; Expression = { $_."physical_memory_GB" } }, @{Name = "Max Server Memory GB"; Expression = { $_."max_server_memory_GB" } }, @{Name = "Target Server Memory GB"; Expression = { $_."target_server_memory_GB" } }, - @{Name = "Total Memory Used GB"; Expression = { $_."total_memory_used_GB" } } | ConvertTo-Html -As Table -Fragment + @{Name = "Total Memory Used GB"; Expression = { $_."total_memory_used_GB" } }, + @{Name = "Process physical memory low"; Expression = { $_."proc_physical_memory_low" } }, + @{Name = "Process virtual memory low"; Expression = { $_."proc_virtual_memory_low" } } | ConvertTo-Html -As Table -Fragment + + if ($DebugInfo) { + Write-Host " ->Converting connections info to HTML" -fore yellow + } + $htmlTable3 = $ConnectionsInfoTbl | Select-Object "Database", + @{Name = "Connections Count"; Expression = { $_."ConnectionsCount" } }, + @{Name = "Login Name"; Expression = { $_."LoginName" } }, + @{Name = "Client Hostname"; Expression = { $_."ClientHostName" } }, + @{Name = "Client IP"; Expression = { $_."ClientIP" } }, + @{Name = "Protocol"; Expression = { $_."ProtocolUsed" } }, + @{Name = "Oldest Connection Time"; Expression = { $_."OldestConnectionTime" } }, + @{Name = "Program"; Expression = { $_."Program" }} | ConvertTo-Html -As Table -Fragment + $HtmlTabName = "Instance Overview" $html = $HTMLPre + @" $HtmlTabName @@ -1144,6 +1168,9 @@ $htmlTable1

Resource information

$htmlTable2 + +

Top 10 clients by connections

+$htmlTable3 "@ @@ -1165,8 +1192,9 @@ $htmlTable2 #List of columns that should be returned from the data set $DataSetCols = @("machine_name", "instance_name", "product_version", "product_level", - "patch_level", "edition", "is_clustered", "always_on_enabled", "instance_last_startup", - "uptime_days", "net_latency") + "patch_level", "edition", "is_clustered", "always_on_enabled","filestream_access_level", + "mem_optimized_tempdb_metadata", "fulltext_installed", "instance_collation", "process_id", + "instance_last_startup", "uptime_days", "client_connections", "net_latency") if ($DebugInfo) { Write-Host " ->Writing instance info to Excel" -fore yellow @@ -1206,7 +1234,7 @@ $htmlTable2 #List of columns that should be returned from the data set $DataSetCols = @("logical_cpu_cores", "physical_cpu_cores", "physical_memory_GB", "max_server_memory_GB", "target_server_memory_GB", - "total_memory_used_GB") + "total_memory_used_GB", "proc_physical_memory_low", "proc_virtual_memory_low") if ($DebugInfo) { Write-Host " ->Writing resource info to Excel" -fore yellow @@ -1231,6 +1259,46 @@ $htmlTable2 $ExcelColNum = 1 } + ##Top 10 clients by connections section + #Specify at which row in the sheet to start adding the data + $ExcelStartRow = 14 + #Specify with which column in the sheet to start + $ExcelColNum = 1 + #Set counter used for row retrieval + $RowNum = 0 + + #List of columns that should be returned from the data set + $DataSetCols = @("Database", "ConnectionsCount", "LoginName", "ClientHostName", "ClientIP", "ProtocolUsed", + "OldestConnectionTime", "Program") + + if ($DebugInfo) { + Write-Host " ->Writing Top 10 clients by connections to Excel" -fore yellow + } + #Loop through each Excel row + foreach ($row in $ConnectionsInfoTbl) { + <# + Loop through each data set column of current row and fill the corresponding + Excel cell + #> + foreach ($col in $DataSetCols) { + #Fill Excel cell with value from the data set + if ("OldestConnectionTime" -contains $col) { + $ExcelSheet.Cells.Item($ExcelStartRow, $ExcelColNum) = $ConnectionsInfoTbl.Rows[$RowNum][$col].ToString("yyyy-MM-dd HH:mm:ss") + } + else { + $ExcelSheet.Cells.Item($ExcelStartRow, $ExcelColNum) = $ConnectionsInfoTbl.Rows[$RowNum][$col] + } + $ExcelColNum += 1 + } + + #move to the next row in the spreadsheet + $ExcelStartRow += 1 + #move to the next row in the data set + $RowNum += 1 + # reset Excel column number so that next row population begins with column 1 + $ExcelColNum = 1 + } + ##Saving file $ExcelFile.Save() } @@ -1238,6 +1306,7 @@ $htmlTable2 Remove-Variable -Name ResourceInfoTbl Remove-Variable -Name InstanceInfoTbl Remove-Variable -Name InstanceInfoSet + Remove-Variable -Name ConnectionsInfoTbl } if ($JobStatus -ne "Running") { @@ -3523,8 +3592,14 @@ $htmlTable @{Name = "Modifications Count"; Expression = { $_."modification_counter" } }, @{Name = "Modified %"; Expression = { $_."modified_percent" } }, @{Name = "Steps"; Expression = { $_."steps" } }, + @{Name = "Incremental"; Expression = { $_."incremental" } }, + @{Name = "Temporary"; Expression = { $_."temporary" } }, + @{Name = "With NORECOMPUTE"; Expression = { $_."no_recompute"} }, + @{Name = "Persisted Sample"; Expression = { $_."persisted_sample"} }, + @{Name = "Persisted Sample %"; Expression = { $_."persisted_sample_percent"} }, @{Name = "Partitioned"; Expression = { $_."partitioned" } }, - @{Name = "Partition No."; Expression = { $_."partition_number" } } | ConvertTo-Html -As Table -Fragment + @{Name = "Partition No."; Expression = { $_."partition_number" } }, + @{Name = "Get Stats Details"; Expression = { $_."get_details" } } | ConvertTo-Html -As Table -Fragment $HtmlTabName = "Statistics info for $CheckDB" $html = $HTMLPre + @" $HtmlTabName @@ -3550,7 +3625,9 @@ $htmlTable $DataSetCols = @("database", "object_name", "object_type", "stats_name", "origin", "filter_definition", "last_updated", "rows", "unfiltered_rows", "rows_sampled", "sample_percent", "modification_counter", - "modified_percent", "steps", "partitioned", "partition_number") + "modified_percent", "incremental", "temporary", "no_recompute", "persisted_sample", + "persisted_sample_percent", "steps", "partitioned", "partition_number", + "get_details") if ($DebugInfo) { Write-Host " ->Writing Stats results to sheet Statistics Info" -fore yellow