v$session 是我学到现在认为最重要也是最基础的一张视图,他存储着最基础的数据库信息,
比如,SADDR、SID、USERNAME、MACHINE 等,这些都是会话的最基础的信息,我们在查找任何性能问题的时候都免不了的要用到这张视图,
下面对这张视图和其他一些视图之间的关系做进一步了解,主要是做一个详细的梳理,理清之间的联系。
1、一般来说,我们在查询等待事件或者死锁的时候都会用到这张视图,例如,我们在查找数据库死锁问题中,在查找死锁进程的时候,
我们就可以关联v$session视图和v$locked_object
视图,通过关联v$session中的sid和v$locked_object中的session_id来查找到产生锁的sid和serial#
而当我们知道了sid后,我们还希望通过sid来查找对应的产生锁的操作系统会话的进程号,那么可以通过sid查找到对应v$session中的paddr
进一步在v$process中查找到spid也就是操作系统进程号。
2、再比如,在10g中,oracle将v$session_wait整个到了v$session中,使得我们可以更加方便的获得等待事件信息。
3、查看数据库的并发数:select count(*) from v$session where status='ACTIVE';
关联v$sqlarea 我们可以关联v$sqlarea来查看当前哪些用户正在使用数据库:
4、通过关联v$session中的sql_address和v$sqlarea中的address。
在这里我们区分一下v$session中的process和v$process中的spid,v$session中的process表示客户端进程ID,
即客户端进程在客户端机器上的进程ID号。也就是说v$session中表示的客户端进程在客户端机器上的进程号,而v$process则
表示服务器进程在服务器上的进程号。这两者还是有很大的差别。比如,你是用sqlplus连的数据库,那么v$session中
的process其实就是你的sqlplus在OS中的进程号,而v$process中的spid才是你回话的进程号。
5、v$session视图和v$sesstat视图的关联,我们知道v$sesstat视图记录的是会话其间的信息,通过v$session视图我们可以对当前连接到数据库的会话进行获取分析,而通过过v$session中的sid和v$sesstat,我们可以查询与这个session相关的各种统计信息,处理信息.当然对于v$sesstat中的STATISTIC#我们还需要通过查找v$statname,来获得。
6、v$session中的阻塞信息,v$session中阻塞信息的加入:BLOCKING_SESSION_STATUS、BLOCKING_INSTANCE、BLOCKING_SESSION
BLOCKING_SESSION 参数记录了造成当前等待session的进程ID
SQL> select sid,username,BLOCKING_SESSION,BLOCKING_INSTANCE,BLOCKING_SESSION_STATUS from v$session where username='SYS';
SID USERNAME BLOCKING_SESSION BLOCKING_INSTANCE BLOCKING_SE
---------- ---------- ---------------- ----------------- -----------
2159 SYS NOT IN WAIT
2165 SYS NO HOLDER
2166 SYS NO HOLDER
2182 SYS 2165 1 VALID
我们可以看到2165号回话正在阻塞进程2182,从而可以更快的定位等待事件。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23732248/viewspace-709950/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23732248/viewspace-709950/