2011-12-05 20 views
12

Chúng tôi có một quy trình được lưu trữ được gọi là khoảng 300.000 lần mỗi ngày bởi 15 người dùng trong suốt cả ngày. Tôi đã rót qua mọi dòng và nó hiệu quả như tôi có thể đạt được.Hoạt động của SQL Server "Kiểm tra Đăng xuất" mất nhiều thời gian.

Quy trình được lưu trữ được truy cập thông qua trang ASP.NET trên 4.0 từ ứng dụng VB6 kế thừa trên Winterms cơ bản.

Khi tôi nhìn vào các tập tin SQL dấu vết, tôi thấy như sau:

  1. sp_reset_connection exec (Sử dụng hồ bơi kết nối)
  2. Audit Login
  3. Thi hành các thủ tục lưu trữ
  4. Audit Logout

Tôi thấy ở bước 4, đọc và viết rất cao, có ý nghĩa vì đó là sự tích lũy kết nối được tái sử dụng trong hồ bơi.

Điều gì khiến tôi lo ngại là phải mất bao lâu, đôi khi mất 50ms và các lần khác 400ms, điều đó hoàn toàn ngẫu nhiên. Từ tài liệu tôi đọc "Kiểm tra đăng xuất" là toàn bộ thời lượng cho cả ba bước. Nhưng các bước 1-3 rất nhanh, như 0-5ms. Tại sao thời gian "Đăng xuất kiểm tra" mất quá nhiều thời gian?

Trả lời

6

Tôi đang "đối phó" với một vấn đề tương tự ngay bây giờ và tình cờ bài đăng này: http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/84ecfe9e-ff0e-4fc5-962b-cffdcbc619ee

Có lẽ đây (trong số những bài đề cập ở trên) là giải pháp:

"Một Khi kết nối được rút ra khỏi hồ bơi, máy chủ sẽ được gửi một sp_reset_connection Việc đặt lại đó sẽ gọi một audit_logout, sau đó là audit_login. kết nối là được kéo ra khỏi hồ bơi ... do đó, khoảng thời gian dài tôi thấy bao gồm thời gian ứng dụng xử lý kết quả truy vấn, giải phóng kết nối đến hồ bơi kết nối, thực hiện bất kỳ điều gì và cuối cùng kéo ra khỏi kết nối của để bắt đầu giao dịch tiếp theo. "

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