Oracle 性能调优之:使用 V$SQL_PLAN 视图查询内存中的执行计划

select

b.sid,a.sql_text,
p.options,
a.SHARABLE_MEM "占用的共享内存大小",
a.PERSISTENT_MEM "生命期内的固定内存大小",
a.RUNTIME_MEM "执行期内的固定内存大小",
a.SORTS "完成的排序数",
a.LOADED_VERSIONS "显示上下文堆是否载入",
a.OPEN_VERSIONS "显示子游标是否被锁",
a.USERS_OPENING "执行语句的用户数",
a.FETCHES "SQL语句的fetch数。",
a.EXECUTIONS "自它被载入缓存库后的执行次数",
a.USERS_EXECUTING "执行语句的用户数",
a.LOADS "对象被载入过的次数",
a.FIRST_LOAD_TIME "初次载入时间",
a.INVALIDATIONS "无效的次数",
a.PARSE_CALLS "解析调用次数",
a.DISK_READS "读磁盘次数",
a.BUFFER_GETS "读缓存区次数",
a.ROWS_PROCESSED "解析SQL语句返回的总列数",
a.COMMAND_TYPE "命令类型代号",
a.OPTIMIZER_MODE "SQL语句的优化器模型",
a.OPTIMIZER_COST "优化器给出的本次查询成本",
a.PARSING_USER_ID "第一个解析的用户ID",
a.PARSING_SCHEMA_ID "第一个解析的计划ID",
a.KEPT_VERSIONS "常驻内存",
a.ADDRESS "当前游标父句柄地址",
a.TYPE_CHK_HEAP "当前堆类型检查说明",
a.HASH_VALUE "缓存库中父语句的Hash值",
a.PLAN_HASH_VALUE "数值表示的执行计划。",
a.CHILD_NUMBER "子游标数量",
a.MODULE "模块名称",
a.ACTION "动作名称",
a.SERIALIZABLE_ABORTS "事务未能序列化次数",
a.OUTLINE_CATEGORY "各类",
a.CPU_TIME "CPU使用时间",
a.ELAPSED_TIME "等消耗时间",
a.OUTLINE_SID,
p.*


from v$sql a
inner join (select sql_hash_value, PLSQL_OBJECT_ID,sid from v$session where sid in (select session_id from v$locked_object)) b

on a.hash_value=sql_hash_value

inner join V$SQL_PLAN p on a.hash_value=p.hash_value

V$SQL_PLAN视图提供了一种方法,可用于检查仍位于库高速缓存的游标的执行计划。此视图中的信息与 PLAN_TABLE 视图中的信息非常类似。但是,EXPLAIN PLAN 显示的是执行相应语句时可以使用的理论,而V$SQL_PLAN 包含实际使用的计划。通过 EXPLAIN PLAN 语句获取的执行计划与用来执行游标的执行计划可能有所不同。原因在于,也许已经用不同的会话参数值编译了游标。
V$SQL_PLAN 显示一个游标的计划,并非与一个 SQL 语句相关联的所有游标的计划。区别在于,一个 SQL 语句可能包含多个与其相关联的游标,而每个游标都由 CHILD_NUMBER 标识。例如,如果某语句引用的对象在不同方案中,那么,不同用户执行此同一语句时所关联的游标会不同。同样,不同的提示会导致不同的游标。V$SQL_PLAN 表可用于查看同一语句不同子游标的不同计划。
注:另一有用的视图是 V$SQL_PLAN_STATISTICS,此视图为每个缓存的游标的执行计划中的每项操作提供执行统计信息。另外,V$SQL_PLAN_STATISTICS_ALL 视图将 V$SQL_PLAN 中的信息与 V$SQL_PLAN_STATISTICS 和 V$SQL_WORKAREA 中的执行统计信息连接在一起。

 

V$SQL_PLAN 的列
此视图几乎包含 PLAN_TABLE 中的所有列,还包含其它一些列。与 PLAN_TABLE 共有的列具有相同的值:
ADDRESS
HASH_VALUE
可以使用 ADDRESS 和HASH_VALUE 列与 V$SQLAREA 联接,以便添加特定于游标的信息。
可以使用 ADDRESS、HASH_VALUE 和 CHILD_NUMBER 列与 V$SQL 联接,以便添加特定于子游标的信息。
PLAN_HASH VALUE 列是游标的 SQL 计划的数字表达形式。通过比较两个计划的 PLAN_HASH_VALUE,可以轻松地确定这两个计划是否相同(而不必逐行比较这两个计划)。
注:从 Oracle Database 10g 起,V$SESSION 中的 SQL_HASH_VALUE 被 SQL_ID 取代,在许多其它V$ 视图中都可以检索出后者。SQL_HASH_VALUE 是 32 位的值,在存储 AWR 数据的大型资料档案库中,使用它不足以唯一地标识对象。SQL_ID 是 64 位的散列值,唯一性更高,其中的后 32 位为 SQL_HASH_VALUE。通常用字符串表示该值,以便简化管理。

原文地址:https://www.cnblogs.com/luluping/p/13592198.html