• Oracle执行计划的查看


    前言

      一个系统在刚开始的时候,由于数据库中数据量不大,开发人员的主要精力都在业务与功能实现上。系统完成部署上线后随着时间的累积,每个表中的数据都在不断增长,我们往往会发现系统越来越慢,这可能是程序设计不合理,也可能是代码质量不高,也可能是业务流程问题,但是作为DBA或者负责数据库调优的工程师更应该想想是否是数据库方面的问题。数据库问题有很多种,作为开发人员主要关注SQL语句的合理性,至于数据库的其它问题可以暂时交给DBA去处理。对SQL语句调优,很重要的一点是查看SQL语句的执行计划。本文将简单介绍如何查看Oracle数据库中的执行计划。

    执行计划的清除

      Oracle数据库的执行计划实际都存储在plan_table这张表中,也许已经有人做过查看执行计划的工作,那么plan_table中必然存在很多历史的执行计划。为了不影响之后的工作,最好能将之前的执行计划都删除。

      首先,我们先以sysdba账号通过sqlplus连接Oracle:

    [oracle@ab23133 ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 10.2.0.5.0 - Production on Mon May 19 15:56:14 2014
    
    Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.
    
    
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options

      然后删除plan_table这张表:

    SQL> drop table plan_table;
    
    Table dropped.

      最后退出sqlplus:

    SQL> drop table plan_table;
    
    Table dropped.

    重新开启执行计划

      我们再次以sysdba账号通过sqlplus连接Oracle,开启执行计划的步骤如下:

      1、重新创建收集执行计划的表plan_table;

    SQL> @?/rdbms/admin/utlxplan.sql;
    
    Table created.

      2、创建plan_table这张表的别名,因为同义词可以节省大量的数据库空间,不同用户操作同一张表时不会有多少差别。

    SQL> create public synonym plan_table  for plan_table;
    
    Synonym created.

      3、给我们自己的账号myaccount授予plan_table表的所有权限; 

    SQL> grant all on plan_table to myaccount;
    
    Grant succeeded.

      4、创建plustrace角色;

    SQL> @?/sqlplus/admin/plustrce.sql
    SQL> create role plustrace;
    
    Role created.

      5、将给角色添加访问以下视图的权限;

    SQL> grant select on v_$sesstat to plustrace;
    
    Grant succeeded.
    
    SQL> grant select on v_$statname to plustrace;
    
    Grant succeeded.
    
    SQL> grant select on v_$mystat to plustrace;
    
    Grant succeeded.
    
    SQL> grant plustrace to dba with admin option;
    
    Grant succeeded.

      6、设置不把输出的结果显示在屏幕上;

    SQL> set echo off

      7、将plustrace角色授权给账号myaccount;

    SQL> grant plustrace to myaccount;
    
    Grant succeeded.

      8、使用账号myaccount连接Oracle;

    SQL> conn myaccount/myaccount;
    Connected.

      9、设置只查看执行计划的统计信息;

    set autotrace traceonly statistics;

    应用举例

      我们以下面的SQL为例,来查看其执行计划:

    SQL> select * from t_recharge_info where recharge_sid='14051317413765487300000002';
    
    
    Statistics
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
             23  consistent gets
              0  physical reads
              0  redo size
           2093  bytes sent via SQL*Net to client
            492  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed

    从上面的SQL例子,我们看到输出了这条SQL的执行计划的统计信息,要设置查看执行计划,可以执行以下命令:

    SQL> set autotrace on explain;

    总结

      从Oracle执行计划的配置我们了解到,只需要跟着这些步骤就可以查看SQL的执行计划及统计信息。这些内容比较简单,没有什么深奥的原理,写此博文是为了方便记忆,为将来做个备忘。

     

  • 相关阅读:
    模拟title提示!
    常用CSS缩写语法总结
    cron表达式每个月最后一天,corn表达式使用L报错
    浏览器调试器(F12)详解
    查询重复数据只显示一条并且在规定范围时间内
    java导出统计数据excel设置单元格样式
    微信小程序官方人脸核身认证
    小程序引用app.js中的全局变量
    微信小程序 view中的image水平垂直居中
    MYSQL中的sql_mode模式
  • 原文地址:https://www.cnblogs.com/jiaan-geng/p/4980008.html
Copyright © 2020-2023  润新知