学习动态性能表(3)--v$sql&v$sql_plan

时间:2015-03-12 16:38:07   收藏:0   阅读:329

学习动态性能表

第三篇-(1)-v$sq 2007.5.25

 

V$SQL中存储具体的SQL语句。

 

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

例1

这里介绍以下child cursor

user A: select * from tbl

user B: select * from tbl

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

这个tblA看起来是一样的,但是不一定哦,一个是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中的列说明:

 

 

 

第三篇-(2)-V$SQL_PLAN  2007.5.28

 

  本视图提供了一种方式检查那些执行过的并且仍在缓存中的cursor的执行计划。

  通常,本视图提供的信息与打印出的EXPLAIN PLAN非常相似,不过,EXPLAIN PLAN显示的是理论上的计划,并不一定在执行的时候就会被使用,但V$SQL_PLAN中包括的是实际被使用的计划。获自EXPLAIN PLAN语句的执行计划跟具体执行的计划可以不同,因为cursor可能被不同的session参数值编译(如,HASH_AREA_SIZE)。

 

V$SQL_PLAN中数据可以:

  本视图同时也可被用于当成一种关键机制在计划对比中。计划对比通常用于下列各项发生改变时:

 

  如果之前的计划仍然在(例如,从V$SQL_PLAN选择出记录并保存到oracle表中供参考),那么就有可能去鉴别一条SQL语句在执行计划改变后性能方面有什么变化。

 

注意:

Oracle公司强烈推荐你使用DBMS_STATS包而非ANALYZE收集优化统计。该包可以让你平行地搜集统计项,收集分区对象(partitioned objects)的全集统计,并且通过其它方式更好的调整你的统计收集方式。此处,cost-based优化器将最终使用被DBMS_STATS收集的统计项。浏览Oracle9i Supplied PL/SQL包和类型参考以获得关于此包的更多信息。

 

不过,你必须使用ANALYZE语句而非DBMS_STATS进行统计收集,不涉及cost-based优化器,就像:

·使用VALIDATE或LIST CHAINED ROWS子句

·在freelist blocks上收集信息。

 

V$SQL_PLAN中的常用列:

 

除了一些新加列,本视图几乎包括所有的PLAN_TABLE列,那些同样存在于PLAN_TABLE中的列拥有相同的值:

 

CONNECT BY操作产生DEPTH列替换LEVEL伪列,有时被用于在SQL脚本中帮助indent PLAN_TABLE数据

 

V$SQL_PLAN中的连接列

  列ADDRESS,HASH_VALUE和CHILD_NUMBER被用于连接V$SQL或V$SQLAREA来获取cursor-specific信息,例如,BUFFER_GET,或连接V$SQLTEXT获取完整的SQL语句。

Column View                                                            Joined                 Column(s)

ADDRESS, HASH_VALUE                                   V$SQLAREA    ADDRESS, HASH_VALUE

ADDRESS,HASH_VALUE,CHILD_NUMBER     V$SQ     ADDRESS,HASH_VALUE,CHILD_NUMBER

ADDRESS, HASH_VALUE                                             V$SQLTEXT      ADDRESS, HASH_VALUE

 

 

确认SQL语句的优化计划

  下列语句显示一条指定SQL语句的执行计划。查看一条SQL语句的执行计划是调整优化SQL语句的第一步。这条被查询到执行计划的SQL语句是通过语句的HASH_VALUE和ADDRESS列识别。分两步执行:

 

1.SELECT sql_text, address, hash_value FROM v$sql

 WHERE sql_text like ‘%TAG%‘;

 

SQL_TEXT   ADDRESS  HASH_VALUE

--------  --------  ----------

          82157784  1224822469

 

 

2.SELECT operation, options, object_name, cost FROM v$sql_plan

 WHERE address = ‘82157784‘ AND hash_value = 1224822469;

 

OPERATION            OPTIONS       OBJECT_NAME        COST

-------------------- ------------- ------------------ ----

SELECT STATEMENT                                         5

  SORT

    AGGREGATE

      HASH JOIN                                          5

      TABLE ACCESS   FUL         DEPARTMENTS           2

      TABLE ACCESS   FUL         EMPLOYEES             2

 

原文:http://www.cnblogs.com/mq0036/p/4332687.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!