- 浏览: 557925 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (340)
- Spring (4)
- Hibernate (2)
- Linux (34)
- Oracle (145)
- Eclipse (1)
- UML (1)
- HTML&&JAVASCRIPT (11)
- JAVA (33)
- 设计模式 (1)
- 版本控制 (1)
- wrap框架 (3)
- IBATIS (5)
- Ruby (1)
- DWR (1)
- MINA (11)
- JBPM (2)
- 缓存技术 (4)
- 网络 (3)
- 应用服务器 (1)
- GWT (5)
- 杂谈 (2)
- ICE (4)
- XML (2)
- ArcGis (2)
- Flex (8)
- junit单元测试 (1)
- SNMP (1)
- 存储 (1)
- office (1)
- MongoDB (0)
- Greenplum (3)
- 管理点滴 (1)
- C++ (6)
- 网络入门 (3)
- Tomcat (7)
- JMX (0)
- webservice (1)
- Oracle的10046事件 (1)
- Library cache内部机制详解 (1)
- expdp通过dblink来导入 (1)
最新评论
-
yuanliangding:
有没有关于mock的更多知识。
基于mock对象和JUnit框架简化Spring Web组件单元测试 -
saup007:
ssh端口不是22,怎么搞呢?
Greenplum 学习笔记 -
springmvc-freemarker:
java开源项目源码实例下载
Apache上全部JAVA开源项目简介 -
bobbell:
哇塞,你真厉害,整理的非常全面。我是一个java barcod ...
Greenplum 学习笔记 -
wsj55133245513324:
这不是bug,你将日志级别从debug提升到INFO 就好了 ...
Spring,smppapi,apache mina, ssl快速实现安全的smpp(5)
一条语句可以映射多个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_TEXT:SQL文本的前1000个字符
l SHARABLE_MEM:占用的共享内存大小(单位:byte)
l PERSISTENT_MEM:生命期内的固定内存大小(单位:byte)
l RUNTIME_MEM:执行期内的固定内存大小
l SORTS:完成的排序数
l LOADED_VERSIONS:显示上下文堆是否载入,1是0否
l OPEN_VERSIONS:显示子游标是否被锁,1是0否
l USERS_OPENING:执行语句的用户数
l FETCHES:SQL语句的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_MODE:SQL语句的优化器模型
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_SID:outline 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优化器,就像:
·使用VALIDATE或LIST CHAINED ROWS子句
·在freelist blocks上收集信息。
V$SQL_PLAN中的常用列:
除了一些新加列,本视图几乎包括所有的PLAN_TABLE列,那些同样存在于PLAN_TABLE中的列拥有相同的值:
l ADDRESS:当前cursor父句柄位置
l HASH_VALUE:在library cache中父语句的HASH值。
ADDRESS和HASH_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_START和PARTITION_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_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列识别。分两步执行:
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
发表评论
-
expdp通过dblink来导入
2011-12-14 15:01 1789create.sql: spo create.log rem ... -
Library cache内部机制详解
2011-12-14 14:55 893Library cache内部机制详解 http://www ... -
Oracle的10046事件
2011-12-14 14:53 2098Oracle的10046事件,可以跟踪应用程序所执行的SQL语 ... -
REDO LOG MEMBER STATUS 和 REDO LOG GROUP STATUS
2011-12-14 14:51 928V$LOG 中列出的是REDO LOG GROUP STA ... -
oracle的exp/imp使用方法学习(转)
2011-08-30 08:54 964exp/imp两个命令可以说是oracle中最常用的命令了 ... -
oracle几个awr报告
2011-08-09 14:25 900工作中,碰到的数据库慢的几个awr报告 -
Oracle Profile 使用详解
2011-06-21 14:41 972一、目的: Oracle系统中的profile可以用来对 ... -
ORA-27013
2011-04-13 14:25 1516很新的一个bug,看下你的 memory_target是不是& ... -
ACLE表连接方式分析及常见用法
2011-03-23 09:14 1115摘要: 针对在数据仓库 ... -
ORACLE 外部表应用
2011-03-09 14:58 1068SQL> create or replace direc ... -
How to convert a 32-bit database to 64-bit database on Linux
2011-02-18 14:09 1216How to convert a 32-bit databas ... -
expdp impdp 数据库导入导出命令详解
2011-02-16 09:10 1957一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最 ... -
Oracle手工解/锁表
2011-01-25 14:15 2507手工锁表:lock table tbl_t1 in row ... -
oracle动态性能视图
2011-01-22 10:47 862Oracle动态性能视图个人整理 -
RBO规则介绍
2011-01-17 16:45 1082•无条件使用索引•使用内置的优先级别决定访问路径•比较难以 ... -
关于排序、sort_area_size、临时表空间
2011-01-13 15:30 1120简单陈述一下:针对每 ... -
创建索引ORACLE 需要做的工作
2011-01-13 14:53 1324一. 先来看一下创建索引要做哪些操作:1. 把inde ... -
表之间的连接
2011-01-13 10:42 798Join是一种试图将两个表结合在一起的谓词,一次只能连接2 ... -
重建索引的条件
2011-01-12 16:43 955如果索引存在碎片,那每个索引数据块上的索引数据就更少,会导致我 ... -
TKPROF使用学习
2011-01-10 17:38 726Tkprof工具可用来格式化sql trace产生的文件, ...
相关推荐
简单描述Oracle v$sqlarea, v$sql, v$sqltext视图说明
1. **SQL语句文本**:`SQL_TEXT` 列存储了SQL语句的前4000个字符。如果SQL语句超过4000个字符,可以通过`CHILDREN`列找到相关的子SQL(child cursor)来获取完整的文本。 2. **执行计划**:`SQL_PLAN` 列提供了SQL...
根据提供的文件信息,本文将详细解释如何通过 `v$sqlarea` 视图查询实例中的 Top SQL,以便快速定位性能瓶颈或资源消耗高的 SQL 语句。以下内容将深入解析每种查询方法及其背后的原理。 ### 知识点一:通过 Buffer ...
V$系列视图是对X$视图的一种封装,它们通过SQL视图的形式呈现X$视图的数据,使得普通用户也能够以更安全、更易于理解的方式访问数据库的实时状态信息。V$视图包括了如`V$SESSION`(会话信息)、`V$DATABASE`(数据库...
v$sql_plan视图 v$sql_plan视图提供了一种方式检查那些执行过的并且仍在缓存中的cursor 的执行计划。通常,本视图提供的信息与打印出的EXPLAIN PLAN非常相似,不过, EXPLAIN PLAN显示的是理论上的计划,并不一定在...
1. **执行计划分析**:如V$SQL、V$SQLAREA和V$SQLTEXT,这些视图存储了SQL语句的相关信息,包括执行计划、统计信息和绑定变量等,对SQL性能分析至关重要。 2. **资源使用情况**:V$SESSION、V$SESSION_WAIT和V$...
1. 使用 V$SQLAREA 视图查找执行次数多的 SQL。V$SQLAREA 视图提供了 SQL 语句的执行信息,包括执行次数、buffer_gets 等。可以使用以下 SQL 语句查找执行次数多的 SQL: ``` select * from ( select buffer_gets,...
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#` 可以...
3. **等待原因**:结合`v$session_wait`与其他视图(如`v$lock`、`v$sqltext`),可以深入分析等待事件的具体原因,例如锁定冲突的根源或慢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)
此外,V$视图家族中的V$SQLAREA、V$SQLTEXT、V$SESSION和V$SESS_IO等视图,可以用来查询和分析SQL语句的执行状态和性能。通过这些视图,DBA可以识别出执行时间长、占用资源多的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语句及执行该语句的用户 ...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
select SQL_TEXT from v$sqlarea where address = (select sql_address from v$session where sid = ***); ``` 这里的`***`代表要查询的SID值。 #### 6. 监控SQL执行情况 对于更高级的监控需求,我们还可以查看...
比如,`v$session`显示当前活跃的会话信息,`v$sql`收集了最近执行的SQL语句及其统计信息,而`v$waitstat`则提供了等待事件的详细数据。这些视图对于性能调优尤其关键,DBA可以通过分析这些信息找出性能瓶颈,优化...
SELECT * FROM V$SQLAREA WHERE PHYSICAL_READ_REQUESTS = (SELECT MAX(PHYSICAL_READ_REQUESTS) FROM V$SQLAREA); ``` 十一、磁盘读取物理最大用户 磁盘读取物理最大用户是指当前数据库中执行的 SQL 语句中磁盘...
1. V$SQL_PLAN视图:提供SQL语句的执行计划信息,包括执行计划的详细信息和执行统计信息。 2. V$SQL_PLAN_STATISTICS视图:提供SQL语句的执行计划统计信息,包括执行计划的详细信息和执行统计信息。 3. V$SQL_PLAN_...