@@ -18,6 +18,7 @@ ALTER PROCEDURE [dbo].[sp_BlitzFirst]
1818 @OutputTableNamePerfmonStats NVARCHAR (256 ) = NULL ,
1919 @OutputTableNameWaitStats NVARCHAR (256 ) = NULL ,
2020 @OutputTableNameBlitzCache NVARCHAR (256 ) = NULL ,
21+ @OutputTableRetentionDays TINYINT = 7 ,
2122 @OutputXMLasNVARCHAR TINYINT = 0 ,
2223 @FilterPlansByDatabase VARCHAR (MAX ) = NULL ,
2324 @CheckProcedureCache TINYINT = 0 ,
@@ -2502,7 +2503,23 @@ BEGIN
25022503 @CheckDateOverride = @StartSampleTime,
25032504 @MinutesBack = @BlitzCacheMinutesBack,
25042505 @Debug = @Debug;
2506+
2507+ /* Delete history older than @OutputTableRetentionDays */
2508+ SET @StringToExecute = N ' IF EXISTS(SELECT * FROM '
2509+ + @OutputDatabaseName
2510+ + ' .INFORMATION_SCHEMA.SCHEMATA WHERE QUOTENAME(SCHEMA_NAME) = '' '
2511+ + @OutputSchemaName + ' '' ) DELETE '
2512+ + @OutputDatabaseName + ' .'
2513+ + @OutputSchemaName + ' .'
2514+ + @OutputTableNameBlitzCache
2515+ + ' WHERE ServerName = '' '
2516+ + CAST (SERVERPROPERTY (' ServerName' ) AS NVARCHAR (128 ))
2517+ + ' '' AND CheckDate < '' ' + CAST (CAST ( (DATEADD (DAY , - 1 * @OutputTableRetentionDays, GETDATE () ) ) AS DATE ) AS NVARCHAR (20 )) + ' '' ;' ;
2518+ EXEC (@StringToExecute);
2519+
2520+
25052521 END
2522+
25062523 ELSE /* No sp_BlitzCache found, or it's outdated */
25072524 BEGIN
25082525 INSERT INTO #BlitzFirstResults
@@ -2583,6 +2600,21 @@ BEGIN
25832600 + CAST (SERVERPROPERTY (' ServerName' ) AS NVARCHAR (128 ))
25842601 + ' '' , '' ' + (CONVERT (NVARCHAR (100 ), @StartSampleTime, 121 )) + ' '' , CheckID, Priority, FindingsGroup, Finding, URL, Details, HowToStopIt, QueryPlan, QueryText, StartTime, LoginName, NTUserName, OriginalLoginName, ProgramName, HostName, DatabaseID, DatabaseName, OpenTransactionCount, DetailsInt FROM #BlitzFirstResults ORDER BY Priority , FindingsGroup , Finding , Details' ;
25852602 EXEC (@StringToExecute);
2603+
2604+ /* Delete history older than @OutputTableRetentionDays */
2605+ SET @StringToExecute = N ' IF EXISTS(SELECT * FROM '
2606+ + @OutputDatabaseName
2607+ + ' .INFORMATION_SCHEMA.SCHEMATA WHERE QUOTENAME(SCHEMA_NAME) = '' '
2608+ + @OutputSchemaName + ' '' ) DELETE '
2609+ + @OutputDatabaseName + ' .'
2610+ + @OutputSchemaName + ' .'
2611+ + @OutputTableName
2612+ + ' WHERE ServerName = '' '
2613+ + CAST (SERVERPROPERTY (' ServerName' ) AS NVARCHAR (128 ))
2614+ + ' '' AND CheckDate < '' ' + CAST (CAST ( (DATEADD (DAY , - 1 * @OutputTableRetentionDays, GETDATE () ) ) AS DATE ) AS NVARCHAR (20 )) + ' '' ;' ;
2615+ EXEC (@StringToExecute);
2616+
2617+
25862618 END
25872619 ELSE IF (SUBSTRING (@OutputTableName, 2 , 2 ) = ' ##' )
25882620 BEGIN
@@ -2707,6 +2739,20 @@ BEGIN
27072739 + ' '' , '' ' + CONVERT (NVARCHAR (100 ), @StartSampleTime, 121 ) + ' '' , '
27082740 + ' DatabaseID, FileID, DatabaseName, FileLogicalName, TypeDesc, SizeOnDiskMB, io_stall_read_ms, num_of_reads, bytes_read, io_stall_write_ms, num_of_writes, bytes_written, PhysicalName FROM #FileStats WHERE Pass = 2' ;
27092741 EXEC (@StringToExecute);
2742+
2743+ /* Delete history older than @OutputTableRetentionDays */
2744+ SET @StringToExecute = N ' IF EXISTS(SELECT * FROM '
2745+ + @OutputDatabaseName
2746+ + ' .INFORMATION_SCHEMA.SCHEMATA WHERE QUOTENAME(SCHEMA_NAME) = '' '
2747+ + @OutputSchemaName + ' '' ) DELETE '
2748+ + @OutputDatabaseName + ' .'
2749+ + @OutputSchemaName + ' .'
2750+ + @OutputTableNameFileStats
2751+ + ' WHERE ServerName = '' '
2752+ + CAST (SERVERPROPERTY (' ServerName' ) AS NVARCHAR (128 ))
2753+ + ' '' AND CheckDate < '' ' + CAST (CAST ( (DATEADD (DAY , - 1 * @OutputTableRetentionDays, GETDATE () ) ) AS DATE ) AS NVARCHAR (20 )) + ' '' ;' ;
2754+ EXEC (@StringToExecute);
2755+
27102756 END
27112757 ELSE IF (SUBSTRING (@OutputTableNameFileStats, 2 , 2 ) = ' ##' )
27122758 BEGIN
@@ -2817,6 +2863,21 @@ BEGIN
28172863 + ' object_name, counter_name, instance_name, cntr_value, cntr_type, value_delta, value_per_second FROM #PerfmonStats WHERE Pass = 2' ;
28182864 EXEC (@StringToExecute);
28192865
2866+ /* Delete history older than @OutputTableRetentionDays */
2867+ SET @StringToExecute = N ' IF EXISTS(SELECT * FROM '
2868+ + @OutputDatabaseName
2869+ + ' .INFORMATION_SCHEMA.SCHEMATA WHERE QUOTENAME(SCHEMA_NAME) = '' '
2870+ + @OutputSchemaName + ' '' ) DELETE '
2871+ + @OutputDatabaseName + ' .'
2872+ + @OutputSchemaName + ' .'
2873+ + @OutputTableNamePerfmonStats
2874+ + ' WHERE ServerName = '' '
2875+ + CAST (SERVERPROPERTY (' ServerName' ) AS NVARCHAR (128 ))
2876+ + ' '' AND CheckDate < '' ' + CAST (CAST ( (DATEADD (DAY , - 1 * @OutputTableRetentionDays, GETDATE () ) ) AS DATE ) AS NVARCHAR (20 )) + ' '' ;' ;
2877+ EXEC (@StringToExecute);
2878+
2879+
2880+
28202881 END
28212882 ELSE IF (SUBSTRING (@OutputTableNamePerfmonStats, 2 , 2 ) = ' ##' )
28222883 BEGIN
@@ -2948,6 +3009,20 @@ BEGIN
29483009 + ' '' , '' ' + CONVERT (NVARCHAR (100 ), @StartSampleTime, 121 ) + ' '' , '
29493010 + ' wait_type, wait_time_ms, signal_wait_time_ms, waiting_tasks_count FROM #WaitStats WHERE Pass = 2 AND wait_time_ms > 0 AND waiting_tasks_count > 0' ;
29503011 EXEC (@StringToExecute);
3012+
3013+ /* Delete history older than @OutputTableRetentionDays */
3014+ SET @StringToExecute = N ' IF EXISTS(SELECT * FROM '
3015+ + @OutputDatabaseName
3016+ + ' .INFORMATION_SCHEMA.SCHEMATA WHERE QUOTENAME(SCHEMA_NAME) = '' '
3017+ + @OutputSchemaName + ' '' ) DELETE '
3018+ + @OutputDatabaseName + ' .'
3019+ + @OutputSchemaName + ' .'
3020+ + @OutputTableNameWaitStats
3021+ + ' WHERE ServerName = '' '
3022+ + CAST (SERVERPROPERTY (' ServerName' ) AS NVARCHAR (128 ))
3023+ + ' '' AND CheckDate < '' ' + CAST (CAST ( (DATEADD (DAY , - 1 * @OutputTableRetentionDays, GETDATE () ) ) AS DATE ) AS NVARCHAR (20 )) + ' '' ;' ;
3024+ EXEC (@StringToExecute);
3025+
29513026 END
29523027 ELSE IF (SUBSTRING (@OutputTableNameWaitStats, 2 , 2 ) = ' ##' )
29533028 BEGIN
0 commit comments