@@ -30,7 +30,7 @@ SET NOCOUNT ON;
3030BEGIN;
3131
3232
33- SELECT @Version = '3.93 ', @VersionDate = '20200217 ';
33+ SELECT @Version = '3.94 ', @VersionDate = '20200324 ';
3434
3535IF(@VersionCheckMode = 1)
3636BEGIN
@@ -804,6 +804,7 @@ LogShamer:
804804 AND bw.is_completed = 1
805805 AND bw.last_log_backup_start_time < DATEADD(SECOND, (@rpo * -1), GETDATE())
806806 AND (bw.error_number IS NULL OR bw.error_number > 0) /* negative numbers indicate human attention required */
807+ AND bw.ignore_database = 0
807808 )
808809 OR
809810 ( /*This section picks up newly added databases by Pollster*/
@@ -812,6 +813,7 @@ LogShamer:
812813 AND bw.last_log_backup_start_time = '1900-01-01 00:00:00.000'
813814 AND bw.last_log_backup_finish_time = '9999-12-31 00:00:00.000'
814815 AND (bw.error_number IS NULL OR bw.error_number > 0) /* negative numbers indicate human attention required */
816+ AND bw.ignore_database = 0
815817 )
816818 ORDER BY bw.last_log_backup_start_time ASC, bw.last_log_backup_finish_time ASC, bw.database_name ASC;
817819
@@ -1522,7 +1524,7 @@ SET NOCOUNT ON;
15221524
15231525BEGIN;
15241526
1525- SELECT @Version = '3.93 ', @VersionDate = '20200217 ';
1527+ SELECT @Version = '3.94 ', @VersionDate = '20200324 ';
15261528
15271529IF(@VersionCheckMode = 1)
15281530BEGIN
28462848 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
28472849
28482850
2849- SELECT @Version = '7.93 ', @VersionDate = '20200217 ';
2851+ SELECT @Version = '7.94 ', @VersionDate = '20200324 ';
28502852 SET @OutputType = UPPER(@OutputType);
28512853
28522854 IF(@VersionCheckMode = 1)
29892991 ,@CurrentComponentVersionCheckModeOK BIT
29902992 ,@canExitLoop BIT
29912993 ,@frkIsConsistent BIT
2994+ ,@NeedToTurnNumericRoundabortBackOn BIT;
29922995
29932996 /* End of declarations for First Responder Kit consistency check:*/
29942997 ;
@@ -3003,7 +3006,25 @@ AS
30033006
30043007 IF @DaysUptime = 0
30053008 SET @DaysUptime = .01;
3006-
3009+
3010+ /*
3011+ Set the session state of Numeric_RoundAbort to off if any databases have Numeric Round-Abort enabled.
3012+ Stops arithmetic overflow errors during data conversion. See Github issue #2302 for more info.
3013+ */
3014+ IF ( (8192 & @@OPTIONS) = 8192 ) /* Numeric RoundAbort is currently on, so we may need to turn it off temporarily */
3015+ BEGIN
3016+ IF EXISTS (SELECT 1
3017+ FROM sys.databases
3018+ WHERE is_numeric_roundabort_on = 1) /* A database has it turned on */
3019+ BEGIN
3020+ SET @NeedToTurnNumericRoundabortBackOn = 1;
3021+ SET NUMERIC_ROUNDABORT OFF;
3022+ END;
3023+ END;
3024+
3025+
3026+
3027+
30073028 /*
30083029 --TOURSTOP01--
30093030 See https://www.BrentOzar.com/go/blitztour for a guided tour.
36633684
36643685 IF @Debug IN (1, 2) RAISERROR('Running CheckId [%d].', 0, 1, 1) WITH NOWAIT;
36653686
3666- IF SERVERPROPERTY('EngineName ') <> 8 /* Azure Managed Instances need a special query */
3687+ IF SERVERPROPERTY('EngineEdition ') <> 8 /* Azure Managed Instances need a special query */
36673688 BEGIN
36683689 INSERT INTO #BlitzResults
36693690 ( CheckID ,
@@ -11834,6 +11855,13 @@ IF @ProductVersionMajor >= 10 AND NOT EXISTS ( SELECT 1
1183411855
1183511856 END; /* ELSE -- IF @OutputType = 'SCHEMA' */
1183611857
11858+ /*
11859+ Reset the Nmumeric_RoundAbort session state back to enabled if it was disabled earlier.
11860+ See Github issue #2302 for more info.
11861+ */
11862+ IF @NeedToTurnNumericRoundabortBackOn = 1
11863+ SET NUMERIC_ROUNDABORT ON;
11864+
1183711865 SET NOCOUNT OFF;
1183811866GO
1183911867
@@ -11872,7 +11900,7 @@ AS
1187211900 SET NOCOUNT ON;
1187311901 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
1187411902
11875- SELECT @Version = '3.93 ', @VersionDate = '20200217 ';
11903+ SELECT @Version = '3.94 ', @VersionDate = '20200324 ';
1187611904
1187711905 IF(@VersionCheckMode = 1)
1187811906 BEGIN
@@ -13649,7 +13677,7 @@ BEGIN
1364913677SET NOCOUNT ON;
1365013678SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
1365113679
13652- SELECT @Version = '7.93 ', @VersionDate = '20200217 ';
13680+ SELECT @Version = '7.94 ', @VersionDate = '20200324 ';
1365313681
1365413682
1365513683IF(@VersionCheckMode = 1)
@@ -14919,7 +14947,7 @@ SELECT CONVERT(DECIMAL(3,2), NULLIF(x.plans_24, 0) / (1. * NULLIF(x.total_plans,
1491914947 x.total_plans,
1492014948 @@SPID AS SPID
1492114949FROM x
14922- OPTION (RECOMPILE) ;
14950+ OPTION (RECOMPILE);
1492314951
1492414952
1492514953SET @OnlySqlHandles = LTRIM(RTRIM(@OnlySqlHandles)) ;
@@ -18394,6 +18422,77 @@ IF @Debug = 1
1839418422
1839518423EXEC sp_executesql @sql, N'@Top INT, @spid INT, @minimumExecutionCount INT, @min_back INT', @Top, @@SPID, @MinimumExecutionCount, @MinutesBack;
1839618424
18425+
18426+ /*
18427+
18428+ This section will check if:
18429+ * >= 30% of plans were created in the last hour
18430+ * Check on the memory_clerks DMV for space used by TokenAndPermUserStore
18431+ * Compare that to the size of the buffer pool
18432+ * If it's >10%,
18433+ */
18434+ IF EXISTS
18435+ (
18436+ SELECT 1/0
18437+ FROM #plan_creation AS pc
18438+ WHERE pc.percent_1 >= 30
18439+ )
18440+ BEGIN
18441+
18442+ DECLARE @user_perm_sql NVARCHAR(MAX) = N'';
18443+ DECLARE @user_perm_gb_out DECIMAL(10,2);
18444+ DECLARE @common_version DECIMAL(10,2);
18445+ DECLARE @buffer_pool_memory_gb DECIMAL(10,2);
18446+ DECLARE @user_perm_percent DECIMAL(10,2);
18447+ DECLARE @is_tokenstore_big BIT = 0;
18448+
18449+
18450+ SELECT @buffer_pool_memory_gb = ( COUNT_BIG(*) * 8.0 ) / 1024. / 1024.
18451+ FROM sys.dm_os_buffer_descriptors;
18452+
18453+ SELECT @common_version =
18454+ CONVERT(DECIMAL(10,2), c.common_version)
18455+ FROM #checkversion AS c;
18456+
18457+ IF @common_version >= 11
18458+ BEGIN
18459+ SET @user_perm_sql += N'
18460+ SELECT @user_perm_gb = CASE WHEN (pages_kb / 128.0 / 1024.) >= 2.
18461+ THEN CONVERT(DECIMAL(38, 2), (pages_kb / 128.0 / 1024.))
18462+ ELSE 0
18463+ END
18464+ FROM sys.dm_os_memory_clerks
18465+ WHERE type = ''USERSTORE_TOKENPERM''
18466+ AND name = ''TokenAndPermUserStore'';';
18467+ END;
18468+
18469+ IF @common_version < 11
18470+ BEGIN
18471+ SET @user_perm_sql += N'
18472+ SELECT @user_perm_gb = CASE WHEN ((single_pages_kb + multi_pages_kb) / 1024.0 / 1024.) >= 2.
18473+ THEN CONVERT(DECIMAL(38, 2), ((single_pages_kb + multi_pages_kb) / 1024.0 / 1024.))
18474+ ELSE 0
18475+ END
18476+ FROM sys.dm_os_memory_clerks
18477+ WHERE type = ''USERSTORE_TOKENPERM''
18478+ AND name = ''TokenAndPermUserStore'';';
18479+ END;
18480+
18481+ EXEC sys.sp_executesql @user_perm_sql,
18482+ N'@user_perm_gb DECIMAL(10,2) OUTPUT',
18483+ @user_perm_gb = @user_perm_gb_out OUTPUT;
18484+
18485+
18486+ IF (@user_perm_gb_out / (1. * @buffer_pool_memory_gb)) * 100. >= 10
18487+ BEGIN
18488+ SET @is_tokenstore_big = 1;
18489+ SET @user_perm_percent = (@user_perm_gb_out / (1. * @buffer_pool_memory_gb)) * 100.;
18490+ END
18491+
18492+ END
18493+
18494+
18495+
1839718496IF @HideSummary = 0 AND @ExportToExcel = 0
1839818497BEGIN
1839918498 IF @Reanalyze = 0
@@ -19336,7 +19435,18 @@ BEGIN
1933619435 'https://www.brentozar.com/archive/2018/07/tsql2sday-how-much-plan-cache-history-do-you-have/',
1933719436 'If these percentages are high, it may be a sign of memory pressure or plan cache instability.'
1933819437 FROM #plan_creation p ;
19339-
19438+
19439+ IF @is_tokenstore_big = 1
19440+ INSERT INTO ##BlitzCacheResults (SPID, CheckID, Priority, FindingsGroup, Finding, URL, Details)
19441+ SELECT @@SPID,
19442+ 69,
19443+ 10,
19444+ N'Large USERSTORE_TOKENPERM cache: ' + CONVERT(NVARCHAR(11), @user_perm_gb_out) + N'GB',
19445+ N'The USERSTORE_TOKENPERM is taking up ' + CONVERT(NVARCHAR(11), @user_perm_percent)
19446+ + N'% of the buffer pool, and your plan cache seems to be unstable',
19447+ N'https://brentozar.com/go/userstore',
19448+ N'A growing USERSTORE_TOKENPERM cache can cause the plan cache to clear out'
19449+
1934019450 IF @v >= 11
1934119451 BEGIN
1934219452 IF EXISTS (SELECT 1/0
@@ -20231,7 +20341,7 @@ BEGIN
2023120341SET NOCOUNT ON;
2023220342SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
2023320343
20234- SELECT @Version = '7.93 ', @VersionDate = '20200217 ';
20344+ SELECT @Version = '7.94 ', @VersionDate = '20200324 ';
2023520345
2023620346IF(@VersionCheckMode = 1)
2023720347BEGIN
@@ -21183,8 +21293,9 @@ BEGIN
2118321293 WHERE CHARINDEX(',', @FilterPlansByDatabase, t + 1) > 0
2118421294 )
2118521295 INSERT #FilterPlansByDatabase (DatabaseID)
21186- SELECT SUBSTRING(@FilterPlansByDatabase, f, t - f)
21296+ SELECT DISTINCT db.database_id
2118721297 FROM a
21298+ INNER JOIN sys.databases db ON LTRIM(RTRIM(SUBSTRING(@FilterPlansByDatabase, a.f, a.t - a.f))) = db.name
2118821299 WHERE SUBSTRING(@FilterPlansByDatabase, f, t - f) IS NOT NULL
2118921300 OPTION (MAXRECURSION 0);
2119021301 END;
@@ -24364,7 +24475,7 @@ AS
2436424475SET NOCOUNT ON;
2436524476SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
2436624477
24367- SELECT @Version = '7.93 ', @VersionDate = '20200217 ';
24478+ SELECT @Version = '7.94 ', @VersionDate = '20200324 ';
2436824479SET @OutputType = UPPER(@OutputType);
2436924480
2437024481IF(@VersionCheckMode = 1)
@@ -29546,7 +29657,7 @@ BEGIN
2954629657SET NOCOUNT ON;
2954729658SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
2954829659
29549- SELECT @Version = '2.93 ', @VersionDate = '20200217 ';
29660+ SELECT @Version = '2.94 ', @VersionDate = '20200324 ';
2955029661
2955129662
2955229663IF(@VersionCheckMode = 1)
@@ -30201,6 +30312,12 @@ You need to use an Azure storage account, and the path has to look like this: ht
3020130312 step_name NVARCHAR(256);
3020230313
3020330314 IF SERVERPROPERTY('EngineEdition') NOT IN (5, 6) /* Azure SQL DB doesn't support querying jobs */
30315+ AND NOT (LEFT(CAST(SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS VARCHAR(8000)), 8) = 'EC2AMAZ-' /* Neither does Amazon RDS Express Edition */
30316+ AND LEFT(CAST(SERVERPROPERTY('MachineName') AS VARCHAR(8000)), 8) = 'EC2AMAZ-'
30317+ AND LEFT(CAST(SERVERPROPERTY('ServerName') AS VARCHAR(8000)), 8) = 'EC2AMAZ-'
30318+ AND db_id('rdsadmin') IS NOT NULL
30319+ AND EXISTS(SELECT * FROM master.sys.all_objects WHERE name IN ('rds_startup_tasks', 'rds_help_revlogin', 'rds_hexadecimal', 'rds_failover_tracking', 'rds_database_tracking', 'rds_track_change'))
30320+ )
3020430321 BEGIN
3020530322 SET @StringToExecute = N'UPDATE aj
3020630323 SET aj.job_name = j.name,
@@ -30989,8 +31106,8 @@ ELSE --Output to database is not set output to client app
3098931106 caw.waiting_to_close AS waiter_waiting_to_close,
3099031107 dp.deadlock_graph
3099131108 FROM #deadlock_process AS dp
30992- CROSS APPLY (SELECT TOP 1 * FROM #deadlock_resource_parallel AS drp WHERE drp.owner_id = dp.id AND drp.wait_type = 'e_waitPipeNewRow' ORDER BY drp.event_date) AS cao
30993- CROSS APPLY (SELECT TOP 1 * FROM #deadlock_resource_parallel AS drp WHERE drp.owner_id = dp.id AND drp.wait_type = 'e_waitPipeGetRow' ORDER BY drp.event_date) AS caw
31109+ OUTER APPLY (SELECT TOP 1 * FROM #deadlock_resource_parallel AS drp WHERE drp.owner_id = dp.id AND drp.wait_type = 'e_waitPipeNewRow' ORDER BY drp.event_date) AS cao
31110+ OUTER APPLY (SELECT TOP 1 * FROM #deadlock_resource_parallel AS drp WHERE drp.owner_id = dp.id AND drp.wait_type = 'e_waitPipeGetRow' ORDER BY drp.event_date) AS caw
3099431111 WHERE dp.victim_id IS NULL
3099531112 AND dp.login_name IS NOT NULL
3099631113 )
@@ -31150,7 +31267,7 @@ BEGIN /*First BEGIN*/
3115031267SET NOCOUNT ON;
3115131268SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
3115231269
31153- SELECT @Version = '3.93 ', @VersionDate = '20200217 ';
31270+ SELECT @Version = '3.94 ', @VersionDate = '20200324 ';
3115431271IF(@VersionCheckMode = 1)
3115531272BEGIN
3115631273 RETURN;
@@ -36876,7 +36993,7 @@ BEGIN
3687636993 SET NOCOUNT ON;
3687736994 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
3687836995
36879- SELECT @Version = '7.93 ', @VersionDate = '20200217 ';
36996+ SELECT @Version = '7.94 ', @VersionDate = '20200324 ';
3688036997
3688136998 IF(@VersionCheckMode = 1)
3688236999 BEGIN
@@ -37158,11 +37275,7 @@ BEGIN
3715837275 /* Think of the StringToExecute as starting with this, but we'll set this up later depending on whether we're doing an insert or a select:
3715937276 SELECT @StringToExecute = N'SELECT GETDATE() AS run_date ,
3716037277 */
37161- SET @StringToExecute = N'COALESCE(
37162- CONVERT(VARCHAR(20), (ABS(r.total_elapsed_time) / 1000) / 86400) + '':'' + CONVERT(VARCHAR(20), DATEADD(SECOND, (r.total_elapsed_time / 1000), 0), 114) ,
37163- CONVERT(VARCHAR(20), DATEDIFF(SECOND, s.last_request_start_time, GETDATE()) / 86400) + '':''
37164- + CONVERT(VARCHAR(20), DATEADD(SECOND, DATEDIFF(SECOND, s.last_request_start_time, GETDATE()), 0), 114)
37165- ) AS [elapsed_time] ,
37278+ SET @StringToExecute = N'COALESCE( CONVERT(VARCHAR(20), (ABS(r.total_elapsed_time) / 1000) / 86400) + '':'' + CONVERT(VARCHAR(20), (DATEADD(SECOND, (r.total_elapsed_time / 1000), 0) + DATEADD(MILLISECOND, (r.total_elapsed_time % 1000), 0)), 114), CONVERT(VARCHAR(20), DATEDIFF(SECOND, s.last_request_start_time, GETDATE()) / 86400) + '':'' + CONVERT(VARCHAR(20), DATEADD(SECOND, DATEDIFF(SECOND, s.last_request_start_time, GETDATE()), 0), 114) ) AS [elapsed_time] ,
3716637279 s.session_id ,
3716737280 COALESCE(DB_NAME(r.database_id), DB_NAME(blocked.dbid), ''N/A'') AS database_name,
3716837281 ISNULL(SUBSTRING(dest.text,
@@ -37351,11 +37464,7 @@ IF @ProductVersionMajor >= 11
3735137464 /* Think of the StringToExecute as starting with this, but we'll set this up later depending on whether we're doing an insert or a select:
3735237465 SELECT @StringToExecute = N'SELECT GETDATE() AS run_date ,
3735337466 */
37354- SELECT @StringToExecute = N' COALESCE(
37355- CONVERT(VARCHAR(20), (ABS(r.total_elapsed_time) / 1000) / 86400) + '':'' + CONVERT(VARCHAR(20), DATEADD(SECOND, (r.total_elapsed_time / 1000), 0), 114) ,
37356- CONVERT(VARCHAR(20), DATEDIFF(SECOND, s.last_request_start_time, GETDATE()) / 86400) + '':''
37357- + CONVERT(VARCHAR(20), DATEADD(SECOND, DATEDIFF(SECOND, s.last_request_start_time, GETDATE()), 0), 114)
37358- ) AS [elapsed_time] ,
37467+ SELECT @StringToExecute = N'COALESCE( CONVERT(VARCHAR(20), (ABS(r.total_elapsed_time) / 1000) / 86400) + '':'' + CONVERT(VARCHAR(20), (DATEADD(SECOND, (r.total_elapsed_time / 1000), 0) + DATEADD(MILLISECOND, (r.total_elapsed_time % 1000), 0)), 114), CONVERT(VARCHAR(20), DATEDIFF(SECOND, s.last_request_start_time, GETDATE()) / 86400) + '':'' + CONVERT(VARCHAR(20), DATEADD(SECOND, DATEDIFF(SECOND, s.last_request_start_time, GETDATE()), 0), 114) ) AS [elapsed_time] ,
3735937468 s.session_id ,
3736037469 COALESCE(DB_NAME(r.database_id), DB_NAME(blocked.dbid), ''N/A'') AS database_name,
3736137470 ISNULL(SUBSTRING(dest.text,
@@ -37797,7 +37906,7 @@ SET NOCOUNT ON;
3779737906
3779837907/*Versioning details*/
3779937908
37800- SELECT @Version = '7.93 ', @VersionDate = '20200217 ';
37909+ SELECT @Version = '7.94 ', @VersionDate = '20200324 ';
3780137910
3780237911IF(@VersionCheckMode = 1)
3780337912BEGIN
@@ -39023,7 +39132,7 @@ AS
3902339132BEGIN
3902439133 SET NOCOUNT ON;
3902539134
39026- SELECT @Version = '2.93 ', @VersionDate = '20200217 ';
39135+ SELECT @Version = '2.94 ', @VersionDate = '20200324 ';
3902739136
3902839137IF(@VersionCheckMode = 1)
3902939138BEGIN
0 commit comments