V$session, v$process, v$sql 之间的对应关系

v$session ses, v$process pro, v$sql sql
 where ses.paddr = pro.addr
   and ses.SQL_HASH_VALUE = sql.HASH_VALUE
   and ses.SQL_ADDRESS = sql.address

   and  ses.sql_address = sql.address

 

SPID

VARCHAR2(12)

Operating system process identifier

 

 

v$transaction t, v$session s

 where t.ses_addr = s.saddr

 

for instance:

select sid, serial#, program, sql_text,s1.sql_id

from   v$session s,

       v$sql     s1

where  s.sql_address=s1.address

and    s.sql_hash_value=s1.hash_value

and    s.machine='p570a'

and    s.username is not null;  

  

 select ses.sid, ses.serial#, ses.username, ses.module, ses.LOGON_TIME,  sql.sql_text

  from v$session ses, v$process pro, v$sql sql

 where ses.paddr = pro.addr

   and ses.SQL_HASH_VALUE = sql.HASH_VALUE

   and ses.SQL_ADDRESS = sql.address

   and pro.spid in (115338, 512258, 381288

  

 select t.used_ublk, s.sid, s.serial#, s.username, s.module, s.logon_time

  from v$transaction t, v$session s

 where t.ses_addr = s.saddr

 order by 1 desc;

 

 

 

 

 

 

v$sqltext
存储的是完整的SQL,SQL被分割


SQL> desc v$sqltext
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ADDRESS                                            RAW(4)    ---------
HASH_VALUE                                         NUMBER   ---------  
address 一起唯一标志一条sql
COMMAND_TYPE                                       NUMBER
PIECE                                              NUMBER   ----------  
分片之后的顺序编号

SQL_TEXT                                           VARCHAR2(64)   --------------  
注意长度



v$sqlarea   ---------  存储的SQL 和一些相关的信息,比如累计的执行次数,逻辑读,物理读等统计信息
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$sql     ----------  存储的是具体的SQL 和执行计划相关信息,实际上,v$sqlarea 可以看做 v$sql 根据 sqltext 做了 group by 之后的信息


SQL> desc v$sql
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
SQL_TEXT                                           VARCHAR2(1000)
SHARABLE_MEM                                       NUMBER
PERSISTENT_MEM                                     NUMBER
RUNTIME_MEM                                        NUMBER
SORTS                                              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(10)
OPTIMIZER_COST                                     NUMBER
PARSING_USER_ID                                    NUMBER
PARSING_SCHEMA_ID                                  NUMBER
KEPT_VERSIONS                                      NUMBER
ADDRESS                                            RAW(4)
TYPE_CHK_HEAP                                      RAW(4)
HASH_VALUE                                         NUMBER
PLAN_HASH_VALUE                                    NUMBER
CHILD_NUMBER                                       NUMBER    ----------  注意这个  
MODULE                                             VARCHAR2(64)
MODULE_HASH                                        NUMBER
ACTION                                             VARCHAR2(64)
ACTION_HASH                                        NUMBER
SERIALIZABLE_ABORTS                                NUMBER
OUTLINE_CATEGORY                                   VARCHAR2(64)
CPU_TIME                                           NUMBER
ELAPSED_TIME                                       NUMBER
OUTLINE_SID                                        NUMBER    ---- 注意这里跟 outline 有关
CHILD_ADDRESS                                      RAW(4)
SQLTYPE                                            NUMBER
REMOTE                                             VARCHAR2(1)
OBJECT_STATUS                                      VARCHAR2(19)
LITERAL_HASH_VALUE                                 NUMBER
LAST_LOAD_TIME                                     VARCHAR2(38)
IS_OBSOLETE                                        VARCHAR2(1)
CHILD_LATCH                                        NUMBER


另外注意这个
QL> desc v$sql_plan
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ADDRESS                                            RAW(4)
HASH_VALUE                                         NUMBER
CHILD_NUMBER                         NUMBER   --- 注意这个和 v$sql 里面的相同字段
OPERATION                                          VARCHAR2(60)
OPTIONS                                            VARCHAR2(60)
OBJECT_NODE                                        VARCHAR2(20)
OBJECT#                                            NUMBER
OBJECT_OWNER                                       VARCHAR2(30)
OBJECT_NAME                                        VARCHAR2(64)
OPTIMIZER                                          VARCHAR2(40)
ID                                                 NUMBER
PARENT_ID                                          NUMBER
DEPTH                                              NUMBER
POSITION                                           NUMBER
SEARCH_COLUMNS                                     NUMBER
COST                                               NUMBER
CARDINALITY                                        NUMBER
BYTES                                              NUMBER
OTHER_TAG                                          VARCHAR2(70)
PARTITION_START                                    VARCHAR2(10)
PARTITION_STOP                                     VARCHAR2(10)
PARTITION_ID                                       NUMBER
OTHER                                              VARCHAR2(4000)
DISTRIBUTION                                       VARCHAR2(40)
CPU_COST                                           NUMBER
IO_COST                                            NUMBER
TEMP_SPACE                                         NUMBER
ACCESS_PREDICATES                                  VARCHAR2(4000)
FILTER_PREDICATES                                  VARCHAR2(4000)


实际上,看起来同样的一句SQL ,往往具有不同的执行计划
如果是不同的数据库用户,那么相应的涉及的 对象 可能都不一样,注意v$sql
OBJECT#                                            NUMBER
OBJECT_OWNER                                       VARCHAR2(30)
OBJECT_NAME                                        VARCHAR2(64)
OPTIMIZER                                          VARCHAR2(40)


即使是相同的数据库用户,若 session 的优化模式、session 级的参数 等不一样,执行计划也能不同。所以即使相同的sql,也可能具有不同的执行计划!

v$sql   join  to  v$sql_plan  
就代表了具体的sql的执行计划,通过下面3个字段做连接

ADDRESS                                            RAW(4)
HASH_VALUE                                         NUMBER
CHILD_NUMBER                                       NUMBER


v$SQLAREA 忽略了  执行计划 等差异,只是在形式上sql文本看起来一样!相当于做了个聚合,是多个不同执行计划的sql的聚合和累计信息

 

对于同一个SQL语句,如果在不同环境下使用了不同的优化器目标的情况下,会有不同的执行计划,
这样就要求分别有一个独立的游标(即子游标)来区别出每一种情况下的不同的运行行为。

Oraclev$sqlarea中一行保存同样语句的SQL,并用字段version_count的值来指出子游标的个
数,而在v$sql里面为每个子游标保留了一个单独的行。两个表可以通过字段addresshash_value
相互对应。例如下面例子:
SQL> select address,hash_value,sql_text,version_count from v$sqlarea where sql_text like 'select value$ from sys.props%';

ADDRESS          HASH_VALUE SQL_TEXT                                                          VERSION_COUNT
---------------- ---------- ----------------------------------------------------------------- -------------
00000003C15F6DB8 3393782897 select value$ from sys.props$ where name = :1                                 3
00000003C1933FE0 3319354662 select value$ from sys.props$ where name = 'DEFAULT_TBS_TYPE'                 1

SQL> select address,hash_value,child_address,child_number,sql_text from v$sql where sql_text like 'select value$ from sys.props%';

ADDRESS          HASH_VALUE CHILD_ADDRESS    CHILD_NUMBER SQL_TEXT
---------------- ---------- ---------------- ------------ -----------------------------------------------------------------
00000003C15F6DB8 3393782897 00000003C15F5E88            0 select value$ from sys.props$ where name = :1
00000003C15F6DB8 3393782897 00000003C17E9808            1 select value$ from sys.props$ where name = :1
00000003C15F6DB8 3393782897 00000003C18D3C58            2 select value$ from sys.props$ where name = :1
00000003C1933FE0 3319354662 00000003C1622F20            0 select value$ from sys.props$ where name = 'DEFAULT_TBS_TYPE'

如果想找出这个SQL语句的执行计划,也可以通过字段addresshash_valuechild_numberv$sql_plan中查找,

v$sql_plan中是区分了不同子游标的执行计划的

SQL> select address,child_number,lpad('',2*level)||operation||decode(id,0,' cost='||position) op, options,object_name from v$sql_plan t where hash_value=3319354662;

视图v$sqltext中没有SQL语句的相关统计信息,但是v$sqltext用多行来保存sql语句,而v$sqlarea中只能
保存sql语句的前1000个字节,所以如果sql语句大于1000个字节,就要到v$sqltext中查看完整的语句,其字
PIECE表示每个sql的行顺序。

 

请使用浏览器的分享功能分享到微信等