当前,我们使用的是-T9481。如果我们运行DBCC TRACEOFF 9481以使用新的基数估计器,将立即生效。
假设我有一个经常运行的查询,并且在关闭T9481之前该高速缓存中有一个执行计划。如果在关闭-T9481之后执行同一个查询,它会立即生成一个新的执行计划,还是会使用缓存中的现有查询计划,该计划是用旧的基数估计器生成的,直到它被刷新为止?
尝试了解是在关闭后为所有查询生成新的查询计划-T9481,还是仍然使用在运行前生成的旧计划-T9481,直到这些计划被刷新。
当前,我们使用的是-T9481。如果我们运行DBCC TRACEOFF 9481以使用新的基数估计器,将立即生效。
假设我有一个经常运行的查询,并且在关闭T9481之前该高速缓存中有一个执行计划。如果在关闭-T9481之后执行同一个查询,它会立即生成一个新的执行计划,还是会使用缓存中的现有查询计划,该计划是用旧的基数估计器生成的,直到它被刷新为止?
尝试了解是在关闭后为所有查询生成新的查询计划-T9481,还是仍然使用在运行前生成的旧计划-T9481,直到这些计划被刷新。
1条答案
按热度按时间cngwdvgl1#
我在2019年测试了以下设置。
对于基数估计器模型版本70,估计将返回9行,对于基数估计器模型版本150,估计将返回20.0778行。
在“Actual execution plan enabled”(启用实际执行计划)的情况下运行以下命令,前2个计划的XML格式为
CardinalityEstimationModelVersion="150"
,估计值为20行,后2个计划的XML格式为CardinalityEstimationModelVersion="70"
,估计值为9行。这表明在更改跟踪标志之后,仍然可以重用缓存中的执行计划。
(The上面使用
EXEC
的原因是为了确保语句解析和编译在设置跟踪标志之后进行,并且还可以轻松地确保正在执行的语句完全相同(包括任何白色)