
session 和 process的区别:
连接connects,会话sessions和进程pocesses的关系
每个sql login称为一个连接(connection),而每个连接,可以产生一个或多个会话,如果数据库运行在专用服务器方式,
一个会话对应一个服务器进程(process),如果数据库运行在共享服务器方式,一个服务器进程可以为多个会话服务。
session 和 process的关系,tom在他的书里写的很清楚了
一个process可以有0个,1个或者多个session
一个session也可以存在这个或者那个process中
oracle中session跟process的研究
使用方法:
首先看看v$session跟v$process中主要的字段属性:
v$session(sid,serial#,paddr,username,status,machine,terminal,sql_hash_value,sql_address,,,)
v$process(addr,spid,,,)
可看到v$session中的paddr跟v$process中的addr对应,也即会话session在数据库主机上对应进程的进程地址
这里我们要先定位该session正在执行的sql语句,此时我们可以查询如下的语句:
select sql_text
from v$sqltext_with_newlines
where (hash_value,address) in (select sql_hash_value,sql_address from v$session where sid=&sid) order by address,piece;
若需手工kill一个session,可采用"alter system kill session 'sid,serial#' immediate",此时session的状态会标记为killed,该session对应进程地址指向相同的虚拟地址,见如下的查询:
SQL> select sid,serial#,paddr,status from v$session where username='SHIYIHAI';
SID SERIAL# PADDR STATUS
---------- ---------- ---------------- --------
234 14409 C0000000B2BADB28 INACTIVE
245 14374 C0000000B2BAB748 INACTIVE
SQL> alter system kill session '234,14409' immediate;
System altered
SQL> select sid,serial#,paddr,status from v$session where username='SHIYIHAI';
SID SERIAL# PADDR STATUS
---------- ---------- ---------------- --------
234 14409 C0000000B2C750B8 KILLED
245 14374 C0000000B2BAB748 INACTIVE
SQL> alter system kill session '245,14374' immediate;
System altered
SQL> select sid,serial#,paddr,status from v$session where username='SHIYIHAI';
SID SERIAL# PADDR STATUS
---------- ---------- ---------------- --------
234 14409 C0000000B2C750B8 KILLED
245 14374 C0000000B2C750B8 KILLED
SQL>
我们知道很多时候被kill掉的session并不能马上释放资源,我们需要从os上kill掉对应的进程,但由于session的paddr被修改为虚拟地址了,导致无法关联v$process,找不到进程的spid进程号此时我们可以执行如下查询:
SQL> SELECT susername,sstatus,
2 xADDR,xKSLLAPSC,xKSLLAPSN,xKSLLASPO,xKSLLID1R,xKSLLRTYP,
3 decode(bitand (xksuprflg,2),0,null,1)
4 FROM x$ksupr x,v$session s
5 WHERE spaddr(+)=xaddr
6 and bitand(ksspaflg,1)!=0
7 and sstatus is null;
USERNAME STATUS ADDR KSLLAPSC KSLLAPSN KSLLASPO KSLLID1R KSLLRTYP DECODE(BITAND(XKSUPRFLG,2),0,
------------------------------ -------- ---------------- ---------- ---------- ------------ ---------- -------- ------------------------------
C0000000B2B58D08 0 0 0
C0000000B2BA4688 298 9 4669 0
C0000000B2BAB748 1 16 4675 197 EV
C0000000B2BADB28 1 16 4675 197 EV
SQL>
或查询如下的语句:
SQL> select paddr from v$process p where pid <> 1
2 minus
3 select spaddr from v$session s;
ADDR
----------------
C0000000B2BA4688
C0000000B2BAB748
C0000000B2BADB28
SQL>
从查询结果中可发现被kill掉的session对应的进程地址然后通过进程地址来查询对应的进程号,见如下的查询:
SQL> select spid from v$process where addr in ('C0000000B2BAB748','C0000000B2BADB28');
SPID
------------
13013
13015
最后在 *** 作系统上执行"kill -9 13013"和"kill -9 13015"即可
1top使用权限:所有使用者
使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
说明:即时显示process的动态
d :改变显示的更新速度,或是在交谈式指令列( interactive command)按s
q :没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最高的优先序执行
c :切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S :累积模式,会将己完成或消失的子行程( dead child process )的CPU time累积起来
s :安全模式,将交谈式指令取消,避免潜在的危机
i :不显示任何闲置(idle)或无用(zombie)的行程
n :更新的次数,完成后将会退出top
b :批次档模式,搭配"n"参数一起使用,可以用来将top的结果输出到档案内
其他命令还有vmstat、mpstat、prstat、sar等等
以上就是关于Oracle的session和process的区别与分析全部的内容,包括:Oracle的session和process的区别与分析、linux怎么查看数据库的cpu使用率、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)