v$sql

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中的列说明

  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)

v$sql_plan

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

  通常,本视图提供的信息与打印出的EXPLAIN PLAN非常相似,不过,EXPLAIN PLAN显示的是理论上的计划,并不一定在执行的时候就会被使用,

但V$SQL_PLAN中包括的是实际被使用的计划。获自EXPLAIN PLAN语句的执行计划跟具体执行的计划可以不同,因为cursor可能被不同的session参数值编译(如,HASH_AREA_SIZE)。

V$SQL_PLAN中数据可以:

  确认当前的执行计划

  鉴别创建表索引效果

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

  鉴别索引的选择是否最优

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

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

  删除和新建索引

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

  修改初始参数值

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

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

如果之前的计划仍然在(例如,从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中的列拥有相同的值:

  ADDRESS:当前cursor父句柄位置

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

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

  CHILD_NUMBERs:使用这个执行计划的子cursor数

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

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

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

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

  OBJECT#: 表或索引对象数量

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

  OBJECT_NAME: 表或索引名

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

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

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

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

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

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

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

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

  OTHER_TAG: 其它列的内容说明。

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

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

  PARTITION_ID: 计算PARTITION_START和PARTITION_STOP这对列值的步数

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

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

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

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

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

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

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

  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$SQL ADDRESS,HASH_VALUE,CHILD_NUMBER

ADDRESS, HASH_VALUE V$SQLTEXT ADDRESS, HASH_VALUE

确认SQL语句的优化计划

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

select e.ename,d.deptno from emp e ,dept d where e.deptno=D.DEPTNO

SELECT sql_text, address, hash_value,PLAN_HASH_VALUE FROM v$sql WHERE sql_text like '%DEPTNO%'

SELECT operation, options, object_name, cost FROM v$sql_plan
WHERE address = '000000011564D538' AND hash_value = 1906432423; SELECT operation,options,object_owner,object_name,object_type,optimizer,id, cost,cardinality,bytes ,
cpu_cost , io_cost, access_predicates,filter_predicates,projection FROM v$sql_plan
WHERE address = '000000011564D538' AND hash_value = 1906432423;

1.查看某条SQL语句的资源消耗:

使用频率最高的5个sql

使用频率最高的5个sql
select sql_text,executions
from (select sql_text,executions,
rank() over
(order by executions desc) exec_rank
from v$sql)
where exec_rank <=5;
消耗磁盘最多的sql
select disk_reads,sql_text
from (select sql_text,disk_reads,
dense_rank() over
(order by disk_reads desc) disk_reads_rank
from v$sql)
where disk_reads_rank <=5;
找出需要大量缓冲读取操作的查询
select buffer_gets,sql_text
from (select sql_text,buffer_gets,
dense_rank() over
(order by buffer_gets desc) buffer_gets_rank
from v$sql)
where buffer_gets_rank<=5;
查看当前内存分配
select 'SGA' AS NAME,ROUND(sum(value)/1024/1024,2)||'M' AS "SIZE(M)" from v$sga
UNION
select 'PGA' AS NAME,ROUND(value/1024/1024,2)||'M' AS "SIZE(M)" from v$pgastat where name='total PGA allocated'
UNION
select 'TOTAL' AS NAME,((SELECT ROUND(sum(value)/1024/1024,2) from v$sga)+(select ROUND(value/1024/1024,2) from
v$pgastat where name='total PGA allocated'))||'M' AS "SIZE(M)" FROM DUAL
UNION
SELECT NAME,TO_CHAR(VALUE) FROM V$PGASTAT WHERE NAME='process count';

v$sqltext

本视图包括Shared pool中SQL语句的完整文本,一条SQL语句可能分成多个块被保存于多个记录内。

  注:V$SQLAREA只包括头1000个字符。

V$SQLTEXT中的常用列

  HASH_VALUE:SQL语句的Hash值

  ADDRESS:sql语句在SGA中的地址

  SQL_TEXT:SQL文本。

  PIECE:SQL语句块的序号

V$SQLTEXT中的连接列

Column     View     Joined Column(s)

HASH_VALUE, ADDRESS V$SQL, V$SESSION HASH_VALUE, ADDRESS

HASH_VALUE. ADDRESS V$SESSION SQL_HASH_VALUE, SQL_ADDRESS

示例:

 select * from v$sqltext
where hash_value=''
order by piece

v$sqlarea

本视图持续跟踪所有shared pool中的共享cursor,在shared pool中的每一条SQL语句都对应一列。本视图在分析SQL语句资源使用方面非常重要。

V$SQLAREA中的信息列

  HASH_VALUE:SQL语句的Hash值。

  ADDRESS:SQL语句在SGA中的地址。

这两列被用于鉴别SQL语句,有时,两条不同的语句可能hash值相同。这时候,必须连同ADDRESS一同使用来确认SQL语句。

  PARSING_USER_ID:为语句解析第一条CURSOR的用户

  VERSION_COUNT:语句cursor的数量

  KEPT_VERSIONS:

  SHARABLE_MEMORY:cursor使用的共享内存总数

  PERSISTENT_MEMORY:cursor使用的常驻内存总数

  RUNTIME_MEMORY:cursor使用的运行时内存总数。

  SQL_TEXT:SQL语句的文本(最大只能保存该语句的前1000个字符)。

  MODULE,ACTION:使用了DBMS_APPLICATION_INFO时session解析第一条cursor时的信息

V$SQLAREA中的其它常用列

  SORTS: 语句的排序数

  CPU_TIME: 语句被解析和执行的CPU时间

  ELAPSED_TIME: 语句被解析和执行的共用时间

  PARSE_CALLS: 语句的解析调用(软、硬)次数

  EXECUTIONS: 语句的执行次数

  INVALIDATIONS: 语句的cursor失效次数

  LOADS: 语句载入(载出)数量

  ROWS_PROCESSED: 语句返回的列总数

V$SQLAREA中的连接列

Column   View       Joined Column(s)

HASH_VALUE, ADDRESS V$SESSION SQL_HASH_VALUE, SQL_ADDRESS

HASH_VALUE, ADDRESS V$SQLTEXT, V$SQL, V$OPEN_CURSOR HASH_VALUE, ADDRESS

SQL_TEXT V$DB_OBJECT_CACHE NAME

示例:

1.查看消耗资源最多的SQL:
SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls
FROM V$SQLAREA
WHERE buffer_gets > 10000000 OR disk_reads > 1000000
ORDER BY buffer_gets + 100 * disk_reads DESC;
2.查看某条SQL语句的资源消耗:
SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls,SQL_TEXT
FROM V$SQLAREA
WHERE hash_Value = 1906432423 AND address = hextoraw('000000011564D538');
3 查看当前系统的最多消耗
SELECT osuser, a.username,cpu_time/executions/1000000||'s',executions,b.sql_text,machine
from v$session a, v$sqlarea b
where a.sql_address =b.address order by cpu_time/executions desc; select *
from (select v.sql_id,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
rank() over(order by v.elapsed_time desc) elapsed_rank
from v$sql v) a
where elapsed_rank <= 10;

v$sql_plan_statistcs

此视图为每个缓存的游标的执行计划中的每项操作提供执行统计信息。

Sql_id,executions,address,last_starts,starts,

转:oracle常见重要视图-v$sql,v$sql_plan,v$sqltext,v$sqlarea,v$sql_plan_statistcs的更多相关文章

  1. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...

  2. Access、SQLServer、Oracle常见SQL语句应用区别

    Access.SQLServer.Oracle常见SQL语句应用区别 关劲松 PMP 如果要兼容Access.SQL Server.Oracle三个数据库版本:我们在编写SQL语句的过程中,尽量使用一 ...

  3. Oracle常见的几种等待事件

    1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...

  4. 30种oracle常见的等待事件说明

    1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: 当一个会话视图修改一个数据块,但这 ...

  5. ORACLE 常见等待事件

    一. 等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候, ...

  6. oracle常见的等待事件说明

    转自 http://blog.itpub.net/29371470/viewspace-1063994/ 1. Buffer busy waits 从本质上讲,这个等待事件的产生仅说明了一个会话在等待 ...

  7. Oracle常见等待事件

    1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: ·         当一个会话视图 ...

  8. Oracle 常见hint

    Hints 应该慎用,收集相关表的统计信息,根据执行计划,来改变查询方式 只能在SELECT, UPDATE, INSERT, MERGE, or DELETE 关键字后面,只有insert可以用2个 ...

  9. Oracle常见的33个等待事件

    Buffer busy waits 原因:        当一个会话试图修改一个数据块,但这个数据块正在被另一个会话修改时.        当一个会话需要读取一个数据块,但这个数据块正在被另一个会话读 ...

随机推荐

  1. GBDT 总结文档

    在做阿里的o2o优惠券预测的时候学习了GBDT.听闻GBDT的威力,自然要学习学习. 接下来从以下几个方面记录下我对于GBDT的理解. GBDT的用途,优势 GBDT的结构和算法流程 GBDT如何训练 ...

  2. python 图像库PIL详解

    PIL详细文档 The most important class in the Python Imaging Library is the Image class, defined in the mo ...

  3. 最大流EK算法/DINIC算法学习

    之前一直觉得很难,没学过网络流,毕竟是基础知识现在重新来看. 定义一下网络流问题,就是在一幅有向图中,每条边有两个属性,一个是cap表示容量,一个是flow 表示流过的流量.我们要求解的问题就是从S点 ...

  4. Redis 数据备份与恢复,安全,性能测试,客户端连接,管道技术,分区(四)

    Redis 数据备份与恢复 Redis SAVE 命令用于创建当前数据库的备份. 语法 redis Save 命令基本语法如下: redis 127.0.0.1:6379> SAVE 实例 re ...

  5. Solr快速入门

    1. 什么是Solr Solr是基于lucene的全文检索服务器.不同于lucene工具包,solr是一个web应用,运行在servlet容器,屏蔽了底层细节,并对外提供服务. 点我lucene快速入 ...

  6. 【第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-J】 强迫症的序列

    小A是一个中度强迫症患者,每次做数组有关的题目都异常难受,他十分希望数组的每一个元素都一样大,这样子看起来才是最棒的,所以他决定通过一些操作把这个变成一个看起来不难受的数组,但他又想不要和之前的那个数 ...

  7. HTTPS 性能优化 -- 基于协议和配置的优化

    基于协议和配置的优化 1 前言 上文讲到 HTTPS 对用户访问速度的影响. 本文就为大家介绍 HTTPS 在访问速度,计算性能,安全等方面基于协议和配置的优化. 2 HTTPS 访问速度优化 2.1 ...

  8. DRF 用户频率限制

    DRF 用户频率限制 为什么要限流 1 防爬虫 匿名用户 无法限制,代理 已登录,用户名限制:买代理 2 提供服务(接口--不同用户的访问次数不一样) vip 限制访问次数 BaseThrottle ...

  9. 9.详解引擎(InnoDB,MyISAM)的内存优化攻略?

    整理自互联网!! 本篇我们讲解内存优化. 注意:以下都是在MySQL目录下的my.ini文件中改写. 一.InnoDB内存优化 InnoDB用一块内存区域做I/O缓存池,该缓存池不仅用来缓存InnoD ...

  10. VS2017 Product Key

    Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH