您的位置:首页 > 其它

用户/服务器进程概念及v$session/V$PROCESS视图简介

2013-11-24 18:10 316 查看

服务器进程概念:

Oracle的服务器进程有Oracle实例自动创建,用来处理连接到实例的客户端进程发出的请求,用户必须通过连接到Oracle的服务器进程来获取数据库中的信息。

对于专用服务器模式(建库时默认),客户端进程和Oracle服务器进程是一一对应的,新增一个服务器进程,大约需要的内存是: AIX 5-10M  ;LINUX 3-5M内存--实测是1M多。

而在共享服务器模式下,一个Oracle服务器进程可能同时服务多个客户端进程。                 
服务器进程主要用来执行下列的任务:

 解析、执行客户端提交的SQL语句。

从磁盘数据文件中读取必须的数据块到SGA得数据缓存区。

以适当形式返回SQL语句执行结果。

user process用户进程概念

客户机使用SQLPLUS/PLSQL等工具通过tnsnames.ora中的服务名,连接到数据库服务器的服务器进程。要经过监听--服务器进程--PGA。
PROCESSES与SESSIONS数之间关系:   --
11g 官方默认值:sessions=1.5*processes + 22     文档:http://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams234.htm#sthref696
10g 官方默认值:sessions=1.1*processes + 5       文档:http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams191.htm#REFRN10197

连接和会话的关系:

连接:

用户进程和 Oracle 实例间的通信通道communication pathway。

这个通信通道是通过进程间的通信机制interprocess communication mechanisms(在同一个计算机上运行用户进程和 Oracle 进程)或网络软件network software(当数据库应用程序与 Oracle 服务器运行在不同的计算机上时,就需要通过网络来通信)建立的。
会话 : 
--在专有服务器模式下,一个连接对应一个会话。

主要指用户和数据库间的联系。

例如,当用户启动 SQL*Plus时必须提供有效的用户名和密码,之后 Oracle 为此用户建立一个会话。从用户开始连接到用户断开连接(或退出数据库应用程序)期间,会话一直持续。见下图1
例如:使用PLSQL连接数据库,就有一个连接,相应也有一个会话。在PLSQL中打开一个SQL窗口,就又是一个连接,相应也有一个会话。

在PLSQL里打开的SQL窗口查询:

select sid from v$mystat where rownum=1;
40

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';

30152    51    BYS    plsqldev.exe    WORKGROUP\BYS  ---这一条是打开PLSQL软件连接到数据库的会话信息
30187    40    BYS    plsqldev.exe    WORKGROUP\BYS --这一条是当前PLSQL中的SQL窗口对应的会话信息

在运行数据库的LINUX系统上查询:  ---进程的PID与PLSQL中查询的可以对应。

[oracle@bys3 ~]$ ps -ef |grep LOCAL |grep -v grep

oracle   30152     1  1 21:01 ?        00:00:02 oraclebys3 (LOCAL=NO)      --对应PLSQL程序的会话

oracle   30187     1  0 21:02 ?        00:00:00 oraclebys3 (LOCAL=NO)      --对应PLSQL中的SQL窗口

#####################

使用SQLPLUS测试:  --实验环境,现在没有连接到数据库。

[oracle@bys3 ~]$ ps -ef |grep LOCAL |grep -v grep   ---查询无返回,当前系统中没有ORACLE的连接信息

然后另开一窗口2,SSH到数据库所在服务器,启动SQLPLUS登陆数据库。再查询:

[oracle@bys3 ~]$ ps -ef |grep LOCAL |grep -v grep

oracle   30305 30302  3 21:10 ?        00:00:00 oraclebys3 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) --这一条就是窗口2中新打开SQLPLUS连接的信息 LACAL=YES,表明不是通过监听连接的--本地IPC





用户进程与服务器进程相关的视图及10G官方文档链接:
--下面几个视图都需要具有DBA权限才可以查

v$session       http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2088.htm#REFRN30223
v$proess        http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2022.htm#REFRN30186
V$MYSTAT        http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1183.htm#REFRN30158
V$TRANSACTION   http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2170.htm#REFRN30291
V$LOCK          http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1147.htm#REFRN30121
v$event_name    http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1097.htm#REFRN30079
###############################################

V$MYSTAT--这个主要就是来查当前会话SID吧

SID 显示当前会话的SID

STATISTIC#  统计号

VALUE       统计的值

###############################################

v$session    此视图列出当前会话的详细信息-用户进程通过网络连接到服务器进程,即产生一个会话--不论会话是否有操作。

常用字段及其描述:

SADDR   Session address     所产生的会话在内存中的位置

SID     Session identifier  与select distinct sid from v$mystat;中对应

SERIAL# 同一会话下的多个操作,用序列号SERIAL#来表示

PADDR   进程的地址,与与V$PROCESS中ADDR对应

USER#   其中SYS用户为0,与后面的SCHEMA#字段对应

USERNAME    当前进程使用的ORACLE数据库用户名,与后面SCHEMANAME对应

COMMAND     查看进程当前正在执行的操作类型--显示数字,要查找数字对应的操作类型。-有锁定时可查

OWNERID     固定值2147483644。如是其它值,则是迁移会话的用户的标识符。

TADDR       与V$TRANSACTION中ADDR对应,与V$LOCK中ADDR对应

LOCKWAIT    与V$LOCK中KADDR对应

STATUS      会话ACTIVE 状态:1.SQL正在执行 2.在等待-锁。

SERVER      网络连接模式:(DEDICATED| SHARED| PSEUDO| NONE)

####################################################

客户端主机相关字段描述:

OSUSER      客户端的操作系统用户名:WIN下Administrator,LINUX下oracle

PROCESS     客户端的进程号:LINUX客户端进程号为25819: ps aux|grep 25819|grep -v grep

MACHINE     客户端主机名:比如WIN WORKGROUP\BYSORACLE,LINUX bys3.bys.com

TERMINAL    控制台名:比如WIN BYSORACLE,LINUX pts/3

PROGRAM     客户端程序,比如WIN PLSQL:plsqldev.exe,LINUX的SQLPLUS sqlplus@bys3.bys.com (TNS V1-V3)

TYPE        会话类型:分为用户会话与后台进程会话两种

SERVICE_NAME    会话如果是通过网络监听连接,显示的是服务名。如通过IPC,可能是SYS$USERS

SQL_TRACE   SQL TRACE是否开启

LOGON_TIME  客户端登陆时的时间

RESOURCE_CONSUMER_GROUP  会话当前资源组的名称

####################################################

会话执行的SQL语句的相关字段描述:

SQL_ADDRESS 目前正在执行的SQL语句的SQL标识符

SQL_HASH_VALUE

SQL_ID      为空,执行完毕。不为空,会话ACTIVE。与V$SQL中SQL_ID对应。select sql_text from v$sql where sql_id='9mk1dmrqf9dv8';

SQL_CHILD_NUMBER

SQL_EXEC_START 10G无此字段,11G有,显示SQL语句开始执行的时间

SQL_EXEC_ID     目前正在执行的SQL语句的SQL标识符

PREV_SQL_ADDR

PREV_HASH_VALUE

PREV_SQL_ID

PREV_CHILD_NUMBER   

PREV_EXEC_START  11G新增

PREV_EXEC_ID        11G新增。这6个PREV_开头的字段描述的均是最后一次执行的SQL语句的信息。

####################################################

会话相关的锁、等待事件字段描述:

ROW_WAIT_OBJ#   等待的对象;与DBA_OBJECTS中OBJECT_ID对应

ROW_WAIT_FILE#  等待的OBJECTS所在的数据文件编号,与dba_data_files 中 file_id对应。select * from dba_data_files where file_id=4;

ROW_WAIT_BLOCK# 在数据文件 的第N个块上

ROW_WAIT_ROW#   在数据文件 的第N个块上第N行 0指从第一行开始

BLOCKING_SESSION_STATUS 阻塞会话状态,VALID 被阻塞;NO HOLDER 无阻塞;

BLOCKING_SESSION        显示被哪个会话阻塞

BLOCKING_INSTANCE       显示补哪个实例阻塞-RAC时

SEQ#        等待事件的惟一标识,此数字会递增。

EVENT#      事件ID;五V$EVENT_NAME中的EVENT#对应

EVENT       事件描述:如enq: TX - row lock contention 行锁  正常状态:SQL*Net message from client

WAIT_CLASS  等待事件的类型-Application/IDLE;

WAIT_TIME   WAIT_TIME非零值是会话的最后等待时间。零值表示会话正在等待。

SECONDS_IN_WAIT 如果WAIT_TIME=0,则SECONDS_IN_WAIT是在当前等待状态所花费的秒。如果WAIT_TIME> 0,则SECONDS_IN_WAIT是秒自上次等待的开始,SECONDS_IN_WAIT - WAIT_TIME/100自上等待结束的活跃秒。

#####################################################33

V$PROCESS

ADDR    与v$session中PADDR对应

PID      Oracle进程标识符,ORACLE的后台进程及用户进程都在内。查select pid,pname from v$process;

SPID     ORACLE中进程ID--ps -ef |grep LOCAL    查出的进程号

PROGRAM     显示所用的程序--如oracle@bys3.bys.com (SMON)  后台进程 oracle@bys3.bys.com (TNS V1-V3) 服务器上直接连接  oracle@bys3.bys.com 通过监听连接的用户进程

BACKGROUND 值为1,是后台进程。NULL表示是普通用户进程

TRACEID     

TRACEFILE   11G中新增字段,显示了当前进程的TRACEFILE的具体位置。

LATCHWAIT   等待的锁的地址; NULL,没有锁

LATCHSPIN     Address of the latch the process is spinning on; NULL if none

关于会话进程的PGA内存相关信息:

PGA_USED_MEM    进程当前使用的PGA内存值,
PGA_ALLOC_MEM   PGA分配给会话的内存的大小:1138050BYTES 11.2.0.4中分配的空间是1M。

PGA_FREEABLE_MEM

PGA_MAX_MEM     已经分配给会话的最大内存空间值

性能分析思路:

先看OS资源,CPU 内存消耗最多的进程,从进程找到会话,再查看会话详细信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐