关于服务器进程与用户进程概念及v$session/V$PROCESS视图简介 ,详见:http://blog.csdn.net/q947817003/article/details/16922457
本文根据性能分析的一般思路来进行:
先看OS资源,确定CPU/内存消耗最多的进程,从进程找到会话,再查看会话详细信息:包括会话类型、执行的SQL等等。
各种查询
1.查当前会话SID
BYS@ bys3>select sid from v$mystat where rownum=1;
SID
----------
44
查询当前数据库有哪些会话,有哪些用户,从哪些终端连接的
select username,machine,program from v$session where type='USER';
查询当前数据库内会话的SPID,PID,用户名,客户端主机名,客户端程序
select b.spid,a.sid,a.username,a.program,a.machine from v$session a,v$process b where a.paddr=b.addr and a.type='USER';
查询当前数据库内会话的SPID,PID,用户名,客户端主机名,客户端程序以及用户会话是活动的--正在执行SQL或被阻塞
select b.spid,a.sid,a.username,a.program,a.machine from v$session a,v$process b where a.paddr=b.addr and a.type='USER' and a.status='ACTIVE';
############################################################################
2.操作系统上查进程PID,以及服务器进程所占用CPU 内在资源。LOCAL=NO表示是通过网络连接。
ps -ef显示的列依次是:1.UID 用户ID 2.PID 进程ID 3.PPID 父进程ID 4.C CPU占用率 5.STIME 开始时间 6.TTY 开始此进程的TTY 7.TIME 此进程运行的总时间 8.CMD 命令名
UID PID PPID C STIME TTY TIME CMD
[oracle@bys3 ~]$ ps -ef|grep LOCAL|grep -v grep ---查当前有哪些会话进程
oracle 25868 1 0 14:24 ? 00:00:04 oraclebys3 (LOCAL=NO)
oracle 29048 29045 0 18:52 ? 00:00:00 oraclebys3 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
ps aux显示的列依次是:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
[oracle@bys3 dbs]$ ps aux|grep LOCAL |grep -v grep
oracle 29313 0.0 2.0 326852 42996 ? Ss 19:14 0:00 oraclebys3 (LOCAL=NO)
oracle 29392 0.1 1.9 326796 40992 ? Ss 19:19 0:01 oraclebys3 (LOCAL=NO)
oracle 29550 0.0 1.7 326984 35148 ? Ss 19:28 0:00 oraclebys3 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
############################################################################
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/storage/
3.通过进程PID查找会话SID及通过会话SID找进程PID语句:
通过进程SPID找会话SID
BYS@ bys3>select s.sid from v$session s,v$process p where s.paddr=p.addr and p.spid=29550;
SID
----------
44
通过当前会话SID找进程PID:
BYS@ bys3>select p.spid from v$session s,v$process p where s.paddr=p.addr and s.sid=(select sid from v$mystat where rownum=1); 如果查其它会话SID,直接输入相应SID即可
SPID
------------------------
29550
查询当前会话使用的PGA的大小信息
select p.spid,p.PGA_USED_MEM/1024/1024 MB,p.PGA_ALLOC_MEM/1024/1024 MB,p.PGA_MAX_MEM/1024/1024 MB from v$session s,v$process p where s.paddr=p.addr and s.sid=(select sid from v$mystat where rownum=1);
############################################################################
4.通过会话SID查看会话详细的信息
示例1:查会话使用的ORACEL数据库用户名、此会话最近一次执行的SQL命令(需要通过COMMAND字段的数字查询相应表选出,如这里3是select),当前会话状态是ACTIVE活动的,表示有SQL语句正在执行(SQL正执行或补阻塞),以及当前服务器连接模式(专有还是共享)
BYS@ bys3>col username for a10
BYS@ bys3>select sid,user#,username,command,ownerid,status,server from v$session where sid=44;
SID USER# USERNAME COMMAND OWNERID STATUS SERVER
---------- ---------- ---------- ---------- ---------- -------- ---------
44 32 BYS 3 2147483644 ACTIVE DEDICATED
############################################################################