• v$lock查询慢原来是MERGE JOIN CARTESIAN


    查询v$LOCK视图耗时四十多秒

     执行计划如下:

     出现了MERGE JOIN CARTESIAN ,难怪慢。

    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KSUSE');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KSQRS');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KDNSSF');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KSQEQ');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KTADM');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KTATRFIL');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KTATRFSL');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KTATL');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KTSTUSC');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KTSTUSS');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KTSTUSG');
    exec dbms_stats.gather_table_stats(OWNNAME=>'SYS',tabname=>'X$KTCXB');

    收集统计信息后再次执行还是慢,耗时是一样的,执行计划也还是一样,那就禁止merge join cartesian。

    禁止执行 merge join cartesian,可以在系统级别设置隐含参数_optimizer_mjc_enabled=false;

    alter system set "_optimizer_mjc_enabled" = false;

    也可以在SESSION级别设置_optimizer_mjc_enabled=false;

    alter session set "_optimizer_mjc_enabled" = false;

    还可以在单个SQL级别使用HINT来禁止,/*+ OPT_PARAM('_optimizer_mjc_enabled','false') */。

    select */*+ OPT_PARAM('_optimizer_mjc_enabled','false')*/ from v$lock;

    加上hint后就正常了。

     

  • 相关阅读:
    IO细述
    如何对HashMap按键值排序
    Java编程思想重点
    Java笔试题解答和部分面试题
    mysql优化
    MySQL 创建数据库并且指定编码
    JDBC 工具类
    JSP include标签和include指令
    SpingMVC ModelAttribute的用法
    Java 获取amr音频格式的音频长度
  • 原文地址:https://www.cnblogs.com/historynote/p/14150899.html
Copyright © 2020-2023  润新知