zoukankan      html  css  js  c++  java
  • 如何清除某条SQL的执行计划

    如果遇到绑定窥探导致执行计划慢的情况,想要清除某条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处理

  • 相关阅读:
    中文句子相似度之計算與應用
    《The Elder Scrolls V: Skyrim》百般冷门却强力职业
    《老滚5 》买房、娶老婆详尽攻略
    关于组播239.255.255.250
    Windows事件ID大全
    事件查看器常见ID代码解释
    Windows路由表详解
    两种动态加载JavaScript文件的方法
    80后的你们还记得这些游戏吗
    谷歌和HTTPS
  • 原文地址:https://www.cnblogs.com/zhaoguan_wang/p/5051938.html
Copyright © 2011-2022 走看看