Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pada titik tertentu dalam karir Anda dengan SQL Server, apakah parameter sniffing hanya melompat keluar dan menyerang?

Bukan jawaban yang tepat, tetapi saya akan membagikan pengalaman saya.

Mengendus parameter membutuhkan beberapa tahun SQL Server untuk datang dan menggigit saya, ketika saya kembali ke Developer DBA setelah pindah ke sebagian besar pekerjaan prod DBA. Saya lebih mengerti tentang mesin, cara kerja SQL, apa yang terbaik diserahkan kepada klien, dll. dan saya adalah pembuat kode SQL yang lebih baik.

Misalnya, SQL dinamis atau CURSOR atau sekadar kode SQL yang buruk mungkin tidak akan pernah mengalami parameter sniffing. Tetapi lebih baik mengatur pemrograman atau bagaimana menghindari SQL dinamis atau SQL yang lebih elegan lebih mungkin.

Saya memperhatikannya untuk kode pencarian yang kompleks (banyak persyaratan) dan laporan kompleks di mana default parameter memengaruhi rencana. Ketika saya melihat bagaimana pengembang yang kurang berpengalaman akan menulis kode ini, maka kode ini tidak akan mengalami sniffing parameter.

Bagaimanapun, saya lebih suka parameter masking daripada WITH RECOMPILE. Memperbarui statistik atau indeks memaksa kompilasi ulang. Tapi mengapa mengkompilasi ulang sepanjang waktu? Saya telah menjawab di tempat lain untuk salah satu pertanyaan Anda dengan tautan yang menyebutkan parameter diendus selama kompilasi, jadi saya juga tidak percaya.

Penyembunyian parameter adalah overhead, ya, tetapi memungkinkan pengoptimal untuk mengevaluasi kueri kasus per kasus, daripada kompilasi ulang selimut. Terutama dengan kompilasi ulang tingkat pernyataan SQL Server 2005

OPTIMIZE FOR UNKNOWN di SQL Server 2008 juga tampaknya melakukan hal yang persis sama dengan masking. Rekan SQL Server MVP saya dan saya menghabiskan beberapa waktu untuk menyelidiki dan sampai pada kesimpulan ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ambil Nama Parameter &Nilai Saat Ini Secara Dinamis Di Dalam Prosedur Tersimpan T-SQL

  2. SQL Server Versi Terbaru, Edisi &Riwayat SQL Server

  3. Konflik antara sql server 2008 r2 dan 2012

  4. TSQL Menggabungkan Beberapa Baris Menjadi Satu Baris

  5. Mengapa gabungan kiri saya tidak mengembalikan nol?