Skip to content

Commit 617eb49

Browse files
committed
Adicionado scripts de extended events
1 parent be4fed8 commit 617eb49

29 files changed

+1928
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Detalhes
7+
Capturar as requisições de I/O feitas pelo SQL.
8+
Pega tanto o início (_Requested), quando a conclusão (_completed).
9+
Eu acho que só usei isso para demonstrações (não lembro de ter usado em produção, mas pode ter sido).
10+
Note que deixei um filtro de session_id, filtrando aepnas de uma sessão em específico;
11+
12+
13+
*/
14+
15+
-- alter event session [IoRequests] on server state = start
16+
-- alter event session [IoRequests] on server state = stop
17+
18+
CREATE EVENT SESSION
19+
[IoRequests]
20+
ON SERVER
21+
ADD EVENT sqlos.async_io_requested(
22+
23+
ACTION(
24+
sqlserver.session_id
25+
,sqlserver.client_app_name
26+
,sqlserver.database_name
27+
,sqlserver.server_principal_name
28+
,package0.event_sequence
29+
)
30+
WHERE (
31+
[package0].[equal_uint64]([sqlserver].[session_id],(51))
32+
)
33+
)
34+
,ADD EVENT sqlos.async_io_completed(
35+
36+
ACTION(
37+
sqlserver.session_id
38+
,sqlserver.client_app_name
39+
,sqlserver.database_name
40+
,sqlserver.server_principal_name
41+
,package0.event_sequence
42+
)
43+
WHERE (
44+
[package0].[equal_uint64]([sqlserver].[session_id],(51))
45+
)
46+
)
47+
48+
ADD TARGET
49+
package0.ring_buffer
50+
51+
WITH (
52+
MAX_MEMORY=4096 KB
53+
,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
54+
,MAX_DISPATCH_LATENCY=30 SECONDS
55+
,MAX_EVENT_SIZE=0 KB
56+
,MEMORY_PARTITION_MODE=NONE
57+
,TRACK_CAUSALITY=OFF
58+
,STARTUP_STATE=OFF
59+
)
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Detalhes
7+
Consultar o XE gerado pela sessão IoRequests, no ringer buffer target.
8+
9+
10+
*/
11+
12+
13+
IF OBJECT_ID('tempdb..#Eventos') IS NOT NULL
14+
DROP TABLE #Eventos;
15+
16+
IF OBJECT_ID('tempdb..#TargetData') IS NOT NULL
17+
DROP TABLE #TargetData;
18+
19+
SELECT
20+
IDENTITY(bigint,1,1) as ID
21+
,SS.name
22+
,S.address
23+
,CONVERT(xml,REPLACE(target_data,'<>','')) as TargetData
24+
INTO
25+
#TargetData
26+
FROM
27+
sys.server_event_sessions SS
28+
LEFT JOIN
29+
sys.dm_xe_sessions S
30+
ON S.name = SS.name
31+
LEFT JOIN
32+
sys.dm_xe_session_targets T
33+
ON T.event_session_address = S.address
34+
WHERE
35+
SS.name = 'IoRequests'
36+
37+
--alter event session IoRequests on server state = stop
38+
39+
40+
SELECT
41+
E.name
42+
,E.address
43+
--,EventoXML.query('.') as exml
44+
,EventoXML.value('(event/action[@name = "event_sequence"]/value)[1]','bigint') as EvtSeq
45+
,EventoXML.value('event[1]/@name','varchar(500)') as EventName
46+
,EventoXML.value('event[1]/@timestamp','datetime') as Ts
47+
,EventoXML.value('(event/data[@name = "offset"]/value)[1]','bigint') as Offset
48+
,EventoXML.value('(event/data[@name = "file_handle"]/value)[1]','varchar(32)') as FileHandle
49+
,EventoXML.value('(event/data[@name = "user_data_pointer"]/value)[1]','varchar(32)') as UserData
50+
INTO
51+
#Eventos
52+
FROM
53+
(
54+
SELECT
55+
TD.name
56+
,TD.address
57+
,EventXML.query('.') EventoXML
58+
FROM
59+
#TargetData TD
60+
CROSS APPLY
61+
TargetData.nodes('RingBufferTarget/event') N(EventXML)
62+
) E
63+
64+
65+
66+
SELECT
67+
*
68+
FROM
69+
#Eventos EV
70+
ORDER BY
71+
EV.Ts
72+
73+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<ViewSetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3+
<columnSettings>
4+
<ColumnSetting name="name">
5+
<width>160</width>
6+
<mergedColumns />
7+
</ColumnSetting>
8+
<ColumnSetting name="timestamp">
9+
<width>160</width>
10+
<mergedColumns />
11+
</ColumnSetting>
12+
<ColumnSetting name="database_name">
13+
<width>100</width>
14+
<mergedColumns />
15+
</ColumnSetting>
16+
<ColumnSetting name="session_id">
17+
<width>100</width>
18+
<mergedColumns />
19+
</ColumnSetting>
20+
<ColumnSetting name="scheduler_id">
21+
<width>100</width>
22+
<mergedColumns />
23+
</ColumnSetting>
24+
<ColumnSetting name="opcode">
25+
<width>100</width>
26+
<mergedColumns />
27+
</ColumnSetting>
28+
<ColumnSetting name="event_sequence">
29+
<width>100</width>
30+
<mergedColumns />
31+
</ColumnSetting>
32+
<ColumnSetting name="wait_type">
33+
<width>232</width>
34+
<mergedColumns />
35+
</ColumnSetting>
36+
<ColumnSetting name="file_handle">
37+
<width>100</width>
38+
<mergedColumns />
39+
</ColumnSetting>
40+
<ColumnSetting name="offset">
41+
<width>100</width>
42+
<mergedColumns />
43+
</ColumnSetting>
44+
<ColumnSetting name="user_data_pointer">
45+
<width>100</width>
46+
<mergedColumns />
47+
</ColumnSetting>
48+
</columnSettings>
49+
</ViewSetting>
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Detalhes
7+
Capturar eventos Extended Events para debugar o AlwaysON.
8+
Substituir o nome do banco DbTest
9+
10+
11+
*/
12+
13+
CREATE EVENT SESSION [AlwaysOn-Troub] ON SERVER
14+
ADD EVENT sqlos.async_io_completed(
15+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
16+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest'))),
17+
ADD EVENT sqlos.async_io_requested(
18+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
19+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest'))),
20+
ADD EVENT sqlos.wait_completed(
21+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
22+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest'))),
23+
ADD EVENT sqlos.wait_info(
24+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
25+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest') AND [wait_type]<>(1146))),
26+
ADD EVENT sqlserver.checkpoint_begin(
27+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
28+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest'))),
29+
ADD EVENT sqlserver.checkpoint_end(
30+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
31+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest'))),
32+
ADD EVENT sqlserver.hadr_db_manager_redo(
33+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
34+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest'))),
35+
ADD EVENT sqlserver.lock_redo_blocked(SET collect_database_name=(1),collect_resource_description=(1)
36+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
37+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest'))),
38+
ADD EVENT sqlserver.lock_redo_unblocked(SET collect_database_name=(1),collect_resource_description=(1)
39+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
40+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest'))),
41+
ADD EVENT sqlserver.redo_caught_up(
42+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
43+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest'))),
44+
ADD EVENT sqlserver.redo_single_record(
45+
ACTION(package0.event_sequence,package0.last_error,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.task_address,sqlserver.database_name,sqlserver.session_id)
46+
WHERE ([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[database_name],N'DbTest')))
47+
ADD TARGET package0.ring_buffer(SET max_events_limit=(10000),max_memory=(51200))
48+
WITH (MAX_MEMORY=512000 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=2 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
49+
GO
50+
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Detalhes
7+
Capturar eventos Extended Events com todos os comandos que concluem no banco.
8+
ATENÇÃO: Isso pode impactar a performance de algumas queries. USar com muita cautela e geralmente por alguns poucos segundos para rápida coleta.
9+
10+
11+
*/
12+
13+
14+
-- alter event session [ServerWork] on server state = start
15+
-- alter event session [ServerWork] on server state = stop
16+
17+
CREATE EVENT SESSION
18+
[ServerWork]
19+
ON
20+
SERVER
21+
ADD EVENT sqlserver.sql_batch_completed(
22+
23+
ACTION(
24+
sqlserver.session_id
25+
,sqlserver.client_app_name
26+
,sqlserver.context_info
27+
,sqlserver.database_name
28+
,sqlserver.server_principal_name
29+
,package0.debug_break
30+
)
31+
--WHERE (
32+
-- [package0].[equal_uint64]([sqlserver].[session_id],(51))
33+
-- )
34+
)
35+
36+
ADD TARGET
37+
package0.ring_buffer
38+
39+
WITH (
40+
MAX_MEMORY=4096 KB
41+
,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
42+
,MAX_DISPATCH_LATENCY=30 SECONDS
43+
,MAX_EVENT_SIZE=0 KB
44+
,MEMORY_PARTITION_MODE=NONE
45+
,TRACK_CAUSALITY=OFF
46+
,STARTUP_STATE=OFF
47+
)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Detalhes
7+
Importar os eventos do XE Atividades para uma tabela, lendo do target em ring buffer.
8+
*/
9+
10+
SELECT
11+
E.name
12+
,E.address
13+
--,EventoXML.query('.') as EventoXML
14+
,EventoXML.value('(event/action[@name = "event_sequence"]/value)[1]','bigint') as EvtSeq
15+
,EventoXML.value('event[1]/@name','varchar(500)') as Evento
16+
,EventoXML.value('event[1]/@timestamp','datetime') as Data
17+
,EventoXML.value('(event/action[@name = "session_id"]/value/text())[1]','smallint') as SPID
18+
,EventoXML.value('(event/action[@name = "database_name"]/value/text())[1]','sysname') as Banco
19+
,EventoXML.value('(event/data[@name = "batch_text"]/value/text())[1]','nvarchar(4000)') as BatchText
20+
,EventoXML.value('(event/data[@name = "statement"]/value)[1]','nvarchar(max)') as Stmt
21+
,EventoXML.value('(event/data[@name = "object_name"]/value)[1]','sysname') as ObjectName
22+
,EventoXML.value('(event/data[@name = "duration"]/value)[1]','bigint') as Duration
23+
,EventoXML.value('(event/data[@name = "message"]/value)[1]','nvarchar(1000)') as ErrorMessage
24+
,EventoXML.value('(event/action[@name = "sql_text"]/value)[1]','nvarchar(max)') as SQLText
25+
FROM
26+
(
27+
SELECT
28+
TD.name
29+
,TD.address
30+
,EventXML.query('.') EventoXML
31+
FROM
32+
(
33+
SELECT
34+
SS.name
35+
,S.address
36+
,CONVERT(xml,REPLACE(target_data,'<>','')) as TargetData
37+
FROM
38+
sys.server_event_sessions SS
39+
LEFT JOIN
40+
sys.dm_xe_sessions S
41+
ON S.name = SS.name
42+
LEFT JOIN
43+
sys.dm_xe_session_targets T
44+
ON T.event_session_address = S.address
45+
WHERE
46+
SS.name = 'ServerWork'
47+
) TD
48+
CROSS APPLY
49+
TargetData.nodes('RingBufferTarget/event') N(EventXML)
50+
) E
51+
52+

0 commit comments

Comments
 (0)