zoukankan      html  css  js  c++  java
  • 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后就正常了。

     

  • 相关阅读:
    JVM01---简介
    SpringBoot-01创建项目,实例
    git的三种提交方式(目前两种)
    Spring-事务
    JDK及CGLIB动态代理-AOP4种增强
    Spring-静态代理
    Spring-Aop
    初识jvm-1.Java类的加载机制
    java公开课-06-实用类
    java公开课-05-集合及Socket网络编程(简介)
  • 原文地址:https://www.cnblogs.com/historynote/p/14150899.html
Copyright © 2011-2022 走看看