Trường hợp một kế hoạch thực hiện đến từ đâu?


10

Có cách nào để tôi có thể xác định xem một kế hoạch vừa được tạo cho một truy vấn cụ thể hay đã được tìm thấy trong bộ đệm của kế hoạch không?

Câu trả lời:


9

SQL Server 2012 có một chỉ báo trong chính kế hoạch RetrievedFromCache, có thể là "đúng" hoặc "sai".

Đây dường như là tài sản bạn đang hỏi về.

Đây là một mẫu (dòng cuối cùng hiển thị thuộc tính):

<StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1" 
StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" 
StatementSubTreeCost="0.0508992" StatementText="SELECT COUNT(*) 
&#xD;&#xA;FROM sys.tables" StatementType="SELECT" 
QueryHash="0x9A4B63A948B30EA0" QueryPlanHash="0xF357CAE882D5B15D" 
RetrievedFromCache="true">

Thật không may, tôi không thấy bất cứ điều gì tương tự trong một kế hoạch được tạo bởi SQL Server 2008 R2.

Trong SQL Server 2008 R2, bạn có thể sử dụng sys.dm_exec_query_statsDMV hệ thống để kiểm tra creation_timecột cho các gói có cùng query_hashgiá trị. Hàm băm truy vấn có thể được lấy từ tiêu đề của XML kế hoạch (xem ví dụ ở trên). Truy vấn này sẽ trả về các hàng liên quan đến kế hoạch được đề cập ở trên:

SELECT *
FROM sys.dm_exec_query_stats qs
WHERE qs.query_hash = 0x9A4B63A948B30EA0;
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.