zoukankan      html  css  js  c++  java
  • Oracle V$SESSION详解

    V$SESSION是APPS用户下面对于SYS.V_$SESSION 视图的同义词。

    在本视图中,每一个连接到数据库实例中的session都拥有一条记录。包括用户session及后台进程如DBWR,LGWR,arcchiver等等。

    V$SESSION中的常用列

    V$SESSION是基础信息视图,用于找寻用户SID或SADDR。不过,它也有一些列会动态的变化,可用于检查用户。如例:

    SQL_HASH_VALUE,SQL_ADDRESS:这两列用于鉴别默认被session执行的SQL语句。如果为null或0,那就说明这个session没有执行任何SQL语句。PREV_HASH_VALUE和PREV_ADDRESS两列用来鉴别被session执行的上一条语句。

    注意:当使用SQL*Plus进行选择时,确认你重定义的列宽不小于11以便看到完整的数值。

    STATUS:这列用来判断session状态是:

    l        Achtive:正执行SQL语句(waiting for/using a resource)

    l        Inactive:等待操作(即等待需要执行的SQL语句)

    l        Killed:被标注为删除

    下列各列提供session的信息,可被用于当一个或多个combination未知时找到session。

    Session信息

    l        SID:SESSION标识,常用于连接其它

    l        SERIAL#:如果某个SID又被其它的session使用的话则此数值自增加(当一个       SESSION结束,另一个SESSION开始并使用了同一个SID)。

    l        AUDSID:审查session ID唯一性,确认它通常也用于当寻找并行查询模式

    l        USERNAME:当前session在oracle中的用户名。

    Client信息

    数据库session被一个运行在数据库服务器上或从中间服务器甚至桌面通过SQL*Net连接到数据库的客户端进程启动,下列各列提供这个客户端的信息

    l        OSUSER:  客户端操作系统用户名

    l        MACHINE:客户端执行的机器

    l        TERMINAL:客户端运行的终端

    l        PROCESS:客户端进程的ID

    l        PROGRAM:客户端执行的客户端程序

    要显示用户所连接PC的TERMINAL、OSUSER,需在该PC的ORACLE.INI或Windows中设置关键字TERMINAL,USERNAME。

    Application信息

    调用DBMS_APPLICATION_INFO包以设置一些信息区分用户。这将显示下列各列。

    l        CLIENT_INFO:DBMS_APPLICATION_INFO中设置

    l        ACTION:DBMS_APPLICATION_INFO中设置

    l        MODULE:DBMS_APPLICATION_INFO中设置

    下列V$SESSION列同样可能会被用到:

    l        ROW_WAIT_OBJ#

    l        ROW_WAIT_FILE#

    l        ROW_WAIT_BLOCK#

    l        ROW_WAIT_ROW#

    V$SESSION中的连接列

    1. Column                                         View                                  Joined Column(s)  
    2.   
    3. SID                  V$SESSION_WAIT,V$SESSTAT,V$LOCK,V$SESSION_EVENT,V$OPEN_CURSOR   SID  
    4.   
    5. (SQL_HASH_VALUE, SQL_ADDRESS)        V$SQLTEXT, V$SQLAREA, V$SQL                     (HASH_VALUE, ADDRESS)  
    6.   
    7. (PREV_HASH_VALUE, PREV_SQL_ADDRESS)  V$SQLTEXT, V$SQLAREA, V$SQL                     (HASH_VALUE, ADDRESS)  
    8.   
    9. TADDR                                V$TRANSACTION                                    ADDR  
    10.   
    11. PADDR                                V$PROCESS                                        ADDR  

      

    示例:

    1.查找你的session信息

    1. SELECTSID, OSUSER, USERNAME, MACHINE, PROCESS  
    2.   
    3. FROMV$SESSIONWHEREaudsid = userenv('SESSIONID');  

    2.当machine已知的情况下查找session

    1. SELECTSID, OSUSER, USERNAME, MACHINE, TERMINAL  
    2.   
    3. FROMV$SESSION  
    4.   
    5. WHEREterminal ='pts/tl'ANDmachine ='rgmdbs1';  

    3.查找当前被某个指定session正在运行的sql语句。假设sessionID为100

        

    1. selectb.sql_text  
    2.   
    3. fromv$session a,v$sqlarea b  
    4.   
    5. wherea.sql_hash_value=b.hash_valueanda.sid=100  

    寻找被指定session执行的SQL语句是一个公共需求,如果session是瓶颈的主要原因,那根据其当前在执行的语句可以查看session在做些什么。

    视图应用:

    V$session 表的妙用

    v$session 表中比较常用的几个字段说明:

    1. sid,serial#
    通过sid我们可以查询与这个session相关的各种统计信息,处理信息.

        
    1. select * from v$sesstat where sid = :sid;   
      查询用户相关的各种统计信息. 
       
    1. SELECT a.sid, a.statistic#, b.name, a.value  
    2.   FROM v$sesstat a, v$statname b  
    3.  WHERE a.statistic# = b.statistic#  
    4.    AND a.sid = :sid;    

    b. 查询用户相关的各种io统计信息
       
    1. select * from v$sess_io where sid = :sid;  
     
    c. 查询用户想在正在打开着的游标变量.
       
    1. select * from v$open_cursor where sid = :sid;  


    d. 查询用户当前的等待信息. 以查看当前的语句为什么这么慢/在等待什么资源.
        
    1. select * from v$session_wait where sid = :sid ;  

    e. 查询用户在一段时间内所等待的各种事件的信息. 以了解这个session所遇到的瓶颈
        
    1. select * from v$session_event where sid = :sid;  

    f. 还有, 就是当我们想kill当前session的时候可以通过sid,serial#来处理.
        
    1. alter system kill session ':sid,:serail#';  

    2. paddr.字段, process addr, 通过这个字段我们可以查看当前进程的相关信息, 系统进程id,操作系统用户信息等等.
        
    1. SELECT a.pid,  
    2.        a.spid,  
    3.        b.name,  
    4.        b.description,  
    5.        a.latchwait,  
    6.        a.latchspin,  
    7.        a.pga_used_mem,  
    8.        a.pga_alloc_mem,  
    9.        a.pga_freeable_mem,  
    10.        a.pga_max_mem  
    11.   FROM v$process a, v$bgprocess b  
    12.  WHERE a.addr = b.paddr(+)  
    13.    AND a.addr = :paddr  

    3. command 字段, 表明当前session正在执行的语句的类型.请参考reference.

    4. taddr 当前事务的地址,可以通过这个字段查看当前session正在执行的事务信息, 使用的回滚段信息等
        
    1. SELECT b.name rollname, a.*  
    2.   FROM v$transaction a, v$rollname b  
    3.  WHERE a.xidusn = b.usn  
    4.    AND a.addr = '585EC18C';  

    5. lockwait字段, 可以通过这个字段查询出当前正在等待的锁的相关信息.
        
    1. SELECT *  
    2.   FROM v$lock  
    3.  WHERE (id1, id2) = (SELECT id1, id2 FROM v$lock WHERE kaddr = '57C68C48')  

    6. (sql_address,sql_hash_value) (prev_sql_addr,prev_hash_value) 根据这两组字段, 我们可以查询到当前session正在执行的sql语句的详细信息.
        
    1. SELECT *  
    2.   FROM v$sqltext  
    3.  WHERE address = :sql_address  
    4.    AND hash_value = :sql_hash_value;  

    7.ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW#
    可以通过这几个字段查询现在正在被锁的表的相关信息.^_^
    a. 首先得到被锁的的信息
      
    1. SELECT * FROM dba_objects WHERE object_id = :row_wait_obj#;  

    b. 根据row_wait_file#可以找出对应的文件的信息.
      
    1. SELECT * FROM v$datafile WHERE file# = :row_wait_file#.  

    c. 在根据以上四个字段构造出被锁的字段的rowid信息.
      
    1. SELECT dbms_rowid.ROWID_CREATE(1,  
    2.                                :row_wait_obj#,  
    3.                                :row_wait_file#,  
    4.                                :row_wait_block#,  
    5.                                :row_wait_row#)  
    6.   FROM dual;  

    8. logon_time 当前session的登录时间.
    9. last_call_et 该session idle的时间, 每3秒中更新一次.
  • 相关阅读:
    faster with MyISAM tables than with InnoDB or NDB tables
    w-BIG TABLE 1-toSMALLtable @-toMEMORY
    Indexing and Hashing
    MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size
    controlling the variance of request response times and not just worrying about maximizing queries per second
    Variance
    Population Mean
    12.162s 1805.867s
    situations where MyISAM will be faster than InnoDB
    1920.154s 0.309s 30817
  • 原文地址:https://www.cnblogs.com/littleCode/p/4203666.html
Copyright © 2011-2022 走看看