Desapegue do SQL Server Profiler! Use Extended Events!!!

Olá Pessoal! Tudo certo? Espero que sim!

Ainda continuando a falar sobre Extended Events, na minha opinião eles ainda não ganharam 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.

Mapeando eventos entre o SQL Server Profiler e Extended Events...        

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 JOIN sys.trace_event_bindings tb
   ON em.trace_event_id = tb.trace_event_id LEFT OUTER JOIN sys.trace_columns tc
   ON tb.trace_column_id = tc.trace_column_id LEFT OUTER JOIN sys.trace_xe_action_map am
   ON tc.trace_column_id = am.trace_column_id
ORDER BY te.name, tc.name


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.

Alguns exemplos práticos...

No Profiler, se eu quisesse coletar o término da execução de uma stored procedure, eu coletaria o evento “SP:Completed”, pois bem, vamos configurar uma coleta simples do profiler que colete este evento selecionando apenas as colunas “database_id”, “spid”, “database_name” e “text data”, conforme imagem abaixo:

Coloque o profiler para executar, volte no SQL Server e execute a procedure sp_readerrorlog, veja que o evento será coletado pelo Profiler:

 
Como seria esta coleta usando 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”.

Na aba “Events”, na lista de eventos selecione o evento module_end e clique em “>”:

 
Clique no botão “Configure” localizado a direita na parte superior da janela, na lista e selecione “database_id”, “database_name”, “session_id” e “sql_text”, agora podemos clicar em “OK”.

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:


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. 

Um abraço!

Nenhum comentário:

Postar um comentário