Escolar Documentos
Profissional Documentos
Cultura Documentos
Use
Extended Events!!!
Ainda continuando a falar sobre Extended Events, na minha opinião ele ainda não
ganhou a atenção que deveriam, por isso resolvi montar este post gerando um
comparativo entre eles e o SQL Server Profiler. De acordo com o Books Online do
produto, o SQL Server Profiler está marcado como “deprecated” porque pode ser
totalmente substituído (com vantagens) pelos eventos estendidos.
Bom, para facilitar nossa vida, a partir do SQL Server 2012 surgiram algumas DMV’s
relacionadas a Extended Events que se combinadas podem nos dar uma informação
muito útil, quais eventos gerados pelo SQL Server Profiler são equivalentes aos eventos
gerados pelo Extended Events, não precisamos escrever o script pois ele já existe
oficialmente, abaixo está o mesmo e o link onde obtê-lo:
USE MASTER;
GO
SELECT DISTINCT
tb.trace_event_id,
te.name AS 'Event Class',
em.package_name AS 'Package',
em.xe_event_name AS 'XEvent Name',
tb.trace_column_id,
tc.name AS 'SQL Trace Column',
am.xe_action_name as 'Extended Events action'
FROM (sys.trace_events te LEFT OUTER JOIN sys.trace_xe_event_map em
ON te.trace_event_id = em.trace_event_id) LEFT OUTER JOINsys.trace_event_bindi
ngs tb
ON em.trace_event_id = tb.trace_event_id LEFT OUTER JOINsys.trace_columns tc
ON tb.trace_column_id = tc.trace_column_id LEFT OUTER JOINsys.trace_xe_actio
n_map am
ON tc.trace_column_id = am.trace_column_id
ORDER BY te.name, tc.name
FONTE: http://msdn.microsoft.com/en-us/library/ff878264.aspx
Ao rodar este script, veremos algo similar ao que esta na imagem abaixo:
A coluna “Event Class”, diz respeito ao nome do evento no SQL Server Profiler, para
saber qual evento corresponde à ele no Extended Events, basta olharmos o nome que
está na coluna “XEvent Name”, neste caso da imagem, temos que
o “SP:Completed”do SQL Server Profiler corresponde ao evento do Extended Events
chamado module_end. A coluna “SQL Trace Column” diz respeito as colunas que
podemos colocar algum tipo de filtro no evento do SQL Server Profiler, olhando a
coluna “Extended Events action”, teremos a correspondência para esta coluna no evento
coletado pelo Extended Events, no caso da imagem, temos que a coluna
“ApplicationName” do SQL Server Profiler, corresponde a coluna
“client_app_name” no Extended Events.
Bom, primeiramente pare e encerre o SQL Server Profiler. Com a ajuda daquela query
no início do post, já descobrimos qual evento no Extended Events equivale
ao“SP:Completed” do SQL Server Profiler, no Management Studio, expanda
Management>Extended Events, clique com o direto em “Sessions” e depois clique em
“New Session...”.
Na aba General, Em “Session Name” vamos definir o nome para nossa coleta, vou
chamar de “XCompare”, deixe marcadas as opções “Start the event session immediately
after session creation” e “Watch live data on screen as it is captured”.
Nossa coleta já está pronta, rode a procedure sp_readerrorlog e veja que na aba “Live
Data” o evento foi coletado da mesma forma que ocorreu usando o SQL Server Profiler:
Informação adicional...
Você pode ainda converter scripts mais complexos gerados pelo SQL Server Profiler
em eventos estendidos através do procedimento descrito no link abaixo:
http://msdn.microsoft.com/library/ff878114.aspx
Bom pessoal, é isso. Façam os seus testes com Extended Events, o seu uso ainda não é
muito popular mas eles com certeza são uma escolha melhor que o SQL Server Profiler
no momento de um troubleshooting de um ambiente com problemas de performance.
Gerenciando e Criando Extended Events
no SSMS do SQL Server 2012
O Extended Events foi lançado no SQL Server 2008, esse recurso para quem não o
conheçe é o mecanismo de monitoramento e análise de eventos do SQL Server. Porém o
SQL Server é baseado em eventos então, com esse robusto recurso é possível consumir
diversas informações para que assim a análise das informações seja mais efetiva.
No SQL Server 2008 os Extended Events podiam ser criados somente em T-SQL,
porém no SQL Server 2012 uma nova e rica interface foi construída para a facilidade de
criação e gerenciamento.
Nesse momento será aberto um wizard aonde ajudará você a realizar a construção de um
novo Extended Event.
(Figura 2 – Nome da sessão (Conexões SQL Server) assim como opção de iniciar o evento ao
iniciar o servidor.)
(Figura 4 – É possível ver a descrição de todos os eventos associados, como há muito eventos
há uma pesquisa dentro da biblioteca, o que facilita bastante na hora de acrescentar um novo
evento.)
(Figura 5 – É possível capturar os eventos globais, assim como host_name, sql_text,
database name dentre outras informações, é possível acrescentar mais informações para
o seu Extended Event.)
(Figura 6 - Se desejar, você pode realizar a criação de filtros, assim você pode combinar diversas
condições utilizando OR e AND.)
(Figura 7 – Configurando e salvando o arquivo .XEL)
(Figura 8 – Sumário.)
Se desejar utilizar novamente, clique em Script….
ACTION(sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_h
ostname,sqlserver.context_info,sqlserver.database_name,sqlserver.server_principal_na
me,sqlserver.session_id,sqlserver.sql_text)),
ACTION(sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_h
ostname,sqlserver.context_info,sqlserver.database_name,sqlserver.server_instance_na
me,sqlserver.server_principal_name,sqlserver.sql_text)),
ACTION(sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_h
ostname,sqlserver.context_info,sqlserver.database_name,sqlserver.server_instance_na
me,sqlserver.server_principal_name,sqlserver.session_id,sqlserver.sql_text))
WITH (MAX_MEMORY=4096KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_E
VENT_LOSS,MAX_DISPATCH_LATENCY=30SECONDS,MAX_EVENT_SIZE=0KB,
MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE
=ON)
GO
(Figura 9 – Após criação, você poderá verificar todos os eventos que estão sendo
capturados, para isso marque as opções. Ele iniciará a sessão e te levará a uma tela
aonde você terá acesso as informações.)
(Figura 10 – Informaões de login e logout sendo coletadas com sucesso.)
Deseja mais informações sobre Extended Events, sugiro leitura no MSDN, segue links –
http://msdn.microsoft.com/en-
us/library/bb630354(v=sql.105).aspx e http://msdn.microsoft.com/en-
us/library/bb630282.aspx
EXTENDED EVENTS –
CAPTURANDO DEADLOCK
Neste post demonstrarei como capturar deadlock utilizando Extend Events.
Este é um recurso novo contido no SQL Server 2012.
Vamos aos passos:
11.
12. Mova os itens para Selected Events e clique em Next;
19. Selecione a sessão criada, clique com botão direito sobre a sessão e
seleciona Start Session;
20. Podemos observar que após o Start da sessão a mesma passou para cor
verde;
21. Próxima etapa vai ser criar duas tabelas e inserir dois registros para
testarmos a captura das informações;
22.