Tôi đang thực hiện truy vấn, điều đó tạo ra kế hoạch:
Thống kê IO:
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 128, logical reads 5952, physical reads 576, read-ahead reads 6080, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table1'. Scan count 9, logical reads 90450, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Vì vậy, một số câu hỏi
1. Tại sao Thống kê IO hiển thị số đọc cao hơn Profiler? .
Đối với KB314648 , nếu Profiler báo cáo số lượng cao hơn Thống kê IO. Nhưng Profiler hiển thị các lần 92283
đọc tại truy vấn được mô tả, thực hiện tương tự. Điều đó có nghĩa là Profiler không tính số lần đọc của workfile / worktable?
2. Sự khác biệt giữa "Worktable" và "Workfile" là gì
Tôi đã tìm thấy rằng:
- các tệp công việc có thể được sử dụng để lưu trữ kết quả tạm thời cho các phép nối băm và tập hợp hàm băm.
- các bảng công việc có thể được sử dụng để lưu trữ các kết quả tạm thời cho bộ đệm truy vấn, biến lob, biến XML và con trỏ.
Có một số khác biệt về thể chất giữa chúng?
3. Tại sao có "Worktable" trong trường hợp cụ thể này?
Tại sao tôi có bàn làm việc cả, nếu có 0 lần đọc logic? Nó được bao gồm trong thống kê IO chỉ vì có thể cần nó (trong trường hợp ước tính xấu)?
Mô tả được tìm thấy trên Technet có vẻ mơ hồ ..
4. "Đọc vật lý" trên Workfile nghĩa là gì?
Điều đó có nghĩa là không có đủ bộ nhớ được cấp cho truy vấn, vì vậy dữ liệu phải được ghi vào đĩa trong khi truy vấn thực thi (cảnh báo màu vàng trên Hash Match)? Tôi có thể giả sử rằng bất cứ khi nào tôi thấy worktable / workfile trong Statistics IO với các lần đọc vật lý, không có đủ bộ nhớ được cấp cho truy vấn và một số kết quả truy vấn trung gian phải ghi vào đĩa tempdb không? Và bất cứ khi nào tôi chỉ thấy đọc hợp lý, RAM được sử dụng?
5. Một "workfile" có nghĩa là chính xác một bảng được sử dụng cho một mục đích?
Nếu có nhiều hơn một workfile / worktable thì tôi không thể biết nó được sử dụng thao tác nào?