Skip to content

Commit b0b6128

Browse files
committed
erik stopped being dumb
Notes in issue
1 parent bd91c84 commit b0b6128

File tree

1 file changed

+62
-85
lines changed

1 file changed

+62
-85
lines changed

sp_BlitzFirst.sql

Lines changed: 62 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,7 @@ DECLARE @StringToExecute NVARCHAR(MAX),
139139
@UnquotedOutputDatabaseName NVARCHAR(256) = @OutputDatabaseName ,
140140
@UnquotedOutputSchemaName NVARCHAR(256) = @OutputSchemaName ,
141141
@LocalServerName NVARCHAR(128) = CAST(SERVERPROPERTY('ServerName') AS NVARCHAR(128)),
142-
@dm_exec_query_statistics_xml BIT = 0,
143-
@thread_time_sql NVARCHAR(MAX) = N'',
144-
@thread_time_ms FLOAT
142+
@dm_exec_query_statistics_xml BIT = 0;
145143

146144
/* Sanitize our inputs */
147145
SELECT
@@ -1303,73 +1301,6 @@ BEGIN
13031301
INSERT INTO #PerfmonCounters ([object_name],[counter_name],[instance_name]) VALUES ('SQL Server 2017 XTP Transactions','Transactions created/sec',NULL);
13041302
END;
13051303

1306-
SET @thread_time_sql = N'
1307-
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
1308-
1309-
SELECT
1310-
@thread_time_ms =
1311-
ROUND
1312-
(
1313-
t.total_thread_time_ms,
1314-
2
1315-
)
1316-
FROM
1317-
(
1318-
SELECT
1319-
total_thread_time_ms =
1320-
CONVERT
1321-
(
1322-
float,
1323-
-- time spent waiting by threads running user queries
1324-
SUM(w.wait_time_ms) +
1325-
-- time spent running on a visible scheduler
1326-
(
1327-
SELECT
1328-
SUM(s.total_cpu_usage_ms)
1329-
FROM sys.dm_os_schedulers AS s
1330-
WHERE s.status = ''VISIBLE ONLINE''
1331-
AND s.is_online = 1
1332-
)
1333-
)
1334-
FROM
1335-
(
1336-
SELECT
1337-
os.wait_type,
1338-
wait_time_ms =
1339-
os.wait_time_ms
1340-
FROM sys.dm_os_wait_stats AS os
1341-
1342-
UNION ALL
1343-
1344-
SELECT
1345-
owt.wait_type,
1346-
wait_time_ms =
1347-
owt.wait_duration_ms
1348-
FROM sys.dm_os_waiting_tasks AS owt
1349-
WHERE owt.session_id > 50
1350-
1351-
) AS w
1352-
WHERE NOT EXISTS
1353-
(
1354-
-- Exclude waits unrelated to user queries
1355-
SELECT
1356-
1/0
1357-
FROM ##WaitCategories AS wc
1358-
WHERE wc.WaitType = w.wait_type
1359-
AND wc.Ignorable = 1
1360-
)
1361-
) AS t;'
1362-
1363-
IF SERVERPROPERTY('Edition') = 'SQL Azure'
1364-
BEGIN
1365-
SET @thread_time_sql =
1366-
REPLACE(@thread_time_sql, N'sys.dm_os_wait_stats', N'sys.dm_db_wait_stats');
1367-
END
1368-
1369-
EXEC sys.sp_executesql
1370-
@thread_time_sql,
1371-
N'@thread_time_ms FLOAT OUTPUT',
1372-
@thread_time_ms OUT;
13731304

13741305
/* Populate #FileStats, #PerfmonStats, #WaitStats with DMV data.
13751306
After we finish doing our checks, we'll take another sample and compare them. */
@@ -1381,7 +1312,18 @@ BEGIN
13811312
x.SampleTime,
13821313
x.wait_type,
13831314
SUM(x.sum_wait_time_ms) AS sum_wait_time_ms,
1384-
CASE @Seconds WHEN 0 THEN 0 ELSE @thread_time_ms END AS thread_time_ms,
1315+
CASE @Seconds
1316+
WHEN 0
1317+
THEN 0
1318+
ELSE
1319+
(
1320+
SELECT
1321+
SUM(s.total_cpu_usage_ms)
1322+
FROM sys.dm_os_schedulers AS s
1323+
WHERE s.status = ''VISIBLE ONLINE''
1324+
AND s.is_online = 1
1325+
)
1326+
END AS thread_time_ms,
13851327
SUM(x.sum_signal_wait_time_ms) AS sum_signal_wait_time_ms,
13861328
SUM(x.sum_waiting_tasks) AS sum_waiting_tasks
13871329
FROM (
@@ -1425,12 +1367,29 @@ BEGIN
14251367
EXEC sp_executesql
14261368
@StringToExecute,
14271369
N'@StartSampleTime DATETIMEOFFSET,
1428-
@Seconds INT,
1429-
@thread_time_ms float',
1370+
@Seconds INT',
14301371
@StartSampleTime,
1431-
@Seconds,
1432-
@thread_time_ms;
1372+
@Seconds;
14331373

1374+
WITH w AS
1375+
(
1376+
SELECT
1377+
total_waits =
1378+
CONVERT
1379+
(
1380+
FLOAT,
1381+
SUM(ws.wait_time_ms)
1382+
)
1383+
FROM #WaitStats AS ws
1384+
WHERE Pass = 1
1385+
)
1386+
UPDATE ws
1387+
SET ws.thread_time_ms =
1388+
ws.thread_time_ms + w.total_waits
1389+
FROM #WaitStats AS ws
1390+
CROSS JOIN w
1391+
WHERE ws.Pass = 1
1392+
OPTION(RECOMPILE);
14341393

14351394
INSERT INTO #FileStats (Pass, SampleTime, DatabaseID, FileID, DatabaseName, FileLogicalName, SizeOnDiskMB, io_stall_read_ms ,
14361395
num_of_reads, [bytes_read] , io_stall_write_ms,num_of_writes, [bytes_written], PhysicalName, TypeDesc)
@@ -2537,11 +2496,6 @@ If one of them is a lead blocker, consider killing that query.'' AS HowToStopit,
25372496
WAITFOR TIME @FinishSampleTimeWaitFor;
25382497
END;
25392498

2540-
EXEC sys.sp_executesql
2541-
@thread_time_sql,
2542-
N'@thread_time_ms FLOAT OUTPUT',
2543-
@thread_time_ms OUT;
2544-
25452499

25462500
RAISERROR('Capturing second pass of wait stats, perfmon counters, file stats',10,1) WITH NOWAIT;
25472501
/* Populate #FileStats, #PerfmonStats, #WaitStats with DMV data. In a second, we'll compare these. */
@@ -2552,7 +2506,13 @@ If one of them is a lead blocker, consider killing that query.'' AS HowToStopit,
25522506
x.SampleTime,
25532507
x.wait_type,
25542508
SUM(x.sum_wait_time_ms) AS sum_wait_time_ms,
2555-
@thread_time_ms AS thread_time_ms,
2509+
(
2510+
SELECT
2511+
SUM(s.total_cpu_usage_ms)
2512+
FROM sys.dm_os_schedulers AS s
2513+
WHERE s.status = ''VISIBLE ONLINE''
2514+
AND s.is_online = 1
2515+
) AS thread_time_ms,
25562516
SUM(x.sum_signal_wait_time_ms) AS sum_signal_wait_time_ms,
25572517
SUM(x.sum_waiting_tasks) AS sum_waiting_tasks
25582518
FROM (
@@ -2595,11 +2555,28 @@ If one of them is a lead blocker, consider killing that query.'' AS HowToStopit,
25952555

25962556
EXEC sp_executesql
25972557
@StringToExecute,
2598-
N'@Seconds INT,
2599-
@thread_time_ms FLOAT',
2600-
@Seconds,
2601-
@thread_time_ms;
2558+
N'@Seconds INT',
2559+
@Seconds;
26022560

2561+
WITH w AS
2562+
(
2563+
SELECT
2564+
total_waits =
2565+
CONVERT
2566+
(
2567+
FLOAT,
2568+
SUM(ws.wait_time_ms)
2569+
)
2570+
FROM #WaitStats AS ws
2571+
WHERE Pass = 2
2572+
)
2573+
UPDATE ws
2574+
SET ws.thread_time_ms =
2575+
ws.thread_time_ms + w.total_waits
2576+
FROM #WaitStats AS ws
2577+
CROSS JOIN w
2578+
WHERE ws.Pass = 2
2579+
OPTION(RECOMPILE);
26032580

26042581
INSERT INTO #FileStats (Pass, SampleTime, DatabaseID, FileID, DatabaseName, FileLogicalName, SizeOnDiskMB, io_stall_read_ms ,
26052582
num_of_reads, [bytes_read] , io_stall_write_ms,num_of_writes, [bytes_written], PhysicalName, TypeDesc, avg_stall_read_ms, avg_stall_write_ms)

0 commit comments

Comments
 (0)