Qual è il modo migliore per monitorare query a esecuzione prolungata in SQL Server?


10

Devo eseguire alcune query di lunga durata (ricostruzione di indici, aggiornamento di grandi set di dati) per il mio database. Esiste un'alternativa all'esecuzione della query in SQL Server Management Studio e al controllo ogni ora? Vorrei ricevere un'email o inviare un messaggio al termine, ma non conosco lo strumento migliore per questo.

Risposte:


4

A seguito di Gaius post: è possibile creare uno script .SQL che fa ciò di cui si ha bisogno con l'uso di db davanti allo script -> creare un processo SQL Agent di tipo Sistema operativo che chiama lo script:

sqlcmd -E -S SERVERNAME -i "c: \ YOURSCRIPT.sql" -o "C: \ YOURSCRIPT_LOG.log"

Aggiungere un nuovo passaggio e utilizzare la procedura msdb.dbo.sp_send_dbmail per inviare e-mail. Questa funzione può essere personalizzata per visualizzare all'interno della posta una query specifica da tabelle SQL per confermare l'esecuzione dello script ... ad esempio dbcc showcontig degli indici di ricostruzione.


1

Hai la possibilità di usare lavori SQL? Puoi fare notifiche e simili da lì. Per quanto riguarda le notifiche intermittenti, ciò richiederebbe un po 'di codice all'interno delle procedure memorizzate ecc.


1

Sì, basta usare xp_sendmail . È possibile inviare un messaggio preimpostato o i risultati di un'istruzione SQL altrettanto facilmente. Questa funzionalità è disponibile da SQL Server 6.5, tuttavia dovrebbe essere obsoleta in Denali - se questa sarà una parte permanente dell'operazione, è necessario utilizzare Posta elettronica database che è molto più "aziendale".


1

Scrivo sempre messaggi su una tabella "EventLog". Quando elaboro grandi quantità di dati, gestisco i dati in blocchi e scrivo gli aggiornamenti di stato su EventLog dopo ogni blocco.

Quando voglio verificare lo stato di avanzamento del processo di lunga durata, eseguo semplicemente una query nella tabella EventLog.

Esempio di output:

-------------------
- Il mio grande aggiornamento -
-------------------
Iniziato: 2011-05-03 10:00:00

Record da elaborare: 1.000.000
Pezzi: 200

--- Chunk 1 ---
Tentativo di aggiornare MyTable
Record aggiornati: 5000
Record rimanenti: 995.000
Throughput: 4210 record al secondo

--- Chunk 2--
Tentativo di aggiornare MyTable
Record aggiornati: 5000
Record rimanenti: 990.000
Throughput: 3555 record al secondo

--- Chunk 3--
eccetera.

Ho anche delle colonne nella tabella EventLog per tracciare quando il messaggio è stato scritto, quale processo ha scritto il messaggio, ecc. Ci scusiamo per non aver incluso quelle informazioni nel mio esempio.

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.