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

Hết thời gian truy vấn từ ứng dụng web nhưng chạy tốt từ studio quản lý

Đây là những gì tôi đã học được cho đến nay từ nghiên cứu của mình.

.NET gửi cài đặt kết nối không giống như những gì bạn nhận được khi đăng nhập vào quản lý studio. Đây là những gì bạn thấy nếu đánh hơi thấy kết nối với 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  

Bây giờ tôi đang dán các cài đặt đó bên trên mọi truy vấn mà tôi chạy khi đăng nhập vào máy chủ sql, để đảm bảo các cài đặt đều giống nhau.

Đối với trường hợp này, tôi đã thử từng cài đặt riêng lẻ, sau khi ngắt kết nối và kết nối lại và nhận thấy rằng việc thay đổi arithabort từ tắt thành bật đã giảm truy vấn sự cố từ 90 giây xuống 1 giây.

Lời giải thích có thể xảy ra nhất là liên quan đến đánh giá tham số, đây là một kỹ thuật mà Sql Server sử dụng để chọn những gì nó cho là kế hoạch truy vấn hiệu quả nhất. Khi bạn thay đổi một trong các cài đặt kết nối, trình tối ưu hóa truy vấn có thể chọn một gói khác và trong trường hợp này, dường như nó đã chọn một gói không hợp lệ.

Nhưng tôi không hoàn toàn bị thuyết phục về điều này. Tôi đã thử so sánh các kế hoạch truy vấn thực tế sau khi thay đổi cài đặt này và tôi vẫn chưa thấy sự khác biệt cho thấy bất kỳ thay đổi nào.

Có điều gì khác về cài đặt arithabort có thể khiến truy vấn chạy chậm trong một số trường hợp không?

Giải pháp có vẻ đơn giản:Chỉ cần đặt arithabort thiết lập vào đầu thủ tục được lưu trữ. Nhưng điều này có thể dẫn đến vấn đề ngược lại:thay đổi các tham số truy vấn và đột nhiên nó chạy nhanh hơn khi "tắt" hơn là "bật".

Hiện tại, tôi đang chạy quy trình 'biên dịch lại' để đảm bảo kế hoạch được tạo lại mỗi lần. Không sao cho báo cáo cụ thể này, vì có thể mất một giây để biên dịch lại và điều này không quá đáng chú ý đối với một báo cáo mất 1-10 giây để trả về (đó là một con quái vật).

Nhưng nó không phải là một tùy chọn cho các truy vấn khác chạy thường xuyên hơn nhiều và cần trả lại càng nhanh càng tốt, chỉ trong vài mili giây.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phương thức Statement.setFetchSize (nSize) thực sự làm gì trong trình điều khiển JDBC của SQL Server?

  2. SQL Server và các lỗ hổng Spectre / Meltdown

  3. Cài đặt từng bước SQL Server 2017 -2

  4. Kiểu dữ liệu thích hợp nhất để lưu trữ địa chỉ IP trong máy chủ SQL là gì?

  5. SQL Server kiểm tra phân biệt chữ hoa chữ thường?