Snippet Name: envstatsfull
Tags: helpful,scriptgeneration
Created Date: 2021-10-01 08:05:46
Last Modified Date: 2024-11-13 06:29:19
–desc: create commands to rebuild all statistics
Dependencies: none-standalone code
envstatsfull–envstatsfull: This script performs a series of updates to SQL Server statistics, creating commands to rebuild them. It first selects distinct schema and table names, then calculates rows modified and total rows for each table, and finally generates commands to update these tables with specific parameters, including sampling percentages and the modification counter.
DBA Notes: buidls the commands ot update every statisitc for each table
Sample Output:
--desc: create commands to rebuild all statistics
SELECT QUOTENAME([X].[SCHEMA Name]) + '.'
+ QUOTENAME([X].[TABLE Name])AS QualifiedObjectName,
MAX([X].[RowsModified]) AS [MaxRowsModified],
'--' + [X].[SCHEMA Name] + '.' + [X].[TABLE Name] + '; RowsModified = ' + CONVERT(VARCHAR,MAX([X].[RowsModified])) + ';TotalRows = ' + CONVERT(VARCHAR,MAX([Total ROWS])) + '
RAISERROR(''' + [X].[SCHEMA Name] + '.' + [X].[TABLE Name] + ' Item ' + CONVERT(VARCHAR(30),ROW_NUMBER() OVER(ORDER BY MAX([X].[RowsModified]) DESC)) + '; RowsModified = ' + CONVERT(VARCHAR,MAX([X].[RowsModified])) + ';TotalRows = ' + CONVERT(VARCHAR,MAX([Total ROWS])) + ''',0,1)' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10)
+' UPDATE STATISTICS ' + QUOTENAME([X].[SCHEMA Name]) + '.'
+ QUOTENAME([X].[TABLE Name])
+ ' WITH ALL,FULLSCAN' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10) AS StatsCommand,
'--' + [X].[SCHEMA Name] + '.' + [X].[TABLE Name] + '; RowsModified = ' + CONVERT(VARCHAR,MAX([X].[RowsModified])) + ';TotalRows = ' + CONVERT(VARCHAR,MAX([Total ROWS])) + '
RAISERROR(''' + [X].[SCHEMA Name] + '.' + [X].[TABLE Name] + ' Item ' + CONVERT(VARCHAR(30),ROW_NUMBER() OVER(ORDER BY MAX([X].[RowsModified]) DESC)) + '; RowsModified = ' + CONVERT(VARCHAR,MAX([X].[RowsModified])) + ';TotalRows = ' + CONVERT(VARCHAR,MAX([Total ROWS])) + ''',0,1)' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10)
+' UPDATE STATISTICS ' + QUOTENAME([X].[SCHEMA Name]) + '.'
+ QUOTENAME([X].[TABLE Name])
+ ' WITH ALL,SAMPLE 50 PERCENT' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10) AS Stats50Command
FROM (SELECT DISTINCT
DB_NAME() AS [DATABASE],
s.name AS [SCHEMA Name],
t.name AS [TABLE Name],
--a.name,
--sp.last_updated,
[sp].[modification_counter] AS [RowsModified],
[sp].[rows] AS [Total ROWS],
CASE
WHEN [sp].[modification_counter] > [sp].[rows]
THEN
100
ELSE
CONVERT(DECIMAL(8, 2), ( ( [sp].[modification_counter] * 1.0 ) / [sp].[rows] * 1. ) * 100.0)
END AS [PERCENT Modified]
FROM sys.schemas s
join sys.tables t on s.schema_id = t.schema_id
join sys.stats a on t.object_id = a.object_id
--JOIN sys.indexes i ON t.[object_id] = i.[object_id]
CROSS APPLY sys.dm_db_stats_properties (t.object_id, a.stats_id) sp
WHERE [sp].[modification_counter] > 1000) [X]
WHERE [X].[RowsModified] > 1000
GROUP BY [X].[SCHEMA Name] , [X].[TABLE Name]
ORDER BY [MaxRowsModified] DESC