Từ chuỗi nhận xét, có vẻ như bạn đang diễn giải ASYNC_NETWORK_IO
chờ đợi có nghĩa là sự cố có liên quan đến mạng. Nó (thường) không.
Như @MartinSmith đã gợi ý (hai lần) lời giải thích rất có thể cho điều đó là SSMS hoặc ứng dụng bạn đang sử dụng không tiêu thụ kết quả nhanh như SQL Server đang phục vụ chúng. Thực hiện theo một trong các phương pháp được đề xuất để loại bỏ mức tiêu thụ của các hàng khỏi phép đo của bạn và bạn sẽ có được một hình ảnh (r) thực sự về thông lượng IO tối đa:
Chỉ trong trường hợp bạn chưa có, rõ ràng bạn sẽ cần phải DBCC DROPCLEANBUFFERS
đảm bảo dữ liệu thực sự được đọc từ đĩa thay vì bộ đệm. Hãy cẩn thận thông thường "chỉ kiểm tra, không làm điều này trong một môi trường sống tích cực" vv.
Tham gia vào một vài ý kiến khác của bạn:
Trong khi thực hiện truy vấn trả về 9 triệu hàng, việc sử dụng CPU sẽ ở mức khoảng 13% với 9% được quy cho máy chủ sqls ... nó sẽ không trả về kết quả nhanh hơn 3 phút nếu tất cả dữ liệu nằm trong RAM?
Chính xác thì chúng ta đang thử nghiệm gì ở đây, như thế nào và tại sao? Nếu truy vấn 9 triệu hàng của bạn là bất kỳ thứ gì khác ngoài a SELECT * FROM dbo.SomeTable
thì có 1001 yếu tố xuất hiện, ngoài chỉ là thông lượng IO thô.
Intel I7-3820 của bạn là bộ xử lý 4 lõi. Nếu truy vấn kiểm tra của bạn không tạo ra một kế hoạch song song, tôi sẽ ngạc nhiên nếu bạn có thể sử dụng hơn 20% mức sử dụng CPU từ hệ thống.
3 phút để trả lại 9 triệu hàng là rất đáng ngờ và cho thấy chúng tôi không có được một bức tranh đầy đủ về những gì thử nghiệm của bạn. Tôi đoán đây sẽ là một trường hợp của kế hoạch truy vấn không tối ưu (không song song), được nhồi đầy các toán tử vòng lặp lồng nhau kéo hàng triệu hàng, tức là không chỉ một bảng SELECT
để xác minh mức tiêu thụ IO.
Tôi đề nghị:
SELECT *
để kiểm tra chỉ IO thông qua SQL Server.
- Câu hỏi mới với kế hoạch thực hiện truy vấn của bạn nếu bạn muốn tìm hiểu lý do tại sao nó không bão hòa IO.