Menggunakan SQL Profiler pada database yang sedang diproduksi

28

Sebagai pengembang, saya sering menggunakan SQL Profiler. Ini alat debugging yang baik, baik untuk melacak apa yang dilakukan kode saya dan untuk menganalisis masalah kinerja.

Tapi saya selalu menggunakannya di lingkungan pengembangan saya , dan dengan cara yang sangat terkontrol.

  • Mulai aplikasi saya, dan masuk ke keadaan tertentu
  • Mulai jejak pada profiler
  • Lakukan urutan tindakan tertentu pada aplikasi saya
  • Hentikan jejak dan periksa hasilnya.

Dapatkah SQL Profiler secara praktis digunakan dalam lingkungan dalam produksi?

Kekhawatiran pertama saya adalah itu akan menurunkan kinerja.

Kekhawatiran kedua saya adalah bahwa, karena sedang dalam produksi, Anda tidak memicu tindakan yang menarik itu sendiri. Anda harus membiarkan profiler berjalan untuk waktu yang lama kemudian menganalisis hasilnya. Apakah hasil yang ditetapkan menjadi terlalu sulit? (Mengambil terlalu banyak ruang disk dan menjadi terlalu sulit untuk diminta).

Adakah yang menggunakan SQL Profiler dalam produksi?

Andrew Shepherd
sumber
1
Jika Anda tahu apa yang Anda cari, maka Anda bahkan mungkin tidak perlu melacak, misalnya dba.stackexchange.com/questions/756/…
Gaius

Jawaban:

19

Menggunakan Sql Server Profiler (alat GUI) untuk melacak server produksi bukanlah ide yang baik. Tapi itu tergantung pada beban. Gunakan penelusuran sql sisi-server (lihat prosedur sp_trace_XXX ) sebagai ganti. Juga saya telah menemukan artikel:

Dampak Kinerja: Pelacakan Profiler vs. Pelacakan SQL Sisi Server ,

Mengotomatiskan Pelacakan Sisi Server di SQL Server

Hindari Menyebabkan Masalah dengan Profiler

mungkin itu akan tertarik dan bermanfaat.

Book Online mengatakan:

  • Jalankan Profiler dari jarak jauh, bukan langsung di server
  • Hindari memasukkan peristiwa yang sering terjadi (mis. Kunci: Didapat) kecuali benar-benar diperlukan
  • Hanya sertakan kelas acara yang diperlukan
  • Tentukan filter pembatas untuk mengurangi jumlah acara
  • Hindari data yang berlebihan (mis. SQL: BatchStarting dan SQL: BatchCompleted)
  • Hindari menjalankan jejak besar dengan Profiler; pertimbangkan SQL Trace sisi-server sebagai gantinya
  • Batasi ukuran file jejak sisi server dan kelola penggunaan ruang
garik
sumber
1
Untuk meminimalkan dampak filter sebaik mungkin dan lacak ke file melalui perintah sp_trace. GUI yang berjalan dari jarak jauh akan menimbulkan dampak paling besar tetapi Anda dapat menggunakannya untuk membuat skrip dengan semua filter Anda yang bisa Anda modifikasi dengan cepat untuk dibuang ke file. Atur # file dan ukuran file dengan tepat.
AndrewSQL
21

Saya menggunakan SQL Profiler terhadap produksi sepanjang waktu. Ketika dilakukan dengan benar (memfilter sehingga Anda mendapatkan kembali sejumlah kecil data) terhadap server, risikonya minimal. Menelusuri semuanya akan sia-sia.

mrdenny
sumber
7
  1. Ya, tindakan pemantauan akan membutuhkan beberapa sumber daya. Menjalankannya pada server yang kelebihan beban bisa membunuhnya.

  2. Anda akan benar-benar memonitor beban kehidupan nyata: tindakan Anda bisa hilang dalam kebisingan dari beban ini.

Terkadang kami menjalankannya pada produksi. Terutama dengan filter teks untuk kode tertentu, atau dengan filter CPU / durasi untuk menjebak pertanyaan yang berjalan lebih lama. Dan kami tidak mencoba menangkap rencana eksekusi XML atau semacamnya

Kuncinya adalah mengetahui apa yang Anda cari: kami tidak cenderung membiarkannya berjalan dan menjebak semuanya.

Dalam hal ini, jika Anda ingin melihat hasil dari beberapa tindakan dapat Anda lakukan di luar jam?

gbn
sumber
2

Profiler akan selalu memperkenalkan dampak kinerja.

Jika Anda menggunakan SQL Server 2008R2 + Anda dapat menggunakan acara yang diperpanjang. Ini memberikan banyak informasi yang Anda lihat di profiler dengan sebagian kecil dari hit kinerja.

Pengenalan buku online http://technet.microsoft.com/en-us/library/bb630354(v=sql.105).aspx

Fitur ini menerima pembaruan besar dalam SQL Server 2012 yang sekarang menyertakan GUI di SSMS.

James Anderson
sumber