Các nguyên nhân có thể khiến sp_reset_connection mất nhiều thời gian để thực thi là gì?


9

Tại sao sp_reset_connectionquy trình lưu trữ hệ thống sẽ mất nhiều thời gian hơn vài mili giây để thực thi, như được xem qua SQL Server Profiler?

Tôi đã lấy một dấu vết đơn giản từ một hệ thống sản xuất bằng SQL Server Profiler và sau đó sử dụng SqlNexus để phân tích nó. SqlNexus chỉ ra rằng sp_reset_connection có thời lượng tích lũy cao nhất - 33% của dấu vết tổng thể. Thời lượng quan sát dao động từ 0-7 giây (12 đến 6.833.270 micro giây) nhưng trung bình là 0,956 giây.

Tôi hiểu rằng sp_reset_connection đang được gọi khi kết nối gộp được sử dụng lại. Tôi đã thấy một đề nghị rằng điều này có thể xảy ra do dấu vết bên ngoài , nhưng dường như đó không phải là trường hợp.

Tôi đã đọc những gì máy chủ đang làm khi sproc được gọi nhưng tôi không tin bất kỳ ai trong số đó sẽ gặp vấn đề trong trường hợp này - mã không để lại giao dịch mở hoặc các bảng tạm thời lớn cần được dọn sạch.

Tôi cũng đã xem /server/199974/sp-reset-connection-taking-a-long-time-to-run nhưng nó không hữu ích.

EDIT (2013-12-23): Trong mọi trường hợp, đọc và ghi là 0 và CPU hầu như luôn là 0 (chỉ có hai trường hợp CPU khác không, cả hai đều ở mức 16ms).


Loại giá trị nào bạn đang thấy để đọc và viết trong sự kiện đó?
Martin Smith

Bạn có thể cung cấp thêm thông tin về loại truy vấn bạn chạy. Cụ thể chi tiết thú vị như, giao dịch dài hay phức tạp, xử lý XML, bảng tạm thời?
Edward tổng hợp 21/12/13

@Martin đọc và viết là 0. Cập nhật câu hỏi. (Không có quyền truy cập vào dữ liệu vào cuối tuần.)
Nhà phát triển toàn diện

@EdwardDortland hầu hết các truy vấn là các lựa chọn và cập nhật khá đơn giản mà không có giao dịch rõ ràng hoặc sử dụng bảng tạm thời. Trên thực tế, thông thường các truy vấn thực tế được thực hiện trên các kết nối này khá nhanh - chỉ vài ms.
Nhà phát triển toàn diện

@HolisticDeveloper - Tôi đã thử nghiệm để lại một giao dịch mở và có thể thấy không đọc và viết ở đó nên đồng ý rằng nó không giống như vậy sau đó. Là tình trạng này nhiều hay ít vĩnh viễn? nếu vì vậy tôi muốn chạy một mở rộng sự kiện dấu vết chụp RPC:Starting, RPC:Completedvà chờ đợi các loại trong một thời gian ngắn sau đó xem xét thông qua các dữ liệu để xem những gì chờ đợi loại các spids đang gặp phải trong thời gian đó.
Martin Smith

Câu trả lời:


9

Cuối cùng cũng có thời gian để viết một câu trả lời chi tiết hơn.

Thông thường có ba lý do chính khiến một thủ tục đơn giản như sp_reset_connectionsẽ mất nhiều thời gian để chạy.

  1. Bạn đang chờ tài nguyên CPU
  2. Bạn bị chặn trên một khóa ở đâu đó (có thể là kết quả của DML hoặc giao dịch cạnh tranh)
  3. Mạng của bạn chậm và phải mất một thời gian dài để trả lại kết quả cho khách hàng

Quảng cáo 1) Nếu bạn đang chờ tài nguyên CPU, điều này sẽ hiển thị dưới dạng chờ tín hiệu. Vui lòng xem nhận xét của tôi về câu hỏi của bạn về cách chẩn đoán nếu đây là vấn đề

Quảng cáo 2) Nếu bạn đang chờ khóa, điều này được chẩn đoán tốt nhất bằng cách so sánh hai ảnh chụp nhanh của sys.dm_os_wait_stats. Xem bài viết này về cách làm điều này:

Nếu bạn thấy chờ đợi lâu cho LCK_ [Thứ gì đó], truy vấn sys.dm_tran_locksđể theo dõi những đối tượng nào đang bị khóa. Trong trường hợp của bạn, tôi sẽ thấy một số dạng SCH- [Something]> khóa chặn bạn.

Quảng cáo 3) Cách dễ nhất để chẩn đoán các sự cố mạng trước tiên hãy tìm OLEDB và ASYNC_NETWORK_IO đợi ở bước 2 (nếu bạn chờ mạng lâu, một trong số đó sẽ xuất hiện). Nếu những chờ đợi đó cao, hãy sử dụng xperf -on latencyhoặc một chương trình giám sát mạng như netmon hoặc wireshark để kiểm tra độ trễ của bạn. Nếu mạng có vẻ chậm, điều này cũng có thể do máy chủ ứng dụng gọi điện không đáp ứng đủ nhanh với kết nối được tái chế.


Tôi chưa thấy vấn đề tái diễn nên tôi không thể sử dụng câu trả lời được cung cấp để chẩn đoán thêm vào thời điểm này. Tuy nhiên, tôi chấp nhận câu trả lời dựa trên danh tiếng của bạn với tư cách là chuyên gia về hiệu suất của SQL Server.
Nhà phát triển toàn diện

2

Tôi vừa bắt gặp một bài viết KB cho một lỗi thể liên quan đến vấn đề này. Trong CỐ ĐỊNH : Các sự cố về hiệu suất xảy ra khi hoạt động khóa cơ sở dữ liệu tăng lên trong Máy chủ SQL (KB 2926217), một trong những triệu chứng được mô tả là sp_reset_connectioncó thể mất nhiều thời gian để hoàn thành. Các hotfix được bao gồm trong các bản cập nhật sau:

  • Cập nhật tích lũy 17 cho SQL Server 2008 SP3
  • Cập nhật tích lũy 13 cho SQL Server 2008 R2 SP2
  • Cập nhật tích lũy 9 cho SQL Server 2012 SP1
  • Cập nhật tích lũy 1 cho SQL Server 2014

Máy chủ mà tôi quan sát thấy hành vi này đang chạy SQL Server 2008 SP3 với Bản cập nhật tích lũy 5, vì vậy có thể nó đã gặp phải lỗi này. Tôi chưa thử cập nhật tích lũy (vấn đề không tái diễn mọi lúc) vì vậy tôi không thể xác minh xem nó có khắc phục được hay không. Tuy nhiên, tôi muốn cung cấp thông tin trong trường hợp bất kỳ ai cũng có triệu chứng tương tự.

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.