Tại sao các loại chờ async_network_io xảy ra?


10

Tuần trước một cái gì đó kỳ lạ đã xảy ra trên cơ sở dữ liệu của chúng tôi. Thật bất ngờ, ứng dụng đã chặn những người dùng của chúng tôi không thể lưu các thực thể mới, v.v. Sau khi xem Trình giám sát hoạt động của SQL Server (2008 với chế độ tương thích 2005), tôi thấy ba mục sau:

async_network_io loại chờ

Sau một thời gian, người dùng đã hết thời gian kết nối. Khi tôi giết tiến trình 64, chúng có thể lưu lại bình thường.

Vấn đề là các thực thể mà chúng cố lưu trong khối được chèn vào DB nhiều lần (tối đa 3 lần) mặc dù có mã nên ngăn điều này xảy ra (cột số phải là duy nhất nhưng không có ràng buộc ... kiểm tra xảy ra trong mã).

Chúng tôi sử dụng Entity Framework 6.0.

  • Có ai trong số các bạn biết tại sao và khi các loại chờ ASYNC_NETWORK_IO này xảy ra không và làm thế nào để tránh chúng?
  • Và chính xác thì chúng có ý nghĩa gì?

1
Hãy xem qua bài viết này từ Doug Lane: brentozar.com/archive/2015/07/ Khăn Điều này có thể giải quyết những gì bạn đang thấy với EF.
Kris Gruttemeyer 21/07/2015

Bài viết rất thú vị! Cảm ơn bạn, tôi sẽ xem nó :)
xeraphim

1
Kiểm tra kho lưu trữ số liệu thống kê chờ - ASYNC_NETWORK_IO . Sử dụng kịch bản mà Paul cung cấp để xem nếu có vấn đề khác.
Kin Shah

Câu trả lời:


12

ASYNC_NETWORK_IObằng cách nào đó chỉ ra rằng ứng dụng khách không xử lý kết quả nhanh như SQL Server cung cấp cho họ. Điều này có thể do sự cố với ứng dụng khách hoặc với kết nối mạng giữa máy chủ và ứng dụng khách.

Vui lòng tham khảo một bài viết của Thomas LaRock

Chờ đợi ASYNC_NETWORK_IO chỉ ra rằng một trong hai tình huống đang xảy ra. Kịch bản đầu tiên là phiên (tức là SPID) đang chờ ứng dụng khách xử lý tập kết quả và gửi tín hiệu trở lại SQL Server để sẵn sàng xử lý nhiều dữ liệu hơn. Thứ hai là có thể có một vấn đề hiệu suất mạng.

hoặc bài đăng này của Joe Sack

Như bạn có thể đã biết, các loại chờ ASYNC_NETWORK_IO (được thấy trong SQL 2005) và NETWORKIO (được thấy trong SQL 2000) được liên kết với một ứng dụng gọi điện không xử lý kết quả đủ nhanh từ SQL Server hoặc có liên quan đến vấn đề hiệu suất mạng .

Vì bạn đang sử dụng entity framework bài đăng này của Brent Ozar cũng có thể hữu ích

Nhìn vào số liệu thống kê chờ cho các truy vấn này, tôi thấy có rất nhiều ASYNC_NETWORK_IO - thường là hơn 1000 mili giây. Điều đó cũng không có ý nghĩa gì cả! Làm thế nào một truy vấn với thời gian CPU quá ít và quá ít lần đọc mất quá nhiều thời gian để hoàn thành? Không giống như ứng dụng đã yêu cầu hàng triệu hàng và không thể tiêu thụ kết quả đủ nhanh.


6

Có một số quan niệm sai về loại chờ ASYNC_NETWORK_IO, chủ yếu là do tên cho biết sự cố mạng, nhưng khá hiếm lý do cho loại chờ này.

Quá nhiều chờ đợi ASYNC_NETWORK_IO có thể xảy ra trong hai trường hợp:

  1. Phiên phải chờ ứng dụng khách xử lý dữ liệu nhận được từ SQL Server để gửi tín hiệu đến SQL Server để có thể chấp nhận dữ liệu mới để xử lý. Đây là một kịch bản phổ biến có thể phản ánh thiết kế ứng dụng xấu và là nguyên nhân thường gặp nhất của các giá trị loại chờ ASYNC_NETWORK_IO quá mức.

    Điều này liên quan đến việc điều tra ứng dụng gây ra các giá trị loại chờ ASYNC_NETWORK_IO quá mức và thường phối hợp với các nhà phát triển ứng dụng đã tạo ra nó.

  2. Băng thông mạng được tối đa hóa. Ethernet bị tắc sẽ khiến việc truyền dữ liệu chậm qua lại từ ứng dụng. Điều này, trong và của chính nó, sẽ làm giảm hiệu quả của ứng dụng.

Nhiều chi tiết có thể được tìm thấy trên trang này

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.