Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

ADO.NET gọi Thủ tục lưu trữ T-SQL gây ra SqlTimeoutException

Khi tôi xác định rằng đó là kết nối ADO.NET ở gốc rễ của vấn đề, chuỗi này đã dẫn tôi đến câu trả lời.

Về cơ bản, các kết nối thông qua Sql Server Management Studio (SSMS) theo mặc định có SET ARITHABORT ON . Kết nối ADO.NET không.

Đặt ARITHABORT OFF và việc thực hiện truy vấn trực tiếp thông qua SSMS mang lại cho tôi thời gian phản hồi chậm như nhau.

Sự khác biệt chính khi chạy có hoặc không có cài đặt này là một kế hoạch truy vấn khác được tạo cho hai cuộc gọi. Khi ARITHABORT đã OFF , lệnh SSMS sẽ sử dụng kế hoạch truy vấn được lưu trong bộ nhớ cache được biên dịch trước mà kết nối ADO.NET đang sử dụng và do đó hết thời gian chờ.

Bằng cách chạy các lệnh sau với tư cách là quản trị viên trên cơ sở dữ liệu, tất cả các truy vấn chạy như mong đợi bất kể ARITHABORT cài đặt.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Tôi chỉ có thể cho rằng một kế hoạch truy vấn đã biên dịch đã bị hỏng hoặc không hợp lệ.

Tôi sẽ coi đây là giải pháp (tôi đã bỏ phiếu cho câu trả lời) trên chủ đề khác

Cảm ơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể sử dụng câu lệnh CASE trong điều kiện JOIN không?

  2. Thực hiện lệnh Chèn và trả về Id đã chèn trong Sql

  3. Danh sách các loại dữ liệu trong SQL Server 2017

  4. SQLServer so với StateServer cho hiệu suất trạng thái phiên ASP.NET

  5. T-SQL:Xóa tất cả các hàng trùng lặp nhưng giữ lại một hàng