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

Waktu kueri habis dari aplikasi web tetapi berjalan dengan baik dari studio manajemen

Inilah yang saya pelajari sejauh ini dari penelitian saya.

.NET mengirimkan pengaturan koneksi yang tidak sama dengan yang Anda dapatkan saat masuk ke studio manajemen. Inilah yang Anda lihat jika Anda mengendus koneksi dengan Sql Profiler:

-- network protocol: TCP/IP  
set quoted_identifier off  
set arithabort off  
set numeric_roundabort off  
set ansi_warnings on  
set ansi_padding on  
set ansi_nulls off  
set concat_null_yields_null on  
set cursor_close_on_commit off  
set implicit_transactions off  
set language us_english  
set dateformat mdy  
set datefirst 7  
set transaction isolation level read committed  

Saya sekarang menempelkan pengaturan tersebut di atas setiap kueri yang saya jalankan saat masuk ke server sql, untuk memastikan pengaturannya sama.

Untuk kasus ini, saya mencoba setiap pengaturan satu per satu, setelah memutuskan dan menghubungkan kembali, dan menemukan bahwa mengubah arithabort dari mati ke aktif mengurangi kueri masalah dari 90 detik menjadi 1 detik.

Penjelasan yang paling mungkin terkait dengan parameter sniffing, yang merupakan teknik yang digunakan Sql Server untuk memilih apa yang dianggapnya sebagai rencana kueri yang paling efektif. Saat Anda mengubah salah satu setelan koneksi, pengoptimal kueri mungkin memilih paket yang berbeda, dan dalam kasus ini, tampaknya memilih paket yang buruk.

Tapi saya tidak sepenuhnya yakin akan hal ini. Saya telah mencoba membandingkan rencana kueri yang sebenarnya setelah mengubah pengaturan ini dan saya belum melihat perbedaan yang menunjukkan perubahan apa pun.

Apakah ada hal lain tentang pengaturan arithabort yang mungkin menyebabkan kueri berjalan lambat dalam beberapa kasus?

Solusinya tampak sederhana:Letakkan saja set arithabort di bagian atas prosedur tersimpan. Tapi ini bisa menyebabkan masalah sebaliknya:mengubah parameter kueri dan tiba-tiba berjalan lebih cepat dengan 'mati' daripada 'aktif'.

Untuk saat ini saya menjalankan prosedur 'dengan kompilasi ulang' untuk memastikan paket dibuat ulang setiap kali. Tidak masalah untuk laporan khusus ini, karena mungkin perlu satu detik untuk mengkompilasi ulang, dan ini tidak terlalu terlihat pada laporan yang membutuhkan 1-10 detik untuk kembali (ini monster).

Namun ini bukan opsi untuk kueri lain yang berjalan lebih sering dan harus kembali secepat mungkin, hanya dalam beberapa milidetik.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .NET 4:Cara mengkonfigurasi file EDMX di rakitan lain di Web.Config

  2. Kesalahan SQL Server 110:Ada lebih sedikit kolom dalam pernyataan INSERT daripada nilai yang ditentukan dalam klausa VALUES.

  3. Cara membuat cadangan atau membuat tabel baru dari Tabel SQL Server yang Ada di SQL Server - Tutorial SQL Server / TSQL Bagian 105

  4. 3 Area yang Akan Diuntungkan dari Menggunakan Alat Pemantauan Kinerja SQL Server

  5. Statistik Objek Database SQL Server