v$sql,v$sqlarea,v$sqltext有什么区别

原文地址:https://zhidao.baidu.com/question/1382950893572331580.html

共同点:

1)都存储了sql内容

2) 记录的都是位于内存中的sql内容

3) 因为是内存,所以都不保留历史记录

不同点:

1)存储的为止不都是相同。其中v$sql和v$sqlarea存储的sql都是位于shared sql area中的sql,而v$sqltext是位于sga中的sql。但文档没有明确说明这里的sga是否还包含了psa(私有sql区域--共享服务器模式下)。

2)存储sql的方式也不同,v$sql和v$sqlarea都是用一行来存储sql全文,而v$sqltext用一行存储sql的一行。

3)v$sql不存储包含group by sql语句。通常这个视图,在每个查询执行完成后更新,但对于执行很久的sql,它是每5秒更新一次,这点对于查看sql执行状态是有意义的。

4)存储的明细不同--这是最基本的。

V$SQL在子游标级别上列出了在共享sql区域的统计信息,他将原始sql文本展现为一行。V$SQL中的视图信息一般在sql执行的最后进行更新。然而,对于长时间执行的sql,每5秒会更新一次v$sql视图。这使得很容易查看长时间执行的sql在运行过程中带来的影响。

v$sql列说明,如没有特别说明,均指子游标,存储的是具体的SQL 和执行计划相关信息,实际上,v$sqlarea 可以看做 v$sql 根据 sqltext 等 做了 group by 之后的信息

SQL> desc v$sql 

Name Null? Type 

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

SQL_TEXT           //当前正在执行的游标的sql文本的前1000个字符

SQL_FULLTEXT       //CLOB类型 整个sql文本,不用借助于V$SQL_TEXT视图来查看整个文本

SQL_ID           //库缓存中的SQL父游标的标志

SHARABLE_MEM           //子游标使用的共享内存的大小,bytes

PERSISTENT_MEM           //子游标生存时间中使用的固定内存的总量,bytes

RUNTIME_MEM           //在子游标执行过程中需要的固定内存大小,bytes

SORTS           //子游标发生的排序数量

LOADED_VERSIONS          // 显示上下文堆是否载入,1是,0否

USERS_OPENING          // 执行这个sql的用户数

FETCHES          // sql取数据的次数

EXECUTIONS           //自从被载入共享池后,sql执行的次数 

FIRST_LOAD_TIME          // 父游标产生的时间戳

PARSE_CALLS           //解析调用的次数 

DISK_CALLS             //读磁盘的次数

DIRECT_WRITES           //直接写的次数

BUFFER_GETS           //直接从buffer中得到数据的次数

APPLICATION_WAIT_TIME          // 应用等待时间,毫秒

CONCURRENCY_WAIT_TIME           //并发等待时间,毫秒

USER_IO_WAIT_TIME           //用户IO等待时间

ROWS_PROCESSED SQL           //解析sql返回的总行数

OPTIMIZER_MODE           //优化器模式

OPTIMIZER_COST           //优化器对于sql给出的成本

PARSING_USER_ID           //第一个创建这个子游标的用户id

HASH_VALUES           //解析产生的哈希值

CHILD_NUMBER           //该子游标的数量

SERVICE           //服务名

CPU_TIME           //该子游标解析,执行和获取数据使用的CPU时间毫秒

ELAPSED_TIME           //sql的执行时间,毫秒

INVALIDATIONS           //该子游标的无效次数

MODULE       //第一次解析该语句时,通过DBMS_APPLICAITON_INFO.SET_ACTION设置的模块名

ACTION      //第一次解析该语句时,通过DBMS_APPLICAITON_INFO.SET_ACTION设置的动作名 

IS_OBSOLETE           //标记该子游标过期与否,当子游标过大时会发生这种情况

is_bind_sensitive           //不仅指出是否使用绑定变量窥测来生成执行计划,而且指出这个执行计划是否依赖于窥测到的值。如果是,这个字段会被设置为Y,否则会被设置为N。

is_bind_aware           //表明游标是否使用了扩展的游标共享。如果是,这个字段会被设置为Y,如果不是,这个字段会被设置为N。如果是设置为N,这个游标将被废弃,不再可用。

is_shareable           //表明游标能否被共享。如果可以,这个字段会被设置为Y,否则,会被设置为N。如果被设置为N,这个游标将被废弃,不再可用。

 v$sqlarea的字段定义和v$sql基本一致,不同的是V$SQLAREA是在父游标级别上统计的sql信息,v$sql的汇总表,进行了group by hash_value,sql_id的汇总。

SQL> desc v$sqlarea 

Name Null? Type

SQL_TEXT VARCHAR2(1000) 

SHARABLE_MEM NUMBER 

PERSISTENT_MEM NUMBER 

RUNTIME_MEM NUMBER 

SORTS NUMBER 

VERSION_COUNT NUMBER 

LOADED_VERSIONS NUMBER 

OPEN_VERSIONS NUMBER 

USERS_OPENING NUMBER 

FETCHES NUMBER 

EXECUTIONS NUMBER 

USERS_EXECUTING NUMBER 

LOADS NUMBER 

FIRST_LOAD_TIME VARCHAR2(38) 

INVALIDATIONS NUMBER 

PARSE_CALLS NUMBER 

DISK_READS NUMBER 

BUFFER_GETS NUMBER 

ROWS_PROCESSED NUMBER 

COMMAND_TYPE NUMBER 

OPTIMIZER_MODE VARCHAR2(25) 

PARSING_USER_ID NUMBER 

PARSING_SCHEMA_ID NUMBER 

KEPT_VERSIONS NUMBER 

ADDRESS RAW(4) 

HASH_VALUE NUMBER 

MODULE VARCHAR2(64) 

MODULE_HASH NUMBER 

ACTION VARCHAR2(64) 

ACTION_HASH NUMBER 

SERIALIZABLE_ABORTS NUMBER 

CPU_TIME NUMBER 

ELAPSED_TIME NUMBER 

IS_OBSOLETE VARCHAR2(1) 

CHILD_LATCH NUMBER

 

v$sqltext

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

注:V$SQLAREA和v$sql中的SQL_TEXT字段只包括头1000个字符, SQL_FULLTEXT以CLOB方式包含了所有的字符

V$SQLTEXT列说明

HASH_VALUE           SQL语句的Hash值

ADDRESS           sql语句在SGA中的地址

SQL_TEXT           SQL文本。

PIECE           SQL语句块的序号

SQL_ID           SQL id

COMMAND_TYPE             命令类型,如selectinsert

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值