Câu hỏi về đầu ra của số liệu thống kê của IO IO


7
  • Là TOTAL số lần đọc vật lý mà một truy vấn đã làm = [đọc vật lý] + [đọc trước đọc]?
  • Tại sao đôi khi chúng ta có [đọc vật lý] = 0 trong khi [đọc trước đọc]> 0? điều đó nghĩa là gì?
  • Có bao nhiêu trang SQL Server đọc trong một lần đọc vật lý? ... nếu nó là một đối một, thì
  • Tại sao khi "chọn * từ aTable", số lượng [đọc vật lý] và / hoặc [đọc trước đọc] không bằng số trang của bảng? mặc dù bộ đệm đã bị xóa trước khi thực hiện truy vấn.
  • tại sao đôi khi [đọc logic] lớn hơn [đọc vật lý] + [đọc trước đọc] và thậm chí lớn hơn tổng số trang của bảng?

Câu trả lời:


7

Là TOTAL số lần đọc vật lý mà một truy vấn đã làm = [readsc vật lý] + [đọc trước đọc]?

Không. Chúng được tính riêng.

đọc vật lý: Số trang được đọc từ luồng - Chạy chuỗi chuyển sang trạng thái có thể chạy và đợi IO kết thúc.

đọc trước đọc:

Cơ sở dữ liệu hỗ trợ một cơ chế tối ưu hóa hiệu suất được gọi là đọc trước. Đọc trước dự đoán các trang dữ liệu và chỉ mục cần thiết để hoàn thành kế hoạch thực hiện truy vấn và đưa các trang vào bộ đệm bộ đệm trước khi chúng thực sự được sử dụng bởi truy vấn. Điều này cho phép tính toán và I / O trùng nhau, tận dụng tối đa cả CPU và đĩa. Có hai loại đọc trước: một cho các trang dữ liệu và một cho các trang chỉ mục.

Tại sao đôi khi chúng ta có [đọc vật lý] = 0 trong khi [đọc trước đọc]> 0? điều đó nghĩa là gì?

Như đã đề cập trước đây read ahead pageskhông được bao gồm trong physical read. Điều này có nghĩa là tất cả các trang cần thiết đã có trong bộ nhớ cache. Các trang đã tồn tại hoặc được đặt trong bộ đệm bằng cơ chế đọc trước.

Có bao nhiêu trang SQL Server đọc trong một lần đọc vật lý? ... nếu nó là một đối một, thì

Nó không phải là một. Nó sẽ thay đổi. Xem phần tham khảo bên dưới.

Tại sao khi "chọn * từ aTable", số lượng [đọc vật lý] và / hoặc [đọc trước đọc] không bằng số trang của bảng? mặc dù bộ đệm đã bị xóa trước khi thực hiện truy vấn.

Như đã giải thích, đọc và đọc trước có thể đọc nhiều trang cùng một lúc.

Cơ chế đọc trước cho phép Công cụ cơ sở dữ liệu đọc tối đa 64 trang liền kề (512KB) từ một tệp. Việc đọc được thực hiện dưới dạng một tập hợp phân tán đơn đọc đến số lượng bộ đệm (có thể không liền kề) thích hợp trong bộ đệm bộ đệm. Nếu bất kỳ trang nào trong phạm vi đã có trong bộ đệm bộ đệm, trang tương ứng từ phần đọc sẽ bị loại bỏ khi đọc xong. Phạm vi của các trang cũng có thể được "cắt bớt" từ một trong hai đầu nếu các trang tương ứng đã có trong bộ đệm.

tại sao đôi khi [đọc logic] lớn hơn [đọc vật lý] + [đọc trước đọc]

Vì các trang của bạn đã ở trong bộ đệm nên đọc trong trường hợp này có nghĩa là đọc logic và bạn không cần (hoặc bạn cần ít hơn) đọc vật lý + đọc trước đọc.

và thậm chí lớn hơn tổng số trang của bảng?

Có thể đọc cùng một trang nhiều lần trong khi đọc từ bộ đệm. Hãy suy nghĩ về việc tìm kiếm hoạt động trên một chỉ mục. Nếu bạn phải thực hiện 10 lần tìm kiếm, bạn sẽ luôn thực hiện 10 lần đọc logic trên trang gốc và có thể là 10 lần đọc logic ở mỗi cấp độ trung gian.

Tài liệu tham khảo:


3
Chỉ muốn thêm rằng SQL Server sẽ thực hiện các lần đọc lên tới 4MB trong SQL 2016 trở lên. Tôi đã học được điều này với một dấu vết XE của các sự kiện file_read_completed.
Dan Guzman
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.