不存在由于基数估计错误而导致的性能问题

问题描述 投票:0回答:1

寻求帮助来解决 EDW 加载过程中的执行计划回归问题。今天开始在每天运行且没有出现任何问题的 SP 中出现这种情况;没有任何代码更改或大量数据更改可能导致此问题。我已经追踪到一个如下所示的 SQL:

        SELECT ..
FROM TABLE_A A
WHERE NOT EXISTS(SELECT .. FROM TABLE_B B 
WHERE A.COLUMN_1=B.COLUMN_1
AND A.COLUMN_2=B.COLUMN_2)

检查上面 SELECT 的执行计划,它显示哈希匹配(左反半连接),估计行数为 1,而实际上它将返回超过 1000000 行。显然,错误的估计会影响计划的下游部分,上面 SELECT 的结果与其他表连接,并且查询永远不会完成。

寻找有关如何解决此问题的建议。理想情况下,希望确定一个不涉及 SQL 更改的短期修复,即操作统计数据、索引等,以减少所需的回归测试量。已尝试对两个表上的 COLUMN_1、COLUMN_2 进行多列统计 - 没有帮助。

这是在 SQL Server 2016 SP3 中执行的。

更新:根据帖子评论发布执行计划:

sql-server performance sql-server-2016 sql-execution-plan
1个回答
0
投票

如果直到今天为止都运行良好,没有任何问题,并且没有已知的原理图更改,请尝试通过执行以下两件事之一来破坏计划 -

首先你可以尝试重新编译存储过程 -

EXEC sp_recompile N'schema.procedure';

或者如果您知道的话,您可以找到回归查询并通过sql文本将其从计划缓存中删除-

SELECT p.plan_handle
     , t.text
FROM sys.dm_exec_cached_plans AS p
    CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS t
WHERE t.text LIKE '%textinyourquery%'
ORDER BY t.text;

DBCC FREEPROCCACHE(plan_handle_from_above_query);
© www.soinside.com 2019 - 2024. All rights reserved.