Apa cara terbaik untuk memantau permintaan yang sudah berjalan lama di SQL Server?


10

Saya harus menjalankan beberapa query yang sudah berjalan lama (membangun kembali indeks, memperbarui set besar data) untuk database saya. Apakah ada alternatif untuk menjalankan kueri di SQL Server Management Studio dan memeriksanya setiap jam atau lebih? Saya ingin diemailkan atau dikirimi pesan ketika sudah selesai, tetapi tidak tahu alat terbaik untuk ini.

Jawaban:


4

Mengikuti posting Gayus: Anda dapat membuat skrip .SQL yang melakukan apa yang Anda perlukan dengan menggunakan db di depan skrip -> membuat pekerjaan Agen SQL tipe sistem Operasi yang memanggil skrip:

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

Tambahkan langkah baru dan gunakan prosedur msdb.dbo.sp_send_dbmail untuk mengirim email. Fitur ini dapat dikustomisasi untuk menampilkan di dalam surat permintaan khusus dari tabel SQL untuk mengkonfirmasi pelaksanaan skrip ... misalnya dbcc showcontig dari indeks pembangunan kembali Anda.


1

Apakah Anda punya opsi untuk menggunakan pekerjaan SQL? Anda dapat melakukan notifikasi dan sejenisnya melalui sana. Sejauh mendapatkan notifikasi berselang, itu akan memerlukan beberapa kode dalam prosedur yang tersimpan dll


1

Ya, cukup gunakan xp_sendmail . Anda dapat mengirim pesan yang sudah ditentukan sebelumnya, atau hasil dari pernyataan SQL dengan mudah. Fitur ini telah tersedia sejak SQL Server 6.5, namun karena sudah usang di Denali - jika ini akan menjadi bagian permanen dari operasi Anda, maka Anda harus menggunakan Database Mail yang jauh lebih "perusahaan".


1

Saya selalu menulis pesan ke tabel "EventLog". Saat memproses data dalam jumlah besar, saya mengelola data dalam potongan, dan menulis pembaruan status ke EventLog setiap kali selesai.

Ketika saya ingin memeriksa kemajuan proses yang berjalan lama, saya cukup menanyakan tabel EventLog.

Contoh output:

-------------------
- Pembaruan Besar Saya -
-------------------
Dimulai: 2011-05-03 10:00:00

Catatan untuk Diproses: 1.000.000
Potongan: 200

--- Potongan 1 ---
Mencoba memperbarui MyTable
Catatan Diperbarui: 5000
Rekaman Tersisa: 995.000
Throughput: 4210 catatan per detik

--- Potongan 2--
Mencoba memperbarui MyTable
Catatan Diperbarui: 5000
Rekaman Tersisa: 990.000
Throughput: 3555 catatan per detik

--- Potongan 3--
dll.

Saya juga memiliki kolom dalam tabel EventLog untuk dilacak ketika pesan ditulis, proses apa yang menulis pesan, dll. Maaf karena tidak memasukkan info itu dalam contoh saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.