Pergunta

Estou depurando procedimentos armazenados e, no momento, estou interessado no que foi executado em que ordem e quais parâmetros, em oposição à quão rápida as coisas corriam e o que pode se esgueirar entre e causar uma desaceleração.

Então, eu capturei alguns minutos de traço. O problema é que há muita coisa e eu preciso reduzi -las. Se eu fizer File -> Save As, Recebo as seguintes opções:

  • Arquivo de rastreamento ...
  • Modelo de rastreamento ...
  • Tabela de rastreamento ...
  • Trace XML Arquivo ...
  • Trace XML Arquivo para Replay ...

Agora, essas são opções decentes, mas o que eu realmente quero é um formato tabular, como o CSV. Eu acho que vírgulas em SP Trace provavelmente estragariam o formato CSV. Eu ficaria feliz em usar outra coisa, como || como um delimitador.

Depois de ter o formato tabular, posso filtrá -lo usando grep, etc. e depois processe facilmente com python para ver as coisas exatas que eu quero. Comecei a analisar o arquivo XML com um script, mas me vi gastando muito tempo no rastreamento XML formato de arquivo (não usado lxml biblioteca antes).

Então ... existe uma maneira mais fácil? Posso pelo menos copiá -lo para se destacar de alguma forma?

Foi útil?

Solução

Se você o salvar em uma tabela de rastreamento; Você pode obter os dados em uma tabela no SQL Server, que permitirá que você o manipule para o conteúdo do seu coração; Incluindo despejando -o para CSV, se ainda necessário. A coluna de dados de texto está totalmente representada na tabela.


Se você escolher SalvarTabela de rastreamento. Você será solicitado o nome da tabela e do banco de dados. Digamos que você chame de ProfileTemp no Scratch do banco de dados.

Entre naqueles; você pode consultar a tabela usando

select * from scratch.dbo.ProfilerTemp

Você verá tudo na janela de rastreamento da tabela. Se você não filtrou apenas os procedimentos armazenados e deseja apenas eles no seleto

Select textdata from [Scratch].[dbo].[ProfilerTemp] 
  where eventclass = 10 
  And textdata like 'exec %' 
  and not cast(TextData as nvarchar(max))= 'exec sp_reset_connection'

Isso filtra chamadas não procedimentos e qualquer conexão que você possa ter. Pode ser necessário adicionar mais filtros, dependendo do que você está tentando fazer.

Se você deseja isso como um arquivo de texto; Escolha Consulta - Resultados para arquivar e executar a consulta. Isso solicitará o nome do arquivo e fornecerá o texto do parâmetro como um arquivo de texto.

Outras dicas

Tl; dr: copie em um editor de texto, prepare manualmente e coloque no Excel.

Tenho muito pouca experiência com o SQL Server, então não sei se isso funcionará para os outros, mas foi para mim:

  • Selecione linhas desejadas no SQL Server Profiler. Ctrl + C para copiar.
  • Cole em um editor de texto sem formatação que possa fazer pesquisa de expressão regular e substitua (por exemplo, bloco de notas ++ no meu caso).
  • Regex substitua (N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)? com $1 $4 $6
    • Isso limpa todas as novas linhas dos scripts SQL.
    • Continue fazendo "Substituir tudo" até que não mais resultados sejam encontrados.
  • Regex substitua (Batch(Starting|Completed)[^\\]*?)\r\n com $1
    • Isso limpa as novas linhas de mais coisas do SQL. Novamente, continue substituindo até que não haja resultados.
  • Regex substitua \r\nset com set
    • Isso limpa todas as novas linhas dos scripts de login de auditoria
  • Pode ser necessário fazer mais substituição, você entendeu a ideia.
  • Cole no Excel usando o "Assistente de importação de texto". Use guias como o deliminador.
  • Classifique pela primeira coluna e remova todas as linhas inúteis (por exemplo, "Login de auditoria" no meu caso). Você também pode precisar mover manualmente alguns dados sobre uma coluna (por exemplo, dados "EntityFramework" no meu caso)

Eu tive um monte de arquivos de rastreamento do SQL Profiler contendo eventos de traço de deadlock que eu precisava analisar. Acabei convertendo -os em um único arquivo XML usando o SQL Profiler e depois lendo esse arquivo XML com Python, usando o lxml e pandas Bibliotecas.

À medida que os dados acabam em um pandas Dataframe, você pode convertê -lo facilmente a CSV, Excel, ... ou analisá -lo no Python (se você estiver familiarizado com os pandas).

O script está disponível como um essência. Ele está escrito especificamente para arquivos de trace de deadlock, pois eu não tinha outros traços disponíveis. Em outras palavras, pode ser necessário ajustá -lo um pouco para servir ao seu propósito. Não se preocupe se o arquivo XML for grande (vários 100 MBs); o script usa iterparse(), o que significa que o arquivo não será lido na memória e apenas os elementos relevantes serão capturados. Por exemplo, um xdl arquivo de ca. 220 MB foi analisado em menos de 13 segundos.

Salvando os arquivos de rastreamento como XML (xdl extensão):

Extract

Certifique -se de selecionar a opção Todos os eventos em um único arquivo.

Save

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top