2009-03-05 38 views
7

Tôi có dịch vụ web đang hoạt động tốt mà không sửa đổi trong vài năm nay. Đột nhiên ngày hôm nay nó quyết định rằng nó sẽ không hoạt động, và ném một thời gian chờ SQL:Gỡ rối hết thời gian chờ của Máy chủ SQL

System.Data.SqlClient.SqlException: Timeout hết hạn. Khoảng thời gian chờ trôi qua trước khi hoàn thành thao tác hoặc máy chủ không phản hồi.

Điều thú vị cần lưu ý là dịch vụ web này sống trên cùng một máy chủ với cơ sở dữ liệu và cũng có thể nếu tôi lấy truy vấn ra khỏi một dấu vết SQL và chạy nó trong phòng quản lý, nó sẽ trả về sau một giây. Nhưng đó là thời gian ra sau chính xác 30 giây khi được gọi từ dịch vụ web mà không thất bại. Tôi đang sử dụng Thư viện Doanh nghiệp để kết nối với cơ sở dữ liệu, vì vậy tôi không thể tưởng tượng rằng bắt đầu thất bại một cách ngẫu nhiên.

Tôi không hoàn toàn chắc chắn điều gì đột nhiên có thể khiến nó ngừng hoạt động. Tôi đã tái chế hồ bơi ứng dụng, và thậm chí khởi động lại quá trình SQL mà tôi thấy nó đang sử dụng. Hành vi tương tự. Bất kỳ cách nào tôi có thể khắc phục sự cố này?

CẬP NHẬT: Mitch đóng đinh. Ngay sau khi tôi thêm "WITH RECOMPILE" trước từ khóa "AS" trong định nghĩa sproc, nó đã trở lại với cuộc sống. Bravo!

+0

@Chris: Xin lưu ý rằng bạn không nên thêm WITH RECOMPILE trừ khi nó là một điều mương cuối cùng. Sử dụng RECOMPILE FOR được nhắm mục tiêu nhiều hơn –

Trả lời

4

Các triệu chứng bạn mô tả là 99,9% nhất định là do kế hoạch truy vấn được lưu vào bộ nhớ cache không chính xác.

Hãy xem những câu trả lời:

trong đó bao gồm những lời khuyên để xây dựng lại các chỉ mục và đảm bảo thống kê được cập nhật như là một điểm khởi đầu.

Bạn có công việc bảo trì chỉ mục thường xuyên được lên lịch và bật không?

Các tài liệu tham khảo kinh điển là: Slow in the Application, Fast in SSMS?

+0

Bạn, thưa bạn, là anh hùng của tôi. – Chris

1

Rebuild bất kỳ chỉ số có liên quan.

1

Thống kê cập nhật, kiểm tra các tùy chọn đã đặt trên truy vấn trong hồ sơ. SSMS có thể đang sử dụng các tùy chọn kết nối khác nhau.

Các vấn đề liên quan