Dilema Pengoptimuman Pertanyaan: SQL Lambat dalam ASP.NET Berbanding SSMS
Dalam isu pengoptimuman pertanyaan yang menarik, pembangun telah bingung dengan perbezaan prestasi yang ketara antara pertanyaan yang dilaksanakan dalam SSMS dan pertanyaan yang sama dijalankan pada mereka laman web ASP.NET. Pertanyaan pada mulanya memaparkan prestasi yang memuaskan di tapak web selepas pengubahsuaian, hanya untuk kembali kepada kelesuan pada hari berikutnya.
Untuk menyediakan konteks lanjut, pertanyaan yang dipersoalkan melibatkan gabungan dan subkueri yang kompleks, termasuk penapisan dinamik berdasarkan ID pelanggan parameter (@customerID). Ia mendapatkan semula data daripada berbilang jadual, termasuk Product, Comppunix_ProductMMY, Comppunix_CustomerMMY, Category dan ProductCategory.
Anehnya, pertanyaan yang sama ini beroperasi dengan sempurna pada dua tapak web lain, yang menunjukkan bahawa isu itu disetempatkan ke tapak web khusus ini. Satu-satunya faktor yang membezakan ialah tapak web yang sedang bergelut menjadi tuan rumah bilangan produk yang jauh lebih besar (54,000) berbanding yang lain. Semua tapak web dan pangkalan data berada pada pelayan fizikal yang sama.
Punca Punca: Parameter Sniffing
Setelah disiasat, kemungkinan besar isu ini berpunca daripada parameter sniffing, a perangkap prestasi biasa dalam SQL Server. Menghidu parameter melibatkan operasi pengoptimuman di mana SQL Server menganalisis pelaksanaan pertama pertanyaan dan menentukan pelan pelaksanaan yang sesuai berdasarkan nilai parameter yang ditemui.
Walau bagaimanapun, jika nilai parameter berubah semasa pelaksanaan berikutnya, pelan pelaksanaan mungkin tidak menyesuaikan diri dengan sewajarnya, mengakibatkan prestasi tidak optimum. Dalam kes pertanyaan ini, ada kemungkinan pelaksanaan awal dalam SSMS menggunakan nilai parameter yang berbeza daripada dalam ASP.NET, yang membawa kepada rancangan pelaksanaan dan hasil prestasi yang berbeza.
Strategi Mitigasi
Untuk menangani isu ini, pembangun boleh mempertimbangkan untuk melaksanakan strategi yang mengurangkan penghidu parameter, seperti sebagai:
Dengan melaksanakan ini teknik, pembangun boleh mengatasi isu sniffing parameter dan memastikan prestasi yang konsisten untuk pertanyaan mereka merentas SSMS dan ASP.NET.
Atas ialah kandungan terperinci Mengapa pertanyaan SQL saya pantas dalam SSMS tetapi lambat dalam ASP.NET, dan bagaimanakah saya boleh membetulkan perbezaan prestasi ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!