Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menyelesaikan Prestasi Prosedur Tersimpan Yang Lemah Disebabkan oleh Penghidu Parameter dalam Pelayan SQL?

Bagaimanakah Saya Boleh Menyelesaikan Prestasi Prosedur Tersimpan Yang Lemah Disebabkan oleh Penghidu Parameter dalam Pelayan SQL?

Barbara Streisand
Barbara Streisandasal
2024-12-31 15:58:17158semak imbas

How Can I Resolve Poor Stored Procedure Performance Caused by Parameter Sniffing in SQL Server?

Prestasi Prosedur Tersimpan Yang Lemah Disebabkan Penghidu Parameter

Anda menghadapi masalah prestasi dengan prosedur tersimpan di mana parameter input (@MyDate) boleh NULL atau tarikh. Apabila prosedur pertama kali disusun dengan @MyDate sebagai NULL, pelaksanaan berikutnya menunjukkan prestasi yang lemah tanpa mengira nilai parameter sebenar.

Tingkah Laku Menghidu Parameter

SQL Server melaksanakan "parameter menghidu" untuk mengoptimumkan rancangan pelaksanaan berdasarkan nilai parameter semasa penyusunan. Ia menangkap nilai ini dalam cache prosedur dan menggunakannya untuk menganggarkan pelaksanaan masa hadapan.

Dalam kes ini, menghidu parameter menyebabkan masalah kerana ia menjana pelan pelaksanaan suboptimum untuk semua nilai parameter apabila @MyDate adalah NULL pada mulanya. Walaupun @MyDate ditetapkan secara eksplisit kepada NULL pada masa pelaksanaan, pelan cache kekal.

Melumpuhkan Penghidu Parameter

Anda telah menghadapi simptom klasik "penghidu parameter menjadi buruk," di mana pelan yang dijana untuk nilai parameter awal digunakan walaupun apabila ia tidak mewakili nilai sebenar hukuman mati. Untuk melumpuhkan penghidu parameter, anda memalsukan parameter dengan @MyDate_Copy.

Punca Punca dan Penyelesaian

Isu ini berpunca daripada pepijat SQL Server 2005 yang menghidu parameter boleh melakukan salah laku. Dalam SQL Server 2008, anda boleh mengurangkan isu ini dengan menggunakan pilihan OPTIMIZE FOR UNKNOWN, yang memaksa pengoptimum untuk mempertimbangkan semua nilai yang mungkin untuk parameter semasa penyusunan pelan.

Cerapan Tambahan

  • Predikat yang mempengaruhi rancangan ialah ungkapan kompleks yang boleh menyebabkan rancangan perubahan.
  • Parameter penyamaran boleh membantu mengelakkan isu menghidu parameter.
  • Dalam kes yang teruk, menggunakan OPTIMIZE FOR UNKNOWN boleh memaksa pengoptimum untuk mempertimbangkan semua nilai parameter.
  • Rujuk dokumentasi Microsoft untuk butiran lanjut dan kemas kini tentang tingkah laku menghidu parameter.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Prestasi Prosedur Tersimpan Yang Lemah Disebabkan oleh Penghidu Parameter dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn