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

Waktu kueri habis saat dijalankan dari web, tetapi sangat cepat saat dijalankan dari SSMS

Jadi kode C# Anda mengirimkan kueri SQL ad hoc ke SQL Server, menggunakan metode apa? Sudahkah Anda mempertimbangkan untuk menggunakan prosedur tersimpan? Itu mungkin akan memastikan kinerja yang sama (setidaknya di mesin) terlepas dari siapa yang menyebutnya.

Mengapa? Pengaturan ARITHABORT adalah salah satu hal yang dilihat pengoptimal saat menentukan cara menjalankan kueri Anda (lebih khusus lagi, untuk pencocokan paket). Ada kemungkinan bahwa paket dalam cache memiliki pengaturan yang sama dengan SSMS, jadi paket tersebut menggunakan paket yang di-cache, tetapi dengan pengaturan yang berlawanan, kode C# Anda memaksa kompilasi ulang (atau mungkin Anda benar-benar BAD plan di cache), yang tentu saja dapat merusak kinerja dalam banyak kasus.

Jika Anda sudah memanggil prosedur tersimpan (Anda tidak memposting kueri Anda, meskipun saya pikir Anda bermaksud demikian), Anda dapat mencoba menambahkan OPTION (RECOMPILE) ke kueri (atau kueri) yang menyinggung dalam prosedur tersimpan. Ini berarti pernyataan-pernyataan itu akan selalu dikompilasi ulang, tetapi itu bisa mencegah penggunaan rencana buruk yang tampaknya Anda lakukan. Pilihan lainnya adalah memastikan bahwa ketika prosedur tersimpan dikompilasi, batch dijalankan dengan SET ARITHABORT ON.

Akhirnya, Anda sepertinya bertanya bagaimana Anda dapat mengubah pengaturan ARITHABORT di SSMS. Saya pikir yang ingin Anda tanyakan adalah bagaimana Anda dapat memaksa pengaturan ARITHABORT dalam kode Anda. Jika Anda memutuskan untuk terus mengirim SQL ad hoc dari aplikasi C# Anda, tentu saja Anda dapat mengirim perintah sebagai teks yang memiliki beberapa pernyataan yang dipisahkan oleh titik koma, misalnya:

SET ARITHABORT ON; SELECT ...

Untuk info lebih lanjut tentang mengapa masalah ini terjadi, lihat artikel hebat Erland Sommarskog:

  • Aplikasi Lambat, SSMS Cepat? Memahami Misteri Performa


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeks berbasis fungsi di SQL Server

  2. Bagaimana cara meningkatkan kinerja untuk pemfilteran datetime di SQL Server?

  3. Bagaimana menjalankan prosedur tersimpan di sql server setiap jam?

  4. SQL Server ANSI_NULLS Dijelaskan

  5. Perbarui Data melalui Fungsi Bernilai Tabel di SQL Server