Trova tutte le query eseguite di recente su un database


21

[Sono un programmatore T-SQL di livello principiante]
[..e spero di trovarmi sul sito giusto per lo scambio di stack]

Vorrei ottenere un elenco di tutte le query che ho eseguito (per lo meno, quelle eseguite oggi dalla mattina). Devo fare una relazione sui tempi di esecuzione delle query.

La ricerca online non mi ha fornito molte informazioni utili. L'unica domanda che ho trovato online che mi è sembrata abbastanza vicina è

SELECT
    deqs.last_execution_time AS [Time], 
    dest.TEXT AS [Query]
 FROM 
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY 
    deqs.last_execution_time DESC

Questa query ha restituito alcuni risultati strani (molti dei quali erano un sacco di sprocs). Inoltre, tutti questi risultati mostrano query eseguite da oggi pomeriggio (ho bisogno di domande dalla mattina).

Non sono riuscito a trovare nulla nelle domande precedenti (se una domanda simile è già stata posta, per favore indicamelo).

Ho visto alcuni suggerimenti su SQL Profiler, ma immagino che il profiler mi avrebbe aiutato solo se avessi già avviato la traccia (correggimi se sbaglio).

Qualcuno può suggerirmi come dovrei andare per ottenere un elenco di tutte le query che sono state eseguite sul database dalla mattina (compresi i tempi di esecuzione della query) ..

[Sarebbe utile (non un requisito) se posso anche ottenere in qualche modo il nome utente dell'utente che ha eseguito la query]

Risposte:


12

Questa query ha restituito alcuni risultati strani (molti dei quali erano un sacco di sprocs). Inoltre, tutti questi risultati mostrano query eseguite da oggi pomeriggio (ho bisogno di domande dalla mattina).

Questo perché si sta cercando nella cache delle procedure e i piani utilizzati per la mattinata potrebbero non vivere più lì (a causa della pressione della memoria, riavvio del server / istanza, svuotamento manuale della cache dei proc, ecc.).

Il vero modo per ottenere le query eseguite su un'istanza (o più specificamente su un database) sarebbe creare una traccia SQL o una sessione di eventi estesi. Creato correttamente, uno di questi ti darà le informazioni che stai cercando.

Se stai cercando statistiche di esecuzione di questa mattina e solo di questa mattina (ovvero impostare le implementazioni di monitoraggio di cui sopra come un'attività proattiva e da fare la prossima volta non è sufficiente), a meno che non sia già stato creato non ci sarà alcun modo nativamente per ottenere queste informazioni.

Per riferimento futuro, iniziare con una traccia SQL che acquisisce l' evento SQL: StmtCompleted . In XE sarebbe l' sql_statement_completedevento.

A mio avviso, invece di continuare la ricerca di resti di statistiche sull'esecuzione di query, inizierei a dedicare tempo a capire come rieseguire il carico di lavoro che si sta tentando di misurare. Ma questa volta, impostare la traccia / monitoraggio corretti.


Posso filtrare per SQL: StmtCompleted Data Columns?
Kiquenet,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.