暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle常用动态性能视图-01 V$SESSION

IT小Chen 2021-04-14
4792

V$SESSION显示每个当前会话的会话信息。

V$SESSION displays session information for each current session.

V$SESSION来自哪些表?

1 查看V$SESSION属于公共同义词。

select * from dba_objects where object_name='V$SESSION';

2 查看V$SESSION同义词的创建语句

select dbms_metadata.get_ddl('SYNONYM','V$SESSION','PUBLIC') from dual;

CREATE OR REPLACE NONEDITIONABLE PUBLIC SYNONYM "V$SESSION" FOR "SYS"."V_$SESSION";

3 V$SESSION同义词来自V_$SESSION视图。

select * from dba_objects where object_name='V_$SESSION';

4 查看v_$session视图创建语句。

select dbms_metadata.get_ddl('VIEW','V_$SESSION','SYS') from dual;

查看v$session属于同义词,来自于视图v_$session,然后查看v_$session视图又来自于v$session?

6 查看V$SESSION定义,V$SESSION来自GV$SESSION

select * from v$fixed_view_definition where view_name='V$SESSION';

7 查看GV$SESSION定义,语句过长自动截断了,显示不全。

select * from v$fixed_view_definition where view_name='GV$SESSION';

8 搜索关键字ksuseser

select * from v$sqltext_with_newlines where sql_text like '%ksuseser%';

9 通过sql_id查看Sql_text

select sql_id,sql_text from v$sqltext_with_newlines where sql_id='4u5dc0xuutw3f' order by piece;

10 查看v$session最终来自于表x$ksuse , x$ksled, x$kslwt

......

V$SESSION有哪些常用的列:

1 SADDR:session地址

2 SID:会话标识符

3 SERIAL#:会话序列号。用于唯一标识会话的对象。确保在会话结束且另一个会话以相同的会话ID开始时,将会话级命令应用于正确的会话对象。

SID+SERIAL#唯一标识一个会话。

4 PADDR:拥有会话的进程的地址

select * from v$session a inner join v$process b on a.paddr = b.addr;

5 USER#USERNAME:Oracle 用户标识和用户名,dba_usersuser_id,username关联。

6 COMMAND:正在执行的命令(最后解析的语句)。通过运行这个SQL查询,您可以为这个命令列中返回的任何值n找到命令名:SELECT command_name FROM v$sqlcommand WHERE command_type = n;此命令列中的值为0表示该命令没有记录在V$SESSION中。

SELECT * FROM v$sqlcommand;

......

7 TADDR:事务状态对象的地址,v$session.taddr=v$transaction.addr

例如:

select * from c##cjc.t1;

update c##cjc.t1 set id=11 where id=11;

select * from v$session where taddr is not null;

select * from v$transaction where addr='000000007BDAF0C8';

select prev_sql_id,prev_hash_value from v$session where taddr='000000007BDAF0C8';

select sql_text from v$sql where sql_id='9m7787camwh4m';

begin :id := sys.dbms_transaction.local_transaction_id; end; 

为什么update语句在v$sql里显示begin :id := sys.dbms_transaction.local_transaction_id; end; ,一般在plsql工具里执行的update会出现这种问题,改成在sqlplus执行update,在v$sql显示正常,如下:

SQL> update c##cjc.t1 set id=100 where id=10;

select sql_text

  from v$sql

 where sql_id in

       (select prev_sql_id

          from v$session

         where taddr in (select addr from v$transaction));

update c##cjc.t1 set id=100 where id=10

8 PROCESS:操作系统客户端进程ID

select * from v$session;

9 SQL_ADDRESS,SQL_HASH_VALUE,SQL_ID,SQL_CHILD_NUMBER,SQL_EXEC_START,PREV_SQL_ADDR,PREV_HASH_VALUE,PREV_SQL_ID:SQL地址HASH值等。

v$sql视图的address,hash_value,plan_hash_value等对应。

10 LOGON_TIME:登录时间

11 BLOCKING_SESSION_STATUS,BLOCKING_INSTANCE,BLOCKING_SESSION:产生阻塞的会话

select * from dba_waiters;

12 event#, event, p1, p1raw, p2text, p2raw, p2, p3text, p3, p3raw, wait_class_id, wait_class#, wait_class(等待事件类型), wait_time, seconds_in_wait(等待时长[]), state:等待事件相关

select sid,

       event#,

       event,

       p1,

       p1raw,

       p2text,

       p2raw,

       p2,

       p3text,

       p3,

       p3raw,

       wait_class_id,

       wait_class#,

       wait_class,

       wait_time,

       seconds_in_wait,

       state

  from v$session

 where sid in (31, 37);

SELECT NAME, PARAMETER1 P1, PARAMETER2 P2, PARAMETER3 P3

  FROM V$EVENT_NAME

 WHERE NAME = 'enq: TX - row lock contention';

select type, id1, id2, lmode, request, ctime, block

  from v$lock

 where sid = 37;

select type, id1, id2, lmode, request, ctime, block

  from v$lock

 where sid = 31;

更多数据库相关学习资料,可以查看我的ITPUB博客,网名chenoracle

http://blog.itpub.net/29785807/

文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

TA的专栏
SQLServer数据库
收录9篇内容