2010-03-15 3 views
26

Sono nuovo in SQL Server Management Studio e mi chiedo: c'è un modo per vedere quali query sono state eseguite su un database?Come visualizzare le query eseguite in SQL Server Management Studio?

Nel monitor Attività, è presente un report "Query costose recenti" ma suppongo che non siano tutte le query poiché non vedo quelle che ho eseguito.

Sono in esecuzione SQL Server Express 2008 v 10.0.1600.22.

+0

Una risposta ora cancellato sotto i punti di [questo blog] (http://blog.sqlauthority.com/2008/01/03/sql -server-2005-last-ran-query-recently-ran-query /) che mostra una query SQL per mostrare le query SQL più recenti. –

risposta

18

Utilizzare SQL Profiler e utilizzare un filtro su di esso per ottenere le query più costose.

+2

Ho dimenticato di menzionare questo è SQL Server Express. Dalla lettura di altri post, sembra che Profiler non sia incluso in Express. È ancora corretto? – bsh152s

+0

Sì, è incluso solo nelle versioni Enterprise, Standard e Workgroup. Puoi confrontare questa e altre caratteristiche qui: http://www.microsoft.com/sqlserver/2008/en/us/editions-compare.aspx –

10

È necessario un SQL Profiler, che in realtà viene eseguito all'esterno di SQL Management Studio. Se si dispone di una versione a pagamento di SQL Server (come l'edizione per sviluppatori), dovrebbe essere inclusa in quella come un'altra utilità.

Se si utilizza una versione gratuita (SQL Express), sono disponibili profili gratuiti che è possibile scaricare. Ho usato il profiler di AnjLab (disponibile allo http://sites.google.com/site/sqlprofiler) e sembrava funzionare bene.

15

Utilizzare il monitor Attività. È l'ultima barra degli strumenti nella barra in alto. Ti mostrerà una lista di "Recent Expensive Queries". È possibile fare doppio clic su di essi per vedere il piano di esecuzione, ecc.

+4

+1 per dirci dove si trova la funzione altrimenti nascosta e come usarla. – cjbarth

3

Se si desidera che SSMS mantenga una cronologia delle query, utilizzare SSMS Tool Pack add on.

Se si desidera monitorare SQL Server per le query in esecuzione, utilizzare SQL PRofiler come già suggerito da altri.

3

Eseguire la seguente query da Management Studio su un processo in esecuzione:

DBCC inputbuffer(spid#) 

Ciò restituirà il codice SQL in corso di esecuzione contro il database per lo SPID fornito. Si noti che sono necessarie le autorizzazioni appropriate per eseguire questo comando.

Questo è meglio di eseguire una traccia poiché si rivolge a uno SPID specifico. È possibile vedere se è in esecuzione a lungo basato su CPUTime e DiskIO.

Esempio per ottenere i dettagli di SPID 64:

DBCC inputbuffer(64) 
4
 SELECT * FROM sys.dm_exec_sessions es 
    INNER JOIN sys.dm_exec_connections ec 
     ON es.session_id = ec.session_id 
    CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) where es.session_id=65 under see text contain... 
+0

si ottiene solo sql in esecuzione in ssms (sql management studio), ma non è possibile catturare sql in esecuzione su qualsiasi target di applicazione dotnet ado.net. Solo sql profiler può fare. –

15

Se volete vedere le query che sono già eseguito non c'è modo di default supportato per farlo. Ci sono alcune soluzioni alternative che puoi provare ma non aspettarti di trovare tutto.

Non sarà possibile visualizzare le istruzioni SELECT con certezza ma è possibile vedere altri comandi DML e DDL leggendo il log delle transazioni (presupponendo che il database sia in modalità di ripristino completo).

È possibile farlo utilizzando DBCC LOG o comandi fn_dblog o terza lettura log parti come ApexSQL Log (notare che strumento viene fornito con un prezzo)

Ora, se si pensa di dichiarazioni di audit che stanno per essere eseguiti in futuro quindi puoi usare SQL Profiler per catturare tutto.

3

di query più chiaro, il targeting query SQL Studio è:

SELECT text FROM sys.dm_exec_sessions es 
    INNER JOIN sys.dm_exec_connections ec 
     ON es.session_id = ec.session_id 
    CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) 
    where program_name like '%Query' 
+0

si ottiene solo sql in esecuzione in ssms (sql management studio), ma non è possibile rilevare sql in esecuzione in qualsiasi destinazione di applicazione dotnet ado.net se si modifica nome_programma. Solo sql profiler può fare. –