Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Fitur usang untuk dikeluarkan dari kotak peralatan Anda – Bagian 2

Dalam posting terakhir saya, saya menggambarkan satu alasan Anda harus berhenti menggunakan tabel sistem usang seperti sysprocesses . Ini bukan karena alasan kinerja, secara langsung, atau sekadar mengikuti praktik terbaik yang didokumentasikan Microsoft, tetapi lebih berkisar pada keputusan yang mungkin Anda buat saat Anda hanya memiliki akses ke beberapa data.

Kali ini, saya ingin berbicara tentang fitur yang disertakan dengan alat klien SQL Server yang tidak boleh kita gunakan akhir-akhir ini – bukan hanya karena sudah usang tetapi, yang lebih penting, karena berpotensi mematikan server sepenuhnya:

SQL Server Profiler

Sejak SQL Server 2012 (dan, pada tingkat yang jauh lebih rendah, sejak SQL Server 2008), solusi paling lengkap dan fleksibel untuk memantau peristiwa pada instans SQL Server adalah Peristiwa yang Diperpanjang. Di sisi lain, sejak pertama kali ditemukan (kira-kira tepat pada saat saya memulai karir saya), SQL Server Profiler telah menjadi salah satu cara paling produktif untuk secara tidak sengaja membuat server bertekuk lutut.

Belum lama ini, hal seperti ini terjadi pada kami. Seorang pengembang membuat perubahan pada aplikasi mereka untuk mengurangi jumlah perjalanan pulang pergi yang mereka lakukan. Mereka menjalankan aplikasi secara lokal dan di lingkungan pengembangan kami, menggunakan Profiler dengan jejak yang difilter, untuk mengonfirmasi bahwa perubahan mereka berfungsi seperti yang diharapkan. Biarkan saya mengingatkan Anda pada titik ini bahwa dokumentasi resmi untuk SQL Server Profiler menyertakan peringatan berikut:

SQL Trace dan SQL Server Profiler tidak digunakan lagi. Ruang nama Microsoft.SqlServer.Management.Trace yang berisi objek Microsoft SQL Server Trace dan Replay juga tidak digunakan lagi. Fitur ini akan dihapus dalam versi Microsoft SQL Server yang akan datang. Hindari penggunaan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.

Bagaimanapun, ketika mereka menerapkan versi baru aplikasi mereka ke produksi, dan menargetkan server produksi dengan jejak terfilter yang sama, itu tidak berjalan dengan baik. Filter wildcard mereka pada nama aplikasi tidak memperhitungkan aplikasi lain (bernama serupa) yang juga terhubung ke server ini, dan mereka segera mulai menangkap lebih banyak info daripada yang bisa ditangani oleh jendela Profiler mereka yang terbuka. Hal ini mengakibatkan peningkatan yang sangat besar dalam waktu koneksi untuk semua pengguna dan aplikasi yang terhubung ke instans tersebut. Akan meremehkan untuk mengatakan bahwa keluhan telah diajukan.

Ketika pelakunya ditentukan, dan kami mendapat tanggapan dari pengembang, Anda dapat melihat bahwa waktu koneksi kembali normal segera setelah mereka menghentikan jejak Profiler mereka (klik untuk memperbesar):

Bencana mini SQL Server Profiler

Ini jelas merupakan skenario di mana pernyataan lama "bekerja di mesin saya" tidak berarti itu akan bekerja dengan baik pada server produksi yang sibuk. Dan insiden ini telah menyebabkan percakapan aktif seputar modifikasi pemicu logon yang sudah ada di semua server di lingkungan kita untuk sekadar memblokir nama aplikasi yang diteruskan Profiler dalam string koneksinya.

Mungkin ini bukan masalah Profiler. (Tapi memang begitu.)

Saya di sini bukan untuk menyarankan bahwa alat pemantauan lain, termasuk Acara yang Diperpanjang, tidak mungkin digunakan secara tidak tepat untuk menjatuhkan server dengan cara yang serupa (atau lebih buruk!). Ada banyak peluang untuk secara tidak sengaja memengaruhi instance SQL Server, dengan cara yang sangat merugikan, tanpa menyentuh SQL Server Profiler.

Tetapi Profiler terkenal dengan jenis gejala ini karena cara mengkonsumsi data. Ini adalah antarmuka pengguna dengan kisi yang menyajikan baris baru saat menerimanya; sayangnya, itu membuat SQL Server menunggu sementara itu membuat mereka sebelum mengizinkan SQL Server untuk mengirimkan lebih banyak baris. Perilaku ini mirip dengan bagaimana SQL Server Management Studio dapat memperlambat kueri dan menyebabkan ASYNC_NETWORK_IO tinggi menunggu saat mencoba membuat sejumlah besar output ke gridnya sendiri. Itu adalah penyederhanaan (dan tidak menjadi bingung dengan cara yang mendasari SQL Trace dapat dibuat untuk berperilaku, yang Greg Gonzalez (@SQLsensei) menjelaskan dalam "Jangan Takut Jejak"), tetapi itulah yang mengarah ke jenis skenario yang ditunjukkan di atas:kemacetan itu memiliki efek berjenjang pada proses lain yang mencoba melakukan apa pun di jalur kode yang sama dengan apa yang Anda lacak (termasuk mencoba membuat koneksi).

Takut dengan Acara yang Diperpanjang?

Jangan. Sudah saatnya kita semua membuang Profiler dan menerima masa kini . Tidak ada kekurangan tutorial dan panduan di luar sana, termasuk QuickStart milik Microsoft sendiri dan beberapa artikel di sini di situs ini.

Jika Anda memiliki jejak yang Anda andalkan, Jonathan Kehayias (@SQLPoolBoy) memiliki skrip yang sangat berguna untuk mengonversi jejak yang ada menjadi Acara yang Diperpanjang. Anda masih dapat dengan bebas mengonfigurasi jejak asli dengan UI Profiler, jika Anda merasa paling nyaman di sana; tolong lakukan saja tanpa terhubung ke server produksi. Anda dapat membaca tentang skrip tersebut di sini dan melihat beberapa artikel Acara Perpanjangan Jonathan lainnya di sini.

Jika Anda mengalami kesulitan dengan pengalaman pengguna, Anda tidak sendirian, tetapi ada beberapa jawaban:

  • Erin Stellato (@erinstellato) telah lama menjadi pendukung spektakuler untuk Acara yang Diperpanjang, dan sering bertanya-tanya mengapa orang enggan melepaskan Profiler dan SQL Trace secara umum. Dia memiliki beberapa wawasan (dan mengilhami banyak komentar) di posnya tahun 2016, "Mengapa ANDA menghindari Acara yang Diperpanjang?"; mungkin ada beberapa wawasan di sana tentang apakah alasan Anda untuk bertahan masih (as) berlaku pada tahun 2021.
  • Ada XEvent Profiler yang dibangun ke dalam versi SSMS modern, dengan ekstensi yang setara untuk Azure Data Studio. Meskipun, secara membingungkan, mereka menyebut ekstensi ini – dari semua hal yang dapat dibayangkan – SQL Server Profiler . Erin juga memiliki beberapa pemikiran tentang pilihan itu.
  • Erik Darling (@erikdarlingdata) telah membuat sp_HumanEvents untuk menghilangkan rasa sakit saat beralih ke Acara yang Diperpanjang. Salah satu orang "tetap pada intinya" favorit saya, Erik menjelaskan sp_HumanEvents sebagai berikut:"Jika Anda menginginkan cara yang mudah untuk membuat profil metrik kueri, statistik tunggu, pemblokiran, kompilasi, atau kompilasi ulang dengan Acara yang Diperpanjang, ini adalah unicorn Anda."

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu Kursor dalam SQL dan bagaimana mengimplementasikannya?

  2. Blog Basis Data Teratas untuk Diikuti

  3. Beberapa Paket untuk Kueri Identik

  4. Mencadangkan Database SQL dengan VDP Advanced SQL Agent

  5. Rahasia Kotor dari Ekspresi KASUS