Ketidaksamaan Prestasi dengan Prosedur Tersimpan: SqlCommand lwn. SSMS
Masa pelaksanaan prosedur tersimpan boleh berbeza dengan ketara antara SQL Server Management Studio ( SSMS) dan System.Data.SqlClient.SqlCommand, walaupun tanpa parameter menghidu. Punca punca mungkin terletak pada pilihan SET berbeza yang didayakan oleh setiap persekitaran pelaksanaan.
Dengan menggunakan SQL Server Profiler, didapati bahawa SSMS melaksanakan beberapa arahan SET yang ditiadakan oleh Penyedia Data Pelanggan .NET Sql. Pilihan SET ini boleh mempengaruhi pelan pertanyaan dan prestasi. Satu pilihan SET penting yang muncul sebagai punca dalam kes ini ialah:
SET ARITHABORT ON
Apabila pilihan SET ini didayakan, pertanyaan dengan operasi aritmetik yang berpotensi mengakibatkan limpahan, pembahagian dengan sifar atau keadaan luar biasa lain akan berhenti sebelum waktunya. Tingkah laku ini berbeza daripada tetapan lalai SET ARITHABORT OFF, yang membenarkan pengecualian berlaku.
Akibatnya, pelan pelaksanaan dan prestasi prosedur tersimpan boleh dipengaruhi oleh pilihan SET ARITHABORT. Jika operasi aritmetik dalam prosedur tersimpan tertakluk kepada tetapan ini, ia boleh menyebabkan perbezaan dalam masa pelaksanaan antara SSMS dan SqlCommand.
Untuk mengurangkan isu ini, adalah dinasihatkan untuk menyemak dengan teliti pilihan SET yang digunakan oleh aplikasi yang menyambung ke SQL Server. Dengan menggunakan pilihan SET yang sama dalam SqlCommand seperti yang digunakan oleh SSMS, ketidakkonsistenan prestasi boleh dielakkan. Selain itu, memanfaatkan SQL Server Profiler untuk mengenal pasti pilihan SET aktif ialah teknik penyahpepijatan yang berharga.
Faktor lain, seperti parameter rentetan sambungan, gelagat transaksi dan tetapan MARS (Multiple Active Result Sets), juga boleh memberi kesan kepada prestasi dan harus dianggap sebagai faktor penyumbang yang berpotensi.
Atas ialah kandungan terperinci Mengapa Prosedur Tersimpan Saya Berjalan Lebih Pantas dalam SSMS Daripada dalam SqlCommand?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!