Estou tentando configurar um rastreamento do lado do servidor no SQL Server 2008 R2. Embora eu não tenha problemas para selecionar eventos e colunas de dados, a filtragem parece um pouco estranha...
Eu estava tentando configurar uma filtragem na duração do lote SQL ou no procedimento armazenado (filtre qualquer coisa >= 1000 ms), mas também queria filtrar o nome do banco de dados envolvido.
Quando exporto a definição de rastreamento do SQL Profiler para um *.sql
arquivo, no entanto, não encontro nenhuma filtragem no nome do banco de dados:
-- lots of other stuff up here - setting up trace events and so on...
-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint
exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 100479e4-6eeb-4608-af17-64141f1631ec'
set @bigintfilter = 1000000
exec sp_trace_setfilter @TraceID, 13, 0, 4, @bigintfilter
....
Então o que isso quer dizer? Por que posso especificar um nome de banco de dados para filtrar - mas a definição de rastreamento não o contém, no final?
- Isso significa que o rastreamento do lado do servidor está sempre verificando apenas o banco de dados em que está sendo criado?
- Mas então por que posso especificar um filtro pelo nome do banco de dados?
- Isso também significa que não há como fazer rastreamento em todo o servidor de banco de dados em, por exemplo, deadlocks?
Atualização: depois de mais algumas brincadeiras, cheguei à seguinte conclusão:
o filtro no nome do banco de dados não foi aplicado ao
Create Trace
script no meu caso, pois acabei selecionando apenas oLocks / Deadlock Graph
evento - e esse evento não expõe aDatabase Name
como uma coluna de eventose eu escolher outros eventos, como
RPC completed
esse , exporDatabase Name
como uma coluna de evento, posso filtrarDatabase Name
e esse filtro também é adicionado corretamente aoCreate Trace
script.
Não consigo descobrir como consegui definir um filtro em Database Name
, pois normalmente, se um evento não expõe uma coluna, essa coluna também não está disponível na caixa de Column filter
diálogo ....
De qualquer forma - por quaisquer razões que estejam além de mim (por enquanto, pelo menos), Deadlock Graph
não expõe o Database Name
e, portanto, também não posso filtrar essa propriedade ....
Obrigado a todos que ajudaram e forneceram comentários perspicazes!
Não, o rastreamento do lado do servidor tem o escopo apenas disso: o servidor. Quando crio (o que penso ser) a definição de rastreamento exata e a exporto, obtenho o seguinte trecho:
Também estou usando o SQL Server Profiler 2008 R2. Se você não filtrar pelo nome do banco de dados, estará capturando eventos de rastreamento para todos os bancos de dados de instância. Quanto ao motivo de sua exportação não incluir essa parte do filtro, não posso dizer com certeza. Eu sei que isso é óbvio, mas eu verificaria sua definição de rastreamento no Profiler antes de exportar para garantir que o nome do banco de dados seja de fato incluído como um filtro (novamente, sei que você provavelmente dobrou e triplicou isso, mas eu tinha dizê-lo).
Não tenho certeza do que está acontecendo com seu Profiler porque consegui fazer isso antes. Às vezes, a GUI para configurar a filtragem fica um pouco confusa e, se você alterar certas coisas na caixa de diálogo de rastreamento, todos os filtros serão redefinidos para os padrões. Dito isso, sinceramente não me lembro se usei as ferramentas de gerenciamento 2008 R2 ou 2012 para gerar meu script.
De qualquer forma, aqui está o código para fazer a filtragem que você deseja:
MSDN: sp_trace_setfilter