`

查看oracle数据库sql的实际执行计划

阅读更多

        在生产环境中,如果发现某SQL执行慢,要查看它的执行计划,有如下方法:

方法一:

        先查v$sqltext获得HASH_VALUE值,再通过HASH_VALUE值查询v$sql_plan获得此SQL的实际执行计划。

        实例:

        想知道如下SQL的实际执行计划

SELECT /*+ index(tt IX_TT_CREATED_DATE) */ to_char(tt.created_date,'YYYY-MM-DD'),count(1)
 FROM test_table tt
WHERE  tt.code IN('X01', 'X02', 'X333', 'X365')
 AND tt.created_time >= TO_DATE('2014-12-20', 'yyyy-mm-dd')
 AND tt.created_time < TO_DATE('2015-08-20', 'yyyy-mm-dd')
 group by to_char(tt.created_time,'YYYY-MM-DD');

        先查询v$sqltext获得HASH_VALUE值,如果未查询到记录,则可以先执行一下上面的SQL后再查

select * from v$sqltext t where t.SQL_TEXT like 'SELECT /*+ index(pbi IX_PBI_CREATED_DATE) */%'


        上面SQL执行的结果中的HASH_VALUE的值为3042406205,那么我们可以以它作为条件再查询v$sql_plan获得实际的执行计划。

select * from v$sql_plan t where t.HASH_VALUE = '3042406205';

        运行结果如下所示:

 

方法二:

        sqlpuls登录成功后(关于sqlplus的登陆配置,请参考Oracle的tnsnames.ora配置),先设置set linesize 200,然后输入explain plan for select * from table_name...,再执行SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);查询执行计划。


        还可以通过如下语句查看统计信息、SQL资源消耗。

select * from dba_tables a where a.table_name = upper('table_name');

select * from v$sql a where a.SQL_TEXT like 'select * from ...';
        如下所示:


 

PS:v$sql说明

        v$sql:一条语句可以映射多个 cursor,因为对象所指的 cursor可以有不同用户 (如例 1)。如果有多个 cursor(子游标 )存在,在 V$SQLAREA为所有 cursor提供集合信息。

实例:

        这里介绍以下 child cursor

        user A: select * from tbl

        user B: select * from tbl

        大家认为这两条语句是不是一样的啊,可能会有很多人会说是一样的,但我告诉你不一定,那为什么呢?

        这个 tbl A看起来是一样的,但是不一定哦,一个是 A用户的,一个是 B用户的,这时他们的执行计划分析代码差别可能就大了哦,改下写法大家就明白了:

        select * from A.tbl

        select * from B.tbl

  在个别 cursor上, v$sql可被使用。该视图包含 cursor级别资料。当试图定位 session或用户以分析 cursor时被使用。

   PLAN_HASH_VALUE列存储的是数值表示的 cursor执行计划。可被用来对比执行计划。PLAN_HASH_VALUE让你不必一行一行对比即可轻松鉴别两条执行计划是否相同。

V$SQL中的列说明:

        SQL_TEXT: SQL文本的前 1000个字符

        SHARABLE_MEM:占用的共享内存大小 (单位: byte)

        PERSISTENT_MEM:生命期内的固定内存大小 (单位: byte)

        RUNTIME_MEM:执行期内的固定内存大小

        SORTS:完成的排序数

        LOADED_VERSIONS:显示上下文堆是否载入, 1是 0否

        OPEN_VERSIONS:显示子游标是否被锁, 1是 0否

        USERS_OPENING:执行语句的用户数

        FETCHES: SQL语句的 fetch数。

        EXECUTIONS:自它被载入缓存库后的执行次数

        USERS_EXECUTING:执行语句的用户数

        LOADS:对象被载入过的次数

        FIRST_LOAD_TIME:初次载入时间

        INVALIDATIONS:无效的次数

        PARSE_CALLS:解析调用次数

        DISK_READS:读磁盘次数

        BUFFER_GETS:读缓存区次数

        ROWS_PROCESSED:解析 SQL语句返回的总列数

        COMMAND_TYPE:命令类型代号

        OPTIMIZER_MODE: SQL语句的优化器模型

        OPTIMIZER_COST:优化器给出的本次查询成本

        PARSING_USER_ID:第一个解析的用户 ID

        PARSING_SCHEMA_ID:第一个解析的计划 ID

        KEPT_VERSIONS:指出是否当前子游标被使用 DBMS_SHARED_POOL包标记为常驻内存

        ADDRESS:当前游标父句柄地址

        TYPE_CHK_HEAP:当前堆类型检查说明

        HASH_VALUE:缓存库中父语句的 Hash值

        PLAN_HASH_VALUE:数值表示的执行计划。

        CHILD_NUMBER:子游标数量

        MODULE:在第一次解析这条语句是通过调用 DBMS_APPLICATION_INFO.SET_MODULE设置的模块名称。

        ACTION:在第一次解析这条语句是通过调用 DBMS_APPLICATION_INFO.SET_ACTION设置的动作名称。

        SERIALIZABLE_ABORTS:事务未能序列化次数

        OUTLINE_CATEGORY:如果 outline在解释 cursor期间被应用,那么本列将显示出 outline各类,否则本列为空

        CPU_TIME:解析 /执行 /取得等 CPU使用时间 (单位,毫秒 )

        ELAPSED_TIME:解析 /执行 /取得等消耗时间 (单位,毫秒 )

        OUTLINE_SID: outline session标识

        CHILD_ADDRESS:子游标地址

        SQLTYPE:指出当前语句使用的 SQL语言版本

        REMOTE:指出是否游标是一个远程映象 (Y/N)

        OBJECT_STATUS:对象状态 (VALID or INVALID)

        IS_OBSOLETE:当子游标的数量太多的时候,指出游标是否被废弃 (Y/N)

 

参考资料:http://lizhiyu.iteye.com/blog/966626

  • 大小: 4.9 KB
  • 大小: 11.9 KB
  • 大小: 31 KB
  • 大小: 6.3 KB
  • 大小: 8.5 KB
分享到:
评论

相关推荐

    Oracle数据库调优之-SQL执行计划粗解

    举个实际的应用场景,如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统性能(资源)和阻塞的原因,那么基本可以断定是执行计划出了问题。简而言之,读懂和了解SQL的执行计划,是应用程序调优的...

    Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解 (黄玮) 高清PDF扫描版

    重点讲解执行计划在sql语句执行的生命周期中所处的位置和作用,sql引擎如何生成执行计划以及如何获取sql语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。 第二篇“sql优化技术”深入分析oracle的...

    基于Oracle的SQL优化 Part2

    《基于Oracle的SQL优化》从Oracle处理SQL的本质和原理入手,由浅入深、系统地介绍了Oracle数据库里的优化器、执行计划、Cursor和绑定变量、查询转换、统计信息、Hint和并行等这些与SQL优化息息相关的本质性内容,并...

    基于Oracle的SQL优化 Part1

    《基于Oracle的SQL优化》从Oracle处理SQL的本质和原理入手,由浅入深、系统地介绍了Oracle数据库里的优化器、执行计划、Cursor和绑定变量、查询转换、统计信息、Hint和并行等这些与SQL优化息息相关的本质性内容,并...

    Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解

    重点讲解执行计划在SQL语句执行的生命周期中所处的位置和作用,SQL引擎如何生成执行计划以及如何获取SQL语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。 第二篇“SQL优化技术”深入分析Oracle的SQL...

    Oracle高性能SQL引擎剖析

    重点讲解执行计划在SQL语句执行的生命周期中所处的位置和作用,SQL引擎如何生成执行计划以及如何获取SQL语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。, 第二篇“SQL优化技术”深入分析Oracle的...

    操作系统重装后oracle数据库的恢复

    重做操作系统后oracle数据库的恢复 文件夹中文件说明: ora.reg oracle主要注册项的恢复参考文件 oraodbc.reg odbc驱动项的恢复参考文件 oraole1~4.reg ole 驱动项的恢复参考文件 恢复中重要操作说明: 1、恢复前提...

    探讨:Oracle数据库查看一个进程是如何执行相关的实际SQL语句

    Oracle数据库查看一个进程是如何执行相关的实际SQL语句 代码如下:SELECT b.sql_text, sid, serial#, osuser, machine FROM v$session a, v$sqlarea b WHERE a.sql_address = b.address; 查询前台发出的SQL语句. ...

    Oracle 高性能SQL引擎剖析SQL优化与调优机制详解

    Oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是SQL性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖OracleSQL优化与调优技术,主要内容包括: 第一篇“执行计划”...

    Oracle数据库中大型表查询优化研究

    在实际应用中,往往采用各种优化措施,使得SQL查询经过数据库优化器的处理,得到最佳的执行计划,即数据访问路径,来达到提高响应速度的目的。由于项目采用的是Oracle数据库,以下考虑对Oracle数据库进行的优化情况...

    ORACLE数据库中SQL优化解析

    本文介绍了SQL的执行过程,ORACLE优化器的基本原理,优化器的选择和应用,以及如何建立 和管理索引来提高程序的执行效率。并以实际工作经验介绍了优化工具以及提出对SQL优化的体会。

    Oracle 中如何对会话的所有SQL进行跟踪?

    1、目的:在实际工作中,有时需将某个程序执行的所有SQL查出来,而程序在Oracle中与会话均可对应,故可通过本文脚本对会话的所有SQL进行跟踪,转换后即可还原程序对Oracle的操作。 2、适用场景:在源码无法拿到,但...

    从一个“普通”的Oracle DBA(Oracle数据库管理员)转变为Oracle Applications DBA(Oracle应用程序数据库管理员)

    从一个“普通”的Oracle DBA(Oracle数据库管理员)转变为Oracle Applications DBA(Oracle应用程序数据库管理员),有两个内容你必须去弄清楚。第一个内容是如何成为一个Oracle Applications DBA(Oracle应用程序...

    SQL编写规范(数据库操作规范)

    8.用执行计划分析SQL性能    EXPLAIN PLAN是一个很好的分析SQL语句的工具,它可以在不执行SQL的情况下分析语句    通过分析,我们就可以知道ORACLE是怎样连接表,使用什么方式扫描表(索引扫描或全表扫描),...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7...

    oracle数据库经典题目

    系统权限提供了在Oracle数据库系统范围内执行某种任务的操作能力,而对象权限则是一种赋予用户在指定的数据库对象(如表、视图、过程等) 16. Oralce数据库在进行物理备份有联机备份和脱机备份两种方式可供选择。 ...

    SQL Monitor for Oracle,MySQL和DB2 v2.4.3.6 中文绿色版

    SQL Monitor for Oracle,MySQL and DB2 是款免费的数据库跟踪工具,专门用来分析CPU使用率高的问题。 软件功能: 1. 监控SQL Server的进程和Job,查看当前执行的SQL/命令,并终止之。 2. 对象浏览器,跟 SQL Server...

    Oracle11g从入门到精通

    从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用开发基础,并通过两个完整案例来介绍基于Java开发包和Oracle数据库...

Global site tag (gtag.js) - Google Analytics