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

Truy vấn hết thời gian chờ khi được thực thi từ web, nhưng cực nhanh khi được thực thi từ SSMS

Vì vậy, mã C # của bạn đang gửi một truy vấn SQL đặc biệt đến SQL Server, sử dụng phương pháp nào? Bạn đã xem xét sử dụng một thủ tục được lưu trữ chưa? Điều đó có lẽ sẽ đảm bảo hiệu suất như nhau (ít nhất là trong động cơ) bất kể ai đã gọi nó.

Tại sao? Cài đặt ARITHABORT là một trong những thứ mà trình tối ưu hóa sẽ xem xét khi xác định cách thực thi truy vấn của bạn (cụ thể hơn là để đối sánh kế hoạch). Có thể gói trong bộ nhớ cache có cùng cài đặt với SSMS, vì vậy nó sử dụng gói được lưu trong bộ nhớ cache, nhưng với cài đặt ngược lại, mã C # của bạn đang buộc phải biên dịch lại (hoặc có lẽ bạn đang thực sự gặp BAD kế hoạch trong bộ nhớ cache), điều này chắc chắn có thể ảnh hưởng đến hiệu suất trong nhiều trường hợp.

Nếu bạn đang gọi một thủ tục được lưu trữ (bạn không đăng truy vấn của mình, mặc dù tôi nghĩ bạn muốn vậy), bạn có thể thử thêm TÙY CHỌN (RECOMPILE) vào truy vấn vi phạm (hoặc các truy vấn) trong thủ tục được lưu trữ. Điều này có nghĩa là những câu lệnh đó sẽ luôn được biên dịch lại, nhưng nó có thể ngăn chặn việc sử dụng kế hoạch tồi tệ mà bạn dường như đang thực hiện. Một tùy chọn khác là đảm bảo rằng khi quy trình được lưu trữ được biên dịch, lô sẽ được thực thi với SET ARITHABORT ON.

Cuối cùng, dường như bạn đang hỏi làm cách nào để thay đổi cài đặt ARITHABORT trong SSMS. Tôi nghĩ ý bạn muốn hỏi là cách bạn có thể buộc cài đặt ARITHABORT trong mã của mình. Nếu bạn quyết định tiếp tục gửi SQL đặc biệt từ ứng dụng C # của mình, thì tất nhiên bạn có thể gửi một lệnh dưới dạng văn bản có nhiều câu lệnh được phân tách bằng dấu chấm phẩy, ví dụ:

SET ARITHABORT ON; SELECT ...

Để biết thêm thông tin về lý do tại sao sự cố này xảy ra, hãy xem bài viết tuyệt vời của Erland Sommarskog:

  • Chậm trong ứng dụng, nhanh trong SSMS? Tìm hiểu bí ẩn về hiệu suất


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lấy danh sách tất cả các Ràng buộc Kiểm tra trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 85

  2. Tên chính xác cho một bảng kết hợp (mối quan hệ nhiều-nhiều)

  3. Làm cách nào để thêm chuỗi có giá trị tăng tự động trong SQL Server?

  4. Máy chủ SQL của bạn khỏe mạnh như thế nào? Giám sát cơ sở dữ liệu chủ động là rất quan trọng

  5. SQL Server:số hàng tối đa trong bảng