`
阅读更多

一条语句可以映射多个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中的列说明:

l         SQL_TEXTSQL文本的前1000个字符

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

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

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

l         SORTS:完成的排序数

l         LOADED_VERSIONS:显示上下文堆是否载入,10

l         OPEN_VERSIONS:显示子游标是否被锁,10

l         USERS_OPENING:执行语句的用户数

l         FETCHESSQL语句的fetch数。

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

l         USERS_EXECUTING:执行语句的用户数

l         LOADS:对象被载入过的次数

l         FIRST_LOAD_TIME:初次载入时间

l         INVALIDATIONS:无效的次数

l         PARSE_CALLS:解析调用次数

l         DISK_READS:读磁盘次数

l         BUFFER_GETS:读缓存区次数

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

l         COMMAND_TYPE:命令类型代号

l         OPTIMIZER_MODESQL语句的优化器模型

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

l         PARSING_USER_ID:第一个解析的用户ID

l         PARSING_SCHEMA_ID:第一个解析的计划ID

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

l         ADDRESS:当前游标父句柄地址

l         TYPE_CHK_HEAP:当前堆类型检查说明

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

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

l         CHILD_NUMBER:子游标数量

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

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

l         SERIALIZABLE_ABORTS:事务未能序列化次数

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

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

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

l         OUTLINE_SIDoutline session标识

l         CHILD_ADDRESS:子游标地址

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

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

l         OBJECT_STATUS:对象状态(VALID or INVALID)

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

(2)-V$SQL_PLAN 

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

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

V$SQL_PLAN中数据可以:

l         确认当前的执行计划

l         鉴别创建表索引效果

l         寻找cursor包括的存取路径(例如,全表查询或范围索引查询)

l         鉴别索引的选择是否最优

l         决定是否最优化选择的详细执行计划(如,nested loops join)如开发者所愿。

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

l         删除和新建索引

l         在数据库对象上执行分析语句

l         修改初始参数值

l         rule-based切换至cost-based优化方式

l         升级应用程序或数据库到新版本之后

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

注意:

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

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

·使用VALIDATELIST CHAINED ROWS子句

·在freelist blocks上收集信息。

V$SQL_PLAN中的常用列:

 

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

l         ADDRESS:当前cursor父句柄位置

l         HASH_VALUE:在library cache中父语句的HASH值。

ADDRESSHASH_VALUE这两列可以被用于连接v$sqlarea查询 cursor-specific 信息。

l         CHILD_NUMBER:使用这个执行计划的子cursor

ADDRESS,HASH_VALUE以及CHILD_NUMBER可被用于连接v$sql查询子cursor信息。

l         OPERATION: 在各步骤执行内部操作的名称,例如:TABLE ACCESS

l         OPTIONS: 描述列OPERATION在操作上的变种,例如:FULL

l         OBJECT_NODE: 用于访问对象的数据库链接database link 的名称对于使用并行执行的本地查询该列能够描述操作中输出的次序。

l         OBJECT#: 表或索引对象数量

l         OBJECT_OWNER: 对于包含有表或索引的架构schema 给出其所有者的名称

l         OBJECT_NAME: 表或索引名

l         OPTIMIZER: 执行计划中首列的默认优化模式;例如,CHOOSE。比如业务是个存储数据库,它将告知是否对象是最优化的。

l         ID: 在执行计划中分派到每一步的序号。

l         PARENT_ID: ID 步骤的输出进行操作的下一个执行步骤的ID

l         DEPTH: 业务树深度(或级)

l         POSITION: 对于具有相同PARENT_ID 的操作其相应的处理次序。

l         COST: cost-based方式优化的操作开销的评估,如果语句使用rule-based方式,本列将为空。

l         CARDINALITY: 根据cost-based方式操作所访问的行数的评估。

l         BYTES: 根据cost-based方式操作产生的字节的评估,。

l         OTHER_TAG: 其它列的内容说明。

l         PARTITION_START: 范围存取分区中的开始分区。

l         PARTITION_STOP: 范围存取分区中的停止分区。

l         PARTITION_ID: 计算PARTITION_STARTPARTITION_STOP这对列值的步数

l         OTHER: 其它信息即执行步骤细节,供用户参考。

l         DISTRIBUTION: 为了并行查询,存储用于从生产服务器到消费服务器分配列的方法

l         CPU_COST: 根据cost-based方式CPU操作开销的评估。如果语句使用rule-based方式,本列为空。

l         IO_COST: 根据cost-based方式I/O操作开销的评估。如果语句使用rule-based方式,本列为空。

l         TEMP_SPACE: cost-based方式操作(sort or hash-join)的临时空间占用评估。如果语句使用rule-based方式,本列为空。

l         ACCESS_PREDICATES: 指明以便在存取结构中定位列,例如,在范围索引查询中的开始或者结束位置。

l         FILTER_PREDICATES: 在生成数据之前即指明过滤列。

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

V$SQL_PLAN中的连接列

  列ADDRESS,HASH_VALUECHILD_NUMBER被用于连接V$SQLV$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$SQL       ADDRESS,HASH_VALUE,CHILD_NUMBER

ADDRESS, HASH_VALUE                                    V$SQLTEXT      ADDRESS, HASH_VALUE

确认SQL语句的优化计划

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

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   FULL          DEPARTMENTS           2

      TABLE ACCESS   FULL          EMPLOYEES             2

分享到:
评论

相关推荐

    Oracle v$sqlarea, v$sql, v$sqltext视图说明

    简单描述Oracle v$sqlarea, v$sql, v$sqltext视图说明

    oracle_V$SQLAREA_.rar_oracle_oracle V$sqlarea

    1. **SQL语句文本**:`SQL_TEXT` 列存储了SQL语句的前4000个字符。如果SQL语句超过4000个字符,可以通过`CHILDREN`列找到相关的子SQL(child cursor)来获取完整的文本。 2. **执行计划**:`SQL_PLAN` 列提供了SQL...

    v$sqlarea top sql 查询举例

    根据提供的文件信息,本文将详细解释如何通过 `v$sqlarea` 视图查询实例中的 Top SQL,以便快速定位性能瓶颈或资源消耗高的 SQL 语句。以下内容将深入解析每种查询方法及其背后的原理。 ### 知识点一:通过 Buffer ...

    oracle 动态性能视图 (x$, v$, gv$, v_$, gv_$)

    V$系列视图是对X$视图的一种封装,它们通过SQL视图的形式呈现X$视图的数据,使得普通用户也能够以更安全、更易于理解的方式访问数据库的实时状态信息。V$视图包括了如`V$SESSION`(会话信息)、`V$DATABASE`(数据库...

    v$sql_plan[总结].pdf

    v$sql_plan视图 v$sql_plan视图提供了一种方式检查那些执行过的并且仍在缓存中的cursor 的执行计划。通常,本视图提供的信息与打印出的EXPLAIN PLAN非常相似,不过, EXPLAIN PLAN显示的是理论上的计划,并不一定在...

    oracle 动态性能(V$)视图

    1. **执行计划分析**:如V$SQL、V$SQLAREA和V$SQLTEXT,这些视图存储了SQL语句的相关信息,包括执行计划、统计信息和绑定变量等,对SQL性能分析至关重要。 2. **资源使用情况**:V$SESSION、V$SESSION_WAIT和V$...

    查找运行系统里bad sql

    1. 使用 V$SQLAREA 视图查找执行次数多的 SQL。V$SQLAREA 视图提供了 SQL 语句的执行信息,包括执行次数、buffer_gets 等。可以使用以下 SQL 语句查找执行次数多的 SQL: ``` select * from ( select buffer_gets,...

    oracle_v$session_v$session_wait用途详解

    SELECT * FROM v$sqltext WHERE address = :sql_address AND hash_value = :sql_hash_value; ``` - **行等待信息查询** - 通过 `ROW_WAIT_OBJ#`, `ROW_WAIT_FILE#`, `ROW_WAIT_BLOCK#`, `ROW_WAIT_ROW#` 可以...

    oraclev$sessionv$session_wait用途详解

    3. **等待原因**:结合`v$session_wait`与其他视图(如`v$lock`、`v$sqltext`),可以深入分析等待事件的具体原因,例如锁定冲突的根源或慢SQL语句。 ### 使用示例与场景 - **性能调优**:当数据库响应变慢时,...

    性能调优分析之:Oracle SQL执行计划报告生成器

    Oracle SQL执行计划分析器...(View Create Script v1.0.sql) 如果出现没权限访问GV$SQL_PLAN_MONITOR这些对象,请先用sys用户赋值。 3 最后,编译XYG_ALD_SESS_PKG的包体。完工! (XYG_ALD_SESS_PKG_BODY.sql)

    Oracle的V$性能视图学习大全

    此外,V$视图家族中的V$SQLAREA、V$SQLTEXT、V$SESSION和V$SESS_IO等视图,可以用来查询和分析SQL语句的执行状态和性能。通过这些视图,DBA可以识别出执行时间长、占用资源多的SQL查询,进而对查询语句进行优化。 ...

    oracle监听执行sql语句

    1. **使用`v$session`和`v$sqlarea`视图** ```sql SELECT a.username, a.sid, b.SQL_TEXT, b.SQL_FULLTEXT FROM v$session a, v$sqlarea b WHERE a.sql_address = b.address; ``` 这条SQL语句通过连接`v$...

    查询Oracle中正在执行和执行过的SQL语句

    查询Oracle正在执行的sql语句及执行该语句的用户 ...FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value 其它网友给出的正在执行的sql语句代码 select a.u

    oracle 查看当前会话执行的sql语句

    select SQL_TEXT from v$sqlarea where address = (select sql_address from v$session where sid = ***); ``` 这里的`***`代表要查询的SID值。 #### 6. 监控SQL执行情况 对于更高级的监控需求,我们还可以查看...

    dba_*表和v$表

    比如,`v$session`显示当前活跃的会话信息,`v$sql`收集了最近执行的SQL语句及其统计信息,而`v$waitstat`则提供了等待事件的详细数据。这些视图对于性能调优尤其关键,DBA可以通过分析这些信息找出性能瓶颈,优化...

    Oracle数据库各类指标统计的SQL语句

    SELECT * FROM V$SQLAREA WHERE PHYSICAL_READ_REQUESTS = (SELECT MAX(PHYSICAL_READ_REQUESTS) FROM V$SQLAREA); ``` 十一、磁盘读取物理最大用户 磁盘读取物理最大用户是指当前数据库中执行的 SQL 语句中磁盘...

    SQL优化器相关知识 精品资料.pptx

    1. V$SQL_PLAN视图:提供SQL语句的执行计划信息,包括执行计划的详细信息和执行统计信息。 2. V$SQL_PLAN_STATISTICS视图:提供SQL语句的执行计划统计信息,包括执行计划的详细信息和执行统计信息。 3. V$SQL_PLAN_...

Global site tag (gtag.js) - Google Analytics