Temukan semua kueri yang dieksekusi baru-baru ini di database

21

[Saya adalah Pemrogram T-SQL tingkat pemula]
[..dan mudah-mudahan saya ada di situs pertukaran tumpukan yang tepat]

Saya ingin mendapatkan daftar semua pertanyaan yang saya eksekusi (paling tidak, yang saya eksekusi hari ini sejak pagi). Saya perlu membuat laporan tentang waktu pelaksanaan kueri.

Pencarian online tidak menghasilkan saya banyak info berguna. Satu-satunya pertanyaan yang saya temukan online yang sepertinya cukup dekat adalah

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

Kueri ini mengembalikan beberapa hasil aneh (sebagian besar adalah sekelompok sprocs). Selain itu, semua hasil ini menunjukkan kueri yang dieksekusi sejak sore hari ini (saya perlu pertanyaan dari pagi).

Saya tidak dapat menemukan apa pun di pertanyaan sebelumnya (jika pertanyaan serupa sudah diajukan, harap tunjukkan saya ke sana).

Saya melihat beberapa saran tentang SQL Profiler, tapi saya kira profiler akan membantu saya hanya jika saya sudah memulai pelacakan (koreksi saya jika saya salah).

Dapatkah seseorang menyarankan saya bagaimana saya harus pergi untuk mendapatkan daftar semua pertanyaan yang telah dieksekusi pada database sejak pagi (termasuk waktu eksekusi permintaan) ..

[Akan sangat membantu (bukan keharusan) jika saya juga bisa mendapatkan nama pengguna dari pengguna yang menjalankan kueri]

Prashanth Tilleti
sumber

Jawaban:

12

Kueri ini mengembalikan beberapa hasil aneh (sebagian besar adalah sekelompok sprocs). Selain itu, semua hasil ini menampilkan kueri yang dieksekusi sejak siang hari ini (saya perlu kueri dari pagi).

Itu karena Anda mencari di cache prosedur, dan paket yang digunakan untuk pagi hari mungkin tidak lagi tinggal di sana (karena tekanan memori, server / mulai ulang, secara manual menghapus cache proc, dll.).

Cara nyata untuk mengeksekusi kueri terhadap instance (atau lebih khusus database) adalah dengan membuat SQL Trace atau sesi Acara yang Diperpanjang. Dibuat dengan benar, salah satu dari ini akan memberi Anda informasi yang Anda cari.

Jika Anda mencari statistik pelaksanaan pagi ini dan hanya pagi ini (yaitu menyiapkan implementasi pemantauan yang disebutkan sebelumnya sebagai tugas proaktif dan yang harus dilakukan di waktu mendatang tidak mencukupi), maka kecuali yang sudah dibuat tidak akan ada cara native untuk mendapatkan informasi ini.

Untuk referensi di masa mendatang, mulailah dengan SQL Trace yang menangkap peristiwa SQL: StmtCompleted . Di XE akan menjadi sql_statement_completedacara.

Menurut pendapat saya, alih-alih melanjutkan pencarian Anda untuk sisa-sisa statistik eksekusi kueri, saya akan mulai menghabiskan waktu untuk mencari tahu bagaimana mengeksekusi kembali beban kerja yang Anda coba ukur. Tapi kali ini sebelum itu, atur penelusuran / pemantauan yang tepat.

Thomas Stringer
sumber
Bisakah saya memfilter dengan SQL: StmtCompleted Data Columns?
Kiquenet