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

ADO.NET memanggil Prosedur Tersimpan T-SQL menyebabkan SqlTimeoutException

Setelah saya menentukan bahwa itu adalah koneksi ADO.NET yang menjadi akar masalah, utas ini membawa saya ke jawabannya.

Pada dasarnya koneksi melalui Sql Server Management Studio (SSMS) secara default telah SET ARITHABORT ON . Koneksi ADO.NET tidak.

Menyetel ARITHABORT OFF dan mengeksekusi kueri secara langsung melalui SSMS memberi saya waktu respons lambat yang sama.

Perbedaan utama saat menjalankan dengan atau tanpa pengaturan ini adalah rencana kueri yang berbeda dibuat untuk dua panggilan. Ketika ARITHABORT tadinya OFF , perintah SSMS akan menggunakan rencana kueri cache yang telah dikompilasi sebelumnya yang digunakan koneksi ADO.NET, dan oleh karena itu waktu tunggu habis.

Dengan menjalankan perintah berikut sebagai administrator di database, semua kueri berjalan seperti yang diharapkan terlepas dari ARITHABORT pengaturan.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Saya hanya dapat berasumsi bahwa rencana kueri yang dikompilasi menjadi rusak, atau tidak valid.

Saya akan menggunakan ini sebagai solusinya (saya telah memilih jawabannya) di utas lainnya

Terima kasih.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Temukan nilai di mana saja dalam database

  2. Cara Mengubah Kolom atau Menghasilkan Alter Script dengan menggunakan GUI di SQL Server - Tutorial SQL Server / T-SQL Bagian 38

  3. @@IDENTITY, SCOPE_IDENTITY(), OUTPUT dan metode lain untuk mengambil identitas terakhir

  4. TSQL Pivot tanpa fungsi agregat

  5. SQL Server mengonversi string ke datetime