2013-08-16 18 views
5

Tôi đang điều tra lỗi này từ một ứng dụng MVC3 đó là thất bại dưới tải:.Sử dụng Performance Monitor để giám sát các kết nối gộp

"Khoảng thời gian chờ trôi qua trước khi nhận được một kết nối từ hồ bơi này có thể đã xảy ra bởi vì tất cả kết nối gộp lại đã được sử dụng và đạt được kích thước hồ bơi tối đa. "

Ứng dụng đang sử dụng mẫu Repository và Entity Framework, và linh cảm của tôi là nó không đóng kết nối đúng cách. Tôi muốn có thể theo dõi số lượng kết nối gộp trên máy chủ SQL. Tìm kiếm xung quanh dẫn tôi tin rằng tôi có thể sử dụng các quầy trong Perfmon:

  • .NET CLR liệu
  • Provider
  • NET dữ liệu cho SQLServer

Tuy nhiên cả hai hiển thị bị tàn tật/chuyển sang màu xám ngoài.

Tôi đang chạy Perfmon trực tiếp trên máy chủ và cả ISS và SQL Server đang chạy trên máy chủ. Bất kỳ ý tưởng tại sao các quầy sẽ không có sẵn?

Tôi cũng đã thử sử dụng SQL Profiler để giám sát các kết nối gộp, nhưng cột EventSubClass không có sẵn cho AuditLogin.

+0

Bộ đếm thứ hai tôi tin là điều đúng. Ý bạn là gì khi bạn chuyển sang màu xám? Như trong bạn không thể thêm những màn hình? Bạn có quyền truy cập quản trị vào máy không? – DavidN

+0

Có, nếu tôi cố gắng thêm những màn hình đó, không có gì xảy ra. Và tôi là quản trị viên trên máy – VincentH

Trả lời

6

Bạn có thể chạy điều này từ cửa sổ truy vấn SQL để nhận số và chi tiết về kết nối hiện tại và phiên chạy trên máy chủ SQL của bạn.

select * FROM sys.dm_exec_sessions AS es 
INNER JOIN sys.dm_exec_connections AS ec 
ON es.session_id = ec.session_id 

Tôi gặp sự cố với kết nối được gộp chung. Chúng khó kiểm soát. Rõ ràng đóng chúng không bao giờ có tác dụng vì chúng nằm dưới sự kiểm soát của .NET. Lý do lớn nhất mà chúng tôi đã hết kết nối là giao dịch không được cam kết. Nếu một giao dịch không được cam kết hoặc được khôi phục vì một số lý do, kết nối, thay vì được sử dụng lại, bị kẹt trong trạng thái yếu, buộc .NET phải mở một kết nối khác để tiếp tục xử lý.

+0

Điều này có vẻ hữu ích - nhưng nó có cho tôi biết liệu kết nối có được gộp chung hay không? – VincentH

+0

Có vẻ như không phải là một cách năng động, đáng tin cậy của việc tìm kiếm xem một kết nối trực tiếp có được gộp chung hay không. Tất cả các ví dụ tôi thấy dựa vào a) tạo bảng và trình kích hoạt để lưu trữ dữ liệu kết nối và b) sử dụng dữ liệu sự kiện đăng nhập (có chứa IsPooled) để điền bảng. Có một ví dụ ở đây: http: //www.sqlservercentral.com/Forums/Topic798425-146-1.aspx#bm798660 – Brian

1

Từ phía SQL, cách duy nhất khả thi để xem lại điều này là bằng cách thiết lập theo dõi sự kiện đăng nhập. Cột "Phân loại sự kiện" sẽ cho bạn biết sự kiện đã xảy ra bằng kết nối gộp hay không. Với điều đó, bạn có thể tương quan tên máy chủ, tên đăng nhập và tên ứng dụng và tiếp tục đào.

Audit Login Event Class

Về phía ứng dụng mà bạn có thể sử dụng bộ đếm hiệu suất của "cung cấp dữ liệu .NET CHO SQL SERVER" trên perfmon.

Performance Counters in ADO.NET

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