34.Oracle杂记——Oracle常用动态视图v$sqltext

来源:互联网 发布:owncloud php版本 编辑:程序博客网 时间:2024/06/05 18:03

34.Oracle杂记——Oracle常用动态视图v$sqltext

视图v$sqltext显示SGA中共享SQL游标中的 SQL语句文本。

视图描述如下:

sys@PDB1> desc v$sqltext;

 Name                                                                                                     Null?         Type

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

 ADDRESS                                                                                                                           RAW(8)

 HASH_VALUE                                                                                                                  NUMBER

 SQL_ID                                                                                                                             VARCHAR2(13)

 COMMAND_TYPE                                                                                                                           NUMBER

 PIECE                                                                                                                                  NUMBER

 SQL_TEXT                                                                                                                         VARCHAR2(64)

 CON_ID                                                                                                                            NUMBER

各个列属性如下:

ADDRESS                 :和HASH_VALUE列唯一确定缓存的游标

 HASH_VALUE      :和ADDRESS列唯一确认缓存的游标

 SQL_ID:缓存游标的SQLID

 COMMAND_TYPE:SQL语句的类型(SELECT,INSERT等)

 PIECE:用于SQL文本排序的号(SQL语句被分片了,需要需要排序合成)

 SQL_TEXT:SQL文本的其中一部分

 CON_ID:容器ID

v$sql,v$sqltext,v$sqlarea差异

这3个视图:v$sql,v$sqltext,v$sqlarea的关系比较微妙:

简单描述如下:

主要是提供library cache中当前缓存的sql语句的信息。都可以提供当前有关sql语句的具体信息,但稍有差异。

游标,包含shared cursor,sessioncursor,一条sql语句对应一个或多个游标,一条sql语句至少解析为一个游标。

当sql语句被解析到shared_pool中之后,会产生相应的游标,如下三种情形, 
          a、存在可完全共享的父游标 
          b、父游标存在,但是由于执行环境的变化,不得不生存新的子游标 
          c、没有父游标存在,需要生成全新的游标 
      对于情形a,由于存在可共享的父游标,也就是说v$sql中必定已经存在一个对应的sql游标,我们可以查询到,执行之后对应executions及相关列会发生变化。 
      对于情形b或c,sql语句产生的游标会被添加到v$sql视图,也即是新增游标(b为新增子游标,c为新增父游标)。

      注:在shared_pool由于aged out原则后的sql可能无法在该视图查询到,

v$sql存储所有游标,v$sqlarea等同于使用了distinct关键字,仅保留sql语句。v$sqltext提供完整的sql语句 。

 

 

 

 

 

 

 

 

 

 

 

 

阅读全文
0 0