Tại sao các truy vấn SQL Server không sử dụng hơn 7MB / giây đĩa I / O


11

Tôi có một ổ SSD, sử dụng thử nghiệm IOmeter, cho thấy hiệu suất trên 200MB / s. Tuy nhiên, khi tôi chạy bất kỳ truy vấn SQL nào từ máy cục bộ, trình giám sát tài nguyên windows không bao giờ hiển thị IO đĩa trên 7MB / giây. Điều này đúng ngay cả đối với các truy vấn mất hơn 2 phút để chạy. Nút thắt có thể là gì khi nó chỉ sử dụng 7MB / giây từ SSD?

Tôi đang chạy:

  • Tiêu chuẩn Windows Server 2012
  • Máy chủ SQL 2008 r2
  • Intel i7 3820
  • 32GB ram
  • ổ SSD

2
có lẽ dữ liệu đã có trong RAM và không cần truy cập đĩa?
gbn

1
@DeanMacGregor - Bạn đang tiêu thụ kết quả như thế nào? Nếu trong SSMS thì sao nếu bạn thử tùy chọn loại bỏ kết quả. Điều đó có thay đổi gì không? Ngoài ra, bạn có thể thử xem sys.dm_os_waiting_taskstrong khi truy vấn đang chạy để xem liệu có loại chờ nào khác mà nó đang gặp phải không.
Martin Smith

1
Là 200 MB / s cho các lần đọc truy cập ngẫu nhiên (đọc ngẫu nhiên cho các khối 4 KB)? Tôi đoán đây là những gì một cơ sở dữ liệu thường làm. Có truy vấn ghi vào đĩa (tệp tạm thời, tập kết quả tạm thời hoặc bảng) không?

2
@DeanMacGregor - Vì vậy, để đưa nó ra khỏi phương trình, bạn có thể gán kết quả cho các biến vô hướng (ví dụ truy vấn). DECLARE @Name VARCHAR(10), @High int; SELECT @Name=name, @High = high FROM master..spt_values. Vì vậy, không có kết quả nào được gửi lại cho khách hàng nhưng kế hoạch và IO vẫn sẽ giống nhau.
Martin Smith

4
Giả sử bạn đang giải thích ASYNC_NETWORK_IO chờ đợi có nghĩa là sự cố có liên quan đến mạng? Nó (thường) không. Rất có thể như @MartinSmith đã đề xuất (hai lần) rằng SSMS hoặc ứng dụng bạn đang sử dụng không tiêu thụ kết quả nhanh như SQL đang phục vụ chúng. Thực hiện theo một trong các cách được đề xuất để bỏ qua mức tiêu thụ của các hàng và bạn sẽ có được một hình ảnh (r) thực sự về thông lượng IO tối đa.
Mark Storey-Smith

Câu trả lời:


7

Từ chuỗi nhận xét, có vẻ như bạn đang diễn giải ASYNC_NETWORK_IOchờ đợ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.SomeTablethì 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ị:

  1. SELECT *để kiểm tra chỉ IO thông qua SQL Server.
  2. 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.

Trên thực tế, nó chỉ được chọn * từ dbo.sometable. Xin lỗi tôi đã không đề cập đến điều đó sớm hơn; ý tôi là tôi có thể chạy truy vấn đó khỏi bất kỳ bảng nào. Nguồn gốc của câu hỏi của tôi là tôi nhận thấy IO đĩa của tôi ít hơn nhiều so với tôi mong đợi ngay cả từ truy vấn "cung cấp cho tôi nhiều dữ liệu" đơn giản. Mối quan tâm chính của tôi là nếu IO đĩa quá thấp thì hiệu năng có thể được cải thiện nếu nguyên nhân gốc của IO đĩa thấp bị mất gốc.
Dean MacGregor
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.