加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何从SQL Server查询缓存中删除特定的错误计划?

发布时间:2020-12-12 16:41:55 所属栏目:MsSql教程 来源:网络整理
导读:我们有一个特定的SQL Server 2008查询(不是存储过程,但是相同的SQL字符串 – 每5分钟执行一次)间歇性地缓存一个非常糟糕的查询计划. 此查询通常在几毫秒内运行,但是使用此错误的查询计划需要30秒. 如何从SQL Server 2008中手动删除一个错误的缓存查询计划,而
我们有一个特定的SQL Server 2008查询(不是存储过程,但是相同的SQL字符串 – 每5分钟执行一次)间歇性地缓存一个非常糟糕的查询计划.

此查询通常在几毫秒内运行,但是使用此错误的查询计划需要30秒.

如何从SQL Server 2008中手动删除一个错误的缓存查询计划,而不会吹掉生产数据库服务器上的整个查询缓存?

解决方法

我想出了一些事情
select * from sys.dm_exec_query_stats

将显示所有缓存的查询计划.不幸的是,那里没有显示SQL文本.

但是,您可以将SQL文本加入计划,如下所示:

select plan_handle,creation_time,last_execution_time,execution_count,qt.text
FROM 
   sys.dm_exec_query_stats qs
   CROSS APPLY sys.dm_exec_sql_text (qs.[sql_handle]) AS qt

从这里开始,添加一个WHERE子句来查找查询中我知道的SQL是非常简单的,然后我可以执行:

DBCC FREEPROCCACHE (plan_handle_id_goes_here)

从查询计划缓存中删除每个查询计划.不是很简单或方便,但它似乎工作..

编辑:转储整个查询缓存也会起作用,并且比听起来更危险,至少根据我的经验:

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读