Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como posso registrar e encontrar as consultas mais caras?


  1. Use o SQL Server Profiler (no menu de ferramentas do SSMS) para criar um rastreamento que registre esses eventos:
     RPC:Completed
     SP:Completed
     SP:StmtCompleted
     SQL:BatchCompleted
     SQL:StmtCompleted
    

  2. Você pode começar com o modelo de rastreamento padrão e removê-lo. Você não especificou se isso era para um banco de dados específico ou para todo o servidor, se for para Db's específicos, inclua a coluna DatabaseID e defina um filtro para seu banco de dados (SELECT DB_ID('dbname') ). Certifique-se de que a coluna de dados de leituras lógica esteja incluída para cada evento. Defina o rastreamento para registrar em um arquivo. Se você estiver deixando esse rastreamento para ser executado sem supervisão em segundo plano, é uma boa ideia definir um tamanho máximo de arquivo de rastreamento, digamos 500 MB ou 1 GB, se você tiver muito espaço (tudo depende de quanta atividade há no servidor, então você terá que chupar e ver).

  3. Inicie brevemente o rastreamento e, em seguida, pause-o. Vá para Arquivo->Exportar->Definição de rastreamento de script e escolha sua versão do banco de dados e salve em um arquivo. Agora você tem um script sql que cria um rastreamento com muito menos sobrecarga do que a execução pela GUI do criador de perfil. Quando você executar este script, ele produzirá o Trace ID (geralmente @ID=2 ); anote isso.

  4. Depois de ter um arquivo de rastreamento (.trc) (o rastreamento foi concluído devido ao tamanho máximo do arquivo ou você interrompeu o rastreamento em execução usando

    EXEC sp_trace_setstatus @ID, 0
    EXEC sp_trace_setstatus @ID, 2

Você pode carregar o rastreamento no profiler ou usar o ClearTrace (muito útil) ou carregá-lo em uma tabela assim:
SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)

Em seguida, você pode executar uma consulta para agregar os dados como este:
SELECT COUNT(*) AS TotalExecutions, 
    EventClass, CAST(TextData as nvarchar(2000))
 ,SUM(Duration) AS DurationTotal
 ,SUM(CPU) AS CPUTotal
 ,SUM(Reads) AS ReadsTotal
 ,SUM(Writes) AS WritesTotal
FROM TraceTable
GROUP BY EventClass, CAST(TextData as nvarchar(2000))
ORDER BY ReadsTotal DESC

Depois de identificar as consultas caras, você pode gerar e examinar os planos de execução reais.