Last active
April 27, 2019 09:37
-
-
Save mbourgon/c732842e8ac4c92ee8d6dca4cef0ca25 to your computer and use it in GitHub Desktop.
List the last 4 times that each statistic in a database was updated
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--Written by mbourgon 2016 as per http://thebakingdba.blogspot.com/2016/08/statistics-get-last-4-stat-update-time.html | |
--CC, noncommerical with attribution. Use it as you want noncommercially, but this notice must remain. | |
--run in the database you need to evaluate. | |
DECLARE @sql NVARCHAR (1000), @MIN INT, @MAX INT, @stats_name NVARCHAR(128), @tablename sysname, @the_schema_name sysname, @db_name sysname | |
if object_id('tempdb..#stats_info') is not null | |
DROP TABLE #stats_info | |
CREATE TABLE #stats_info (updated DATETIME, [Table cardinality] BIGINT, [snapshot ctr] BIGINT, steps INT, density DECIMAL(19,16), [rows above] INT, [rows below] INT, [squared variance error] DECIMAL (19,12), [inserts since last update] MONEY, [deletes since last update] MONEY, [leading column type] VARCHAR(50)) | |
if object_id('tempdb..#stats_info2') is not null | |
DROP TABLE #stats_info2 | |
CREATE TABLE #stats_info2 (the_schema_name sysname, table_name sysname, stat_name VARCHAR(128), updated DATETIME, [Table cardinality] BIGINT, [snapshot ctr] BIGINT, steps INT, density DECIMAL(19,16), [rows above] INT, [rows below] INT, [squared variance error] DECIMAL (19,16), [inserts since last update] MONEY, [deletes since last update] MONEY, [leading column type] VARCHAR(50)) | |
declare @listofstats TABLE (id int identity, the_schema_name sysname, table_name sysname, stats_name sysname) | |
INSERT INTO @listofstats | |
SELECT OBJECT_SCHEMA_NAME(object_id) AS the_schema_name, | |
OBJECT_NAME(object_id) AS table_name, | |
name AS stats_name | |
FROM sys.stats | |
WHERE auto_created = 1 --1 is automatically created (aka _WA_Sys_00000003_53D770D6), 0 is index-based. | |
AND OBJECT_ID >100 --this should exclude any system processes | |
SELECT @MIN = MIN(ID), @max = MAX(id) FROM @LISTOFSTATS | |
DBCC TRACEON (2388) --needed to get the last 4 rebuild dates, not just the most current, as per Nayan Raval. | |
WHILE @min <= @max | |
begin | |
TRUNCATE TABLE #stats_info | |
SELECT @sql = NULL, @stats_name = NULL, @the_schema_name = NULL, @tablename = NULL | |
SELECT @the_schema_name = QUOTENAME(the_schema_name), | |
@tablename = QUOTENAME(table_name), | |
@stats_name = stats_name, | |
@db_name = DB_NAME(DB_ID()) | |
FROM @listofstats WHERE id = @min | |
SELECT @sql = N'DBCC SHOW_STATISTICS ("' + @db_name + '.' + @the_schema_name+ '.' + @tablename+ '",'''+ @stats_name +''')' | |
--if not including the dbname, you need | |
PRINT @sql | |
INSERT INTO #stats_info | |
EXEC master..sp_executesql @sql | |
INSERT INTO #stats_info2 SELECT @the_schema_name, @tablename, @stats_name, * FROM #stats_info | |
SET @min = @min + 1 | |
end | |
DBCC TRACEOFF (2388) | |
SELECT * FROM #stats_info2 ORDER BY the_schema_name, table_name, stat_name |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment