Skip to content

Commit b703f54

Browse files
committed
Fix Checkpoint_XE script
1 parent 25f2e44 commit b703f54

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

Scripts/Checkpoint_XE.sql

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,50 @@
1-
<issues>No</issues>
1+
<documentation>
2+
<summary>Analyze checkpoint extended events result</summary>
3+
<returns>1 data set: checploints info.</returns>
4+
<issues>No</issues>
5+
<author>Aaron Bertrand</author>
6+
<created>2020-02-17</created>
7+
<modified>2021-09-30 by Konstantin Taranov</modified>
8+
<version>1.0</version>
9+
<sourceLink>https://github.com/ktaranov/sqlserver-kit/blob/master/Scripts/Checkpoint_XE.sql</sourceLink>
10+
<originalLink>https://www.mssqltips.com/sqlservertip/6319/sql-server-checkpoint-monitoring-with-extended-events/</originalLink>
11+
</documentation>
12+
13+
DROP TABLE IF EXISTS #xml;
14+
GO
15+
SELECT ev = SUBSTRING([object_name],12,5), ed = CONVERT(xml, event_data)
16+
INTO #xml
17+
FROM sys.fn_xe_file_target_read_file('L:\XE_Out\CheckPoint*.xel', NULL, NULL, NULL);
18+
;WITH Events(ev,ts,db,id) AS
19+
(
20+
SELECT ev,
21+
ed.value(N'(event/@timestamp)[1]', N'datetime'),
22+
ed.value(N'(event/data[@name="database_id"]/value)[1]', N'int'),
23+
ed.value(N'(event/action[@name="attach_activity_id"]/value)[1]', N'uniqueidentifier')
24+
FROM #xml
25+
),
26+
EventPairs AS
27+
(
28+
SELECT db, ev,
29+
checkpoint_ended = ts,
30+
checkpoint_began = LAG(ts, 1) OVER (PARTITION BY id, db ORDER BY ts)
31+
FROM Events
32+
),
33+
Timings AS
34+
(
35+
SELECT
36+
dbname = DB_NAME(db),
37+
checkpoint_began,
38+
checkpoint_ended,
39+
duration_milliseconds = DATEDIFF(MILLISECOND, checkpoint_began, checkpoint_ended)
40+
FROM EventPairs WHERE ev = 'end' AND checkpoint_began IS NOT NULL
41+
)
42+
SELECT
43+
dbname,
44+
checkpoint_count = COUNT(*),
45+
avg_seconds = CONVERT(decimal(18,2),AVG(1.0*duration_milliseconds)/1000),
46+
max_seconds = CONVERT(decimal(18,2),MAX(1.0*duration_milliseconds)/1000),
47+
total_seconds_spent = CONVERT(decimal(18,2),SUM(1.0*duration_milliseconds)/1000)
48+
FROM Timings
49+
GROUP BY dbname
50+
ORDER BY total_seconds_spent DESC;

0 commit comments

Comments
 (0)