THIẾT LẬP THỐNG KÊ IO- worktable / workfile


21

Tôi đang thực hiện truy vấn, điều đó tạo ra kế hoạch: nhập mô tả hình ảnh ở đây

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?


Cảnh báo về trận đấu băm là gì? Đó có phải là sự cố tràn tempdb không?
Tom V - Đội bóng

@TomV, yes- tràn cấp 1 & mức tràn 2.
Jānis

Câu trả lời:


15

1. Tại sao Thống kê IO hiển thị số đọc cao hơn Profiler?

Không có ý kiến, xin lỗi. Thường có sự khác biệt bởi vì họ đang đo lường những thứ khác nhau như được đề cập trong bài viết cơ sở kiến ​​thức. Không có tài liệu bổ sung về điều này mà tôi biết. Bạn có thể có thể suy luận một số điều thông qua thử nghiệm chi tiết, nhưng thực sự không có gì đảm bảo bất cứ điều gì bạn tìm thấy sẽ vẫn nhất quán giữa các phiên bản và bản dựng. Các hành vi dự định là không nhất quán, trước khi tính toán các lỗi có thể xảy ra .

2. Sự khác biệt giữa "Worktable" và "Workfile" là gì

Cả hai đều là đối tượng nội bộ; mặt khác, đó là khá nhiều những gì mà các tên gợi ý: Một bảng làm việc có cấu trúc giống như bảng, một tệp công việc giống như tệp. Cấu trúc chi tiết không hiển thị, mặc dù một số tính năng rộng có thể được nhận thấy bằng cách kiểm tra các phương thức của chúng và theo các đường dẫn thực thi của chúng bằng trình gỡ lỗi.

3. Tại sao có "Worktable" trong trường hợp cụ thể này?

Một bảng làm việc luôn luôn cần thiết cho hoạt động băm (chế độ hàng). Nó được sử dụng nội bộ trong việc phân phối đầu vào thành các phân vùng băm (một thuật ngữ quá tải, không liên quan đến phân vùng bảng) và để theo dõi trạng thái. Tôi chưa bao giờ thấy một bảng làm việc băm báo cáo bất cứ điều gì khác ngoài số 0 trong đầu ra thống kê, nhưng sau đó tôi chưa bao giờ thực sự nhìn vào nó.

4. "Đọc vật lý" trên Workfile nghĩa là gì?

Các tệp công việc là một phần của cơ chế được sử dụng khi phân vùng băm tràn ra. Mặc dù không được ghi lại, các lần đọc vật lý và đọc trước xảy ra khi công cụ thực thi truy xuất các phân vùng băm bị tràn ra khỏi các tệp công việc.

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?

Như tôi nhớ lại, có thể có nhiều trường hợp. Không có cách nào tôi biết để liên kết một STATISTICS IOdòng cụ thể với một đối tượng hoặc nút kế hoạch cụ thể. Đây là một hạn chế lâu dài. Có thể có một thay đổi đối với điều này trong SQL Server 2016, mặc dù tôi chưa thử nghiệm xem nó có áp dụng cho các đối tượng tạm thời bên trong không.

Cuối cùng, không có nhiều hữu ích để học từ STATISTICS IOđầu ra cho các tệp công việc và các bảng công việc ngoài những gì bạn có thể tìm hiểu bằng cách xem thông tin khác trong kế hoạch hậu thực hiện (hoặc thông qua DMV, Sự kiện mở rộng, v.v.). Tôi xin lỗi vì câu trả lời không đầy đủ, nhưng đó là cách tốt nhất tôi có thể đưa ra khỏi đỉnh đầu.

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.