envstatsfull

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

Leave a Reply