删除mysql 执行计划_如何清除某条SQL的执行计划

本文介绍了在Oracle数据库中如何清除特定SQL的执行计划,通过使用DBMS_SHARED_POOL.PURGE函数在11g中直接操作shared_pool,而在10g中则需要特定的事件设置。在SQL Server中,对于不同版本提供了不同的清除计划缓存的方法。此外,还提到了更新表统计信息以使游标失效的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果遇到绑定窥探导致执行计划慢的情况,想要清除某条SQL的执行计划,让它硬解析,找了很久都没有找到直接操作share pool的方法(除非alter system flush shared_pool),只能通过对表ddl使SQL硬解析。现在终于找到了,使用sys.dbms_shared_pool.purge

在11g下可以直接使用,但在10g上需要 alter session set events '5614566 trace name context forever'

--特定游标对象

SELECT ADDRESS, HASH_VALUE, EXECUTIONS, PARSE_CALLS

FROM V$SQL

WHERE SQL_ID = '7q9wc51p34my2';

00000007A4E9E040 1781682114 289583 289583

ALTER SESSION SET EVENTS '5614566 trace name context forever';

BEGIN

dbms_shared_pool.purge('00000007A4E9E040,1781682114','C');

END;

/

ALTER SESSION SET EVENTS '5614566 trace name context off';

--更新表的统计信息,使相关的游标对象失效

BEGIN

DBMS_STATS.GATHER_TABLE_STATS(OWNNAME          => 'username',

TABNAME          => 'tabname',

ESTIMATE_PERCENT => 100,

METHOD_OPT       => 'for all columns size skewonly',

CASCADE          => TRUE,

NO_INVALIDATE    => FALSE);  --使相关游标失效

END;

/

对于sqlserver

2008 R2以上版本可以直接使用dbcc命令清除指定计划: DBCC FREEPROCCACHE(plan_handle);

2005相对也比较麻烦,使用系统存储过程sp_create_plan_guide和sp_control_plan_guide处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值