Tôi đã lưu trữ thủ tục hết thời gian điên cuồng mỗi khi nó được gọi từ ứng dụng web.
Tôi đã kích hoạt Sql Profiler và theo dõi các cuộc gọi hết thời gian đó và cuối cùng phát hiện ra những điều sau:
- Khi thực thi các câu lệnh từ bên trong MS SQL Management Studio, với các đối số tương tự (trên thực tế, tôi đã sao chép lệnh gọi thủ tục từ dấu vết hồ sơ sql và chạy nó): Nó kết thúc sau 5 ~ 6 giây trung bình.
- Nhưng khi được gọi từ ứng dụng web, phải mất hơn 30 giây (theo dõi) nên trang web của tôi thực sự hết thời gian chờ đợi.
Ngoài thực tế là ứng dụng web của tôi có người dùng riêng, mọi thứ đều giống nhau (cùng một cơ sở dữ liệu, kết nối, máy chủ, v.v.) Tôi cũng đã thử chạy truy vấn trực tiếp trong studio với người dùng của ứng dụng web và không mất quá 6 giây
Làm cách nào để tìm hiểu điều gì đang xảy ra?
Tôi giả định rằng nó không liên quan gì đến thực tế là chúng tôi sử dụng các lớp BLL> DAL hoặc Bộ điều hợp bảng vì dấu vết cho thấy rõ ràng sự chậm trễ trong quy trình thực tế. Đó là tất cả những gì tôi có thể nghĩ đến.
CHỈNH SỬA Tôi phát hiện ra trong liên kết này rằng ADO.NET đặt ARITHABORT
thành true - điều này tốt trong hầu hết thời gian nhưng đôi khi điều này xảy ra và giải pháp được đề xuất là thêm with recompile
tùy chọn vào proc được lưu trữ. Trong trường hợp của tôi, nó không hoạt động nhưng tôi nghi ngờ nó là một cái gì đó rất giống với điều này. Bất cứ ai biết ADO.NET làm gì khác hoặc nơi tôi có thể tìm thông số kỹ thuật?