Theo dõi lỗi hết thời gian chờ ứng dụng trong SQL Server


8

Máy chủ SQL 2008 SP3

Làm cách nào để theo dõi các lỗi hết thời gian này?

nhập mô tả hình ảnh ở đây

Các lỗi được hiển thị trên bảng điều khiển mạng nội bộ được sử dụng riêng cho báo cáo lỗi trong IIS. Sự nghi ngờ của tôi là có thời gian chờ mặc định là 30 giây trong ứng dụng web và nếu một truy vấn mất hơn ba mươi giây, một ngoại lệ sẽ được đưa ra. Vì có nhiều truy vấn mất hơn 30 giây trên các máy chủ SQL này, tôi không thể chỉ lọc trong hồ sơ dựa trên thời lượng.

Phục vụ trang web đang được theo dõi bởi bảng điều khiển này là hai máy chủ IIS truy xuất dữ liệu từ bảy phiên bản SQL Server.

Tôi có thể sử dụng "Sự kiện thông báo lỗi người dùng""Sự kiện lỗi OLEDB" để theo dõi các lỗi này trong SQL Server Profiler không?


Câu trả lời:


5

Aaron Bertrand đưa tôi đi đúng hướng với nhận xét của mình

Và tôi tin rằng bạn sẽ có thể lọc theo thời lượng và lỗi <> 0.

Tạo dấu vết phía máy chủ bằng cách sử dụng mẫu hồ sơ tsql_duration

  1. Đã thêm sự kiện thông báo lỗi người dùng

  2. Đã thêm các bộ lọc sau

    lỗi <> 0

    lỗi <> 1

    mức độ nghiêm trọng <> 10

Điều này tránh việc nắm bắt các lệnh SỬ DỤNG DATABASE

Thông báo lỗi được ghi bởi profiler là 2 - Hủy bỏ và Lớp sự kiện là 10 RPC: Đã hoàn thành.


2

Bạn có thể sử dụng sự kiện Chú ý trong trình lược tả với các sự kiện để ghi lại các câu lệnh T-SQL. Nó không nhất thiết phải nêu cụ thể sự kiện chú ý là gì khi tôi kiểm tra nó vì vậy tôi đoán thực tế là nó diễn ra theo chuỗi sự kiện mà bạn có thể ước tính các truy vấn có vấn đề. Tôi đã không có cơ hội để kiểm tra đầy đủ với mã và tất cả.

Tuy nhiên, tôi đã bắt gặp một ví dụ chính xác với Sự kiện mở rộng có thể được sử dụng để tìm các truy vấn hết thời gian và ví dụ này là với SQL Server 2008. Đó là từ Jonathan Kehayias: An XEvent a Day (9 of 31) - T Target Week - ghép_matching


Lỗi hết thời gian là phía máy khách và lỗi đến từ nhà cung cấp (hoặc máy khách) đang được sử dụng với kết nối cơ sở dữ liệu. SQL Server không nhất thiết phải theo dõi hoặc cung cấp bất kỳ phương pháp trực quan nào để theo dõi những điều này.

Sử dụng một dấu vết, thời gian chờ bên phía SQL Server về cơ bản là các truy vấn có bắt đầu nhưng không hoàn thành. Mà tôi đã xem qua một video rất hay đi qua một ví dụ từ Sean McCown Tìm thời gian chờ truy vấn với Profiler . Bây giờ nó không phải là bằng chứng vững chắc như Sean ghi chú trong video có những thứ khác có thể khiến giao dịch không có kết thúc.

Tóm tắt các bước:

  • Tạo một dấu vết trong Profiler để nắm bắt các sự kiện bắt đầu và hoàn thành cho Thủ tục lưu trữ và TSQL
  • Tải dữ liệu đó vào một bảng
  • Truy vấn dữ liệu đó để tìm các sự kiện bắt đầu và sau đó kết thúc các sự kiện.

Như ví dụ trong video cho SP:Starting(44) và SP:Completed(43) sau khi bạn lấy dữ liệu theo dõi của mình vào một bảng:

SELECT *
INTO #TraceStart
FROM MyTraceData
WHERE EventClass = 44

SELECT *
INTO #TraceEnd
FROM MyTraceData
WHERE EventClass = 45

SELECT TextData
FROM #TraceStart
EXCEPT
SELECT TextData
FROM #TraceEnd

Tôi hy vọng điều này có thể dễ thực hiện hơn với Sự kiện mở rộng nhưng chưa bao giờ thử chuyển phương thức này sang Sự kiện mở rộng. Tôi không chắc liệu phiên bản Sự kiện mở rộng của SQL Server 2008 có mở ra quyền truy cập vào các lỗi cấp độ máy khách như năm 2012 hay không. Trên đây chỉ là một phương pháp nhanh chóng và bẩn mà vẫn hoạt động.


Khá chắc chắn rằng bạn có thể chụp những cái này bằng bộ lọc bị lỗi - trừ khi máy khách bị ngắt kết nối, họ vẫn có thể thông báo cho SQL Server "này, tôi đã từ bỏ việc chạy truy vấn này." Ít nhất tôi chắc chắn 99,9% đây là cách chúng tôi nắm bắt các sự kiện như vậy trong Trình cố vấn hiệu suất (thông qua dấu vết).
Aaron Bertrand

1
Nếu bạn đang sử dụng dấu vết, ngay trước hoặc sau (tùy theo dấu vết), thời gian chờ sẽ có một sự kiện chú ý.
Sean Gallardy - Người dùng đã nghỉ hưu

Xin chào @AaronBertrand. Hóa ra SQL profiler đã ghi lại một sự kiện lỗi người dùng với giá trị là 2 - Hủy bỏ khi IIS hủy thực thi truy vấn. Tôi đã không nhận thấy bất cứ điều gì hiển thị trong Chú ý hoặc một trường hợp trong đó stmt: hoàn thành là trống rỗng.
Craig Efrein

@Craig Tôi nghĩ đó là trường hợp (nhưng quá lười biếng để kiểm tra một cái gì đó để kiểm tra).
Aaron Bertrand

1

Bạn cũng đang kiểm tra chặn?

Chặn chắc chắn có thể đóng góp vào thời gian chờ và có thể được theo dõi khá dễ dàng. Một thời gian chờ không liên quan đến một khối có một số vấn đề khác. Thời gian chờ 30 giây là một cài đặt máy khách phổ biến , nhưng nó có thể được điều khiển bởi đối tượng lệnh. Nếu bạn đặt thành 0 thì kết nối sẽ không hết thời gian.

Để thiết lập giám sát để chặn sử dụng Thông báo sự kiện và Nhà môi giới dịch vụ, hãy đọc bài đăng của Tony Rogerson:

http://sqlblogcasts.com/bloss/tonyrogerson/archive/2007/04/06/event-notifying-monitoring-blocked- Processes-and- up-and-make-it-work.aspx

Trong ví dụ của mình, anh ta theo dõi các khối từ 10 giây trở lên (và cứ sau khoảng thời gian tăng dần là 20, 30, 40 giây, v.v.) . Cả hai quá trình chặn và chặn sẽ hiển thị trong mô tả XML của khối.

Giữ thông tin trong một bảng cũng cung cấp lịch sử mà bạn có thể xem lại theo thời gian.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.