Mag*_*ier 10 sql-server execution-plan sql-server-2008-r2 cache
有没有办法可以确定计划是为特定查询生成的,还是在计划缓存中找到的?
SQL Server 2012 在计划本身中有一个指示符RetrievedFromCache,它可以是“真”或“假”。
这似乎是您要询问的财产。
这是一个示例(最后一行显示属性):
<StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1"
StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound"
StatementSubTreeCost="0.0508992" StatementText="SELECT COUNT(*)

FROM sys.tables" StatementType="SELECT"
QueryHash="0x9A4B63A948B30EA0" QueryPlanHash="0xF357CAE882D5B15D"
RetrievedFromCache="true">
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在 SQL Server 2008 R2 生成的计划中没有看到任何类似的内容。
在 SQL Server 2008 R2 中,您可以使用sys.dm_exec_query_stats系统 DMV 检查creation_time具有相同query_hash值的计划的列。查询哈希可以从计划 XML 的标题中获得(参见上面的示例)。此查询将返回有关上述计划的行:
SELECT *
FROM sys.dm_exec_query_stats qs
WHERE qs.query_hash = 0x9A4B63A948B30EA0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |