2010-03-31 33 views
11

Tôi đang cố gắng hiểu các toán tử vật lý trong các kế hoạch thực hiện SQL Server. Trang này là khá hữu ích:Toán tử vật lý trong kế hoạch thực thi SQL Server: rebinds, rewinds và số lần thực thi là gì?

http://technet.microsoft.com/en-us/library/ms191158.aspx

SSMS 2008 cho thấy một số tính chất vật lý điều hành không được hiển thị trong SSMS 2005: Estimated Number of ExecutionsNumber of Executions. Nhưng điều này thực sự có ý nghĩa gì và chúng có liên quan như thế nào với các rebinds và rewinds?

Estimated Number of Executions đặc biệt thú vị vì dường như nó không được lưu trữ trong XML. Vậy nó được tính như thế nào? Nó có vẻ bằng Estimated Rebinds + Estimated Rewinds + 1.0. Nhưng nếu đó là lý do tại sao là Number of Executions không bằng Actual Rebinds + Actual Rewinds + 1?

Cảm ơn.

+0

Điều này được giải thích rõ ràng trong "Điều chỉnh truy vấn và tối ưu hóa bên trong Microsoft SQL Server 2005" Chương 3 –

+2

Nó có thể được giải thích trong cuốn sách đó, nhưng không phải ai cũng có một bản sao của cuốn sách và/hoặc muốn mua nó trên Amazon . –

+1

@moontear - May mắn là chương có sẵn dưới dạng bản tải xuống miễn phí từ trang web đồng hành ["SQL Server 2008 Internals"] (http://www.sqlserverinternals.com/companion/) sau đó! –

Trả lời

7

Cuốn sách hơi nhỏ trong mô tả đó. Tua lại và Phục hồi chỉ áp dụng trong vòng lặp nối. Chúng đề cập đến việc sử dụng các giá trị thăm dò từ phần ngoài của vòng lặp đến phần bên trong của vòng lặp và chỉ được phản ánh trong các toán tử nhất định (tốn kém, vì vậy đáng để biết tần suất chúng bị thu hồi). Rebinds và Rewinds nên tương quan trực tiếp với số lần thực thi, không phải số + 1.

Số lần thực hiện, ước tính hoặc thực tế, là số lần nhà điều hành được gọi. Điều này có thể bị ảnh hưởng bởi rất nhiều thứ. Ví dụ trong một phép nối vòng lặp, bạn sẽ thấy nhiều cuộc gọi đến các toán tử trong nhánh bên ngoài tương ứng trực tiếp với số hàng trong nhánh bên trong. Bạn hoàn toàn sẽ thấy sự khác biệt giữa thực tế và ước tính.Trong trường hợp của một vòng lặp (ví dụ tuyệt vời để đánh bại trên) bạn sẽ thấy một giá trị ước tính của một trong vòng lặp bên trong, nhưng số thực tế thực thi sẽ được, như đã nêu, bằng số hàng ở bên ngoài.

+0

'Tua lại và Phục hồi chỉ áp dụng trong vòng lặp nối tiếp' không phải chúng cũng có thể áp dụng cho một số cuộn không? (lười biếng cuộn được cụ thể) – Akash

4

Tôi khuyên bạn nên đọc (và/hoặc tải xuống) eBook SQL Server Execution Plans bởi Grant Fritchey. Tải xuống dường như miễn phí.

Có một phần về rebindstua lại. Tôi không phải là chuyên gia về điều này, vì vậy tôi chỉ trích dẫn dòng dưới cùng của chương tương ứng:

Vậy điều này có ích cho DBA như thế nào? Nói chung, nó là lý tưởng nếu số lượng rebind và tua lại càng thấp càng tốt, khi số lượng cao hơn cho biết thêm I/O đĩa. Nếu số lượng cao, nó có thể chỉ ra rằng một nhà điều hành cụ thể đang làm việc khó hơn nó cần, làm tổn thương hiệu suất máy chủ . Nếu đúng như vậy, có thể viết lại truy vấn hoặc sửa đổi lập chỉ mục hiện tại để sử dụng một kế hoạch truy vấn khác sử dụng ít rebind và tua lại, giảm I/O và tăng hiệu suất. (p. 83)

Số lượng Executions là chỉ báo mức cao hơn cho số lượng rebinds và tua lại. Dưới đây là một trích dẫn khác:

Lưu ý rằng, không giống như kế hoạch văn bản, chỉ hiển thị EstimateExecutions, XML lập kế hoạch ước tính số lần rebind và tua lại. Điều này thường có thể cung cấp cho bạn ý tưởng chính xác hơn về những gì xảy ra trong truy vấn , chẳng hạn như cách nhiều lần toán tử được thực hiện. (p. 103)

Các vấn đề liên quan