如果遇到绑定窥探导致执行计划慢的情况,想要清除某条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处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?