ORACLE深入 第四章 Oracle Processes
来源:互联网 发布:软通java面试题 编辑:程序博客网 时间:2024/06/05 21:04
ORACLE深入 第四章 Oracle Processes
SERVER Background Background PROCESSES
CONNECT SESSION DEDICATE Shared Server Connections
日月明王BLOG:http://sunmoonking.spaces.live.com
ORACLE 的每一个PROCESS都会在PGA里分配一块MEM并执行相应的任务。分为以下三类:
SERVER PROCESSES:基于CLIENT的请求。比如应用程序发往DB的SQL
BACKGROUND PROCESSES: 在DB 启动的时候启动, 来保证DB的运行.
SLAVE PROCESS: 执行SERVER PROCESS或BACKGROUND PROCESS的额外辅助工作.
· 1 SERVER PROCESSES
先回顾下DEDICATE SERVER和SHARED SERVER
DEDICATE SERVER: SERVER 分配一个单独的PROCESS提供点对点的连接.
SHARED SERVER: CLIENT连接的是DISPATCHER而不时SERVER PROCESS.
再来理解下CONNECT和SESSION的异同.
一个CONNECT是CLIENT PROCESS和ORACLE INSTANCE的物理路径.
一个SESSION是一个逻辑实体(用来执行CLIENT的SQL等).
一个CONNECTION由0个,1个,或多个独立的SESSIONS组成. 一个SESSION的COMMIT并不影响在相同CONNECTION里的其他SESSION.
可以证明下,
本测试在DEDICATE SERVER环境下
select username, sid, serial#, server, paddr, status
2 from v$session
3* where username ='SBTOPT'
SQL> /
USERNAME SID
------------------------------------------------------------ ----------
SERIAL# SERVER PADDR STATUS
---------- ------------------ ---------------- ----------------
SBTOPT 32
38431 DEDICATED 070000004DA3B550 INACTIVE
SQL> set autotrace on statistics
select username, sid, serial#, server, paddr, status
2 from v$session
3* where username ='SBTOPT'
SQL> /
USERNAME SID
------------------------------------------------------------ ----------
SERIAL# SERVER PADDR STATUS
---------- ------------------ ---------------- ----------------
SBTOPT 32
38431 DEDICATED 070000004DA3B550 INACTIVE
SBTOPT 35
62380 DEDICATED 070000004DA3B550 ACTIVE
可以看到两个SESSION用同一个SERVER PROCESS,有着同一个PADDR,看到STATUS一个是ACTIVE, 另一个是INACTIVE,STATUS在这里就不解释了.
此时大家可能有个疑问, 这个时候有两个SESSION,那么我在运行一个DML STATEMENT, 这两个SESSIO会如何协同工作呢?
1, 用新的SESSION(SID 35)去查询V$SESSTAT来记录运行DML STATEMENT(SID 32) 的初值,.
2, SID32上运行DML
3,SID 35会再查V$SESSTAT, 并产生TRACE报告.
那你可能又有新问题了,为什么会这样呢?用一个SESSION不行吗? 回答当然是不行,因为如果是一个SESSION那么就无法区分那些I/O, 网络传输的字节,SORTS等是因为DML还是因为跟踪产生的. 所有的这些都会累计到STATISTICS. 所以需要另一个SESSION去统计这些数据.
到这里,我们看到了一个CONNECTION由1个,或多个独立的SESSIONS组成. 前面说过, 一个CONNECTION由0个,1个,或多个独立的SESSIONS组成, 下面看看一个CONNECT由0个SESSION组成的情况.
在B窗口,
SQL> disconnect
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production
SQL>
A窗口再看
SQL>
select username, sid, serial#, server, paddr, status
2 from v$session
3* where username ='SBTOPT'
已经没有数据了.
不管是DEDICATE还是SHARED SERVER都做相同的工作,那就是把你给他的SQL提供给DB然后ORACLE DEDICATE/SHARED SERVER PROCESS 解析(PARSE)然后放到SHARED POOL(或者在SHARED POOL发现已经存在就不用解析), 然后按QUERY PLAN 执行, 此时可能从BUFFER CACHE里读或从DISK里做物理读.(取决于是否在BUFFER CACHE里发现需要的数据)
DEDICATE SERVER
CLIENT和SERVER不管是不是在同一个机器上面,都会用NET连接. 在SERVER上运行CLIENT的时候可以用下面的SQL 来看产生一个连接的父子进程
1 select a.spid dedicated_server,
2 b.process clientpid
3 from v$process a, v$session b
4 where a.addr = b.paddr
5* and b.sid = (select sid from v$mystat where rownum=1) /*仅举例子而已, 所以取一条记录*/
SQL> /
DEDICATED_SERVER CLIENTPID
------------------------ ------------------------
581982 602440
这两个值一样则表示在同一机器上. 前者spid是OS PID, 后者看PS进程.
orasbp@svodbp01:$ ps -ef|grep 581982
orasbp 581982 602440 0 15:48:22 - 0:00 oracleSBP (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
orasbp@svodbp01:$ ps -p 602440
PID TTY TIME CMD
602440 pts/4 0:00 sqlplus
可以看到602440 是父, 581982是子,而真正执行QUERY的正式581982.
DEDICATE SERVER的TRANSACTION之间相互独立,互不影响,所以,如果硬件(CPU,MEM)足够为每一个TRANSACTION分配资源, 那么几千个同时CONNECT也是没什么问题的.
Shared Server Connections
SHARED SERVER即使是在CLIENT,SERVER在一个机器上也必须用LISTENER.
SHARED SERVER只适合sort, frequence transactions. 90%以上是比较短平快的transactions就可以考虑使用SHARED SERVER.
如果你要使用Oracle Net connection pooling的话那也需要设置shared server.但是,如果你已经采用了其他的connection pooling技术(EG: J2EE connection pool),,那么用SHARED SERVER就没什么好处了.
SHARED SERVER可以减少System Processes/Threads. 但是SHARED SERVER下的session trace(比如设置SQL_TRACE=TRUE)可能会导致一个SESSION有多个trace files, 这就导致要想得到此session的工作情况变得非常困难.
但是,一般情况下还是建议用DEDICATE,除非系统真的过载(overload)
· 2 Background Processes
大家都记得ORACLE INSTANCE的定义吧, ORACLE INSTANCE是由SGA 和background process组成. background process维持着DB的正常运行.
下面SQL 得到所有可能的background process
1 select paddr||' '|| name||' '||description
2 from v$bgprocess
3* order by paddr desc
SQL> /
PADDR||''||NAME||''||DESCRIPTION
--------------------------------------------------------------------------------
070000004DA3A608 ARC1 Archival Process 1
070000004DA3A0F0 ARC0 Archival Process 0
070000004DA39BD8 CJQ0 Job Queue Coordinator
070000004DA396C0 RECO distributed recovery
070000004DA391A8 SMON System Monitor Process
070000004DA38C90 CKPT checkpoint
070000004DA38778 LGWR Redo etc.
070000004DA38260 DBW0 db writer process 0
070000004DA37D48 PMON process cleanup
00 DIAG diagnosibility process
00 FMON File Mapping Monitor Process
PADDR非00的就是你的系统里正在运行的background process.
首要 Background Processes
PMON: 负责在SERSSION断掉之后负责释放SGA资源, rollback of uncommitted work, 释放lock, 此外,还会监控其他background processes,并在必要的时候重起
SMON: 清理零时空间(eg: CREATE INDEX被abort),合并自由空间(DMT,pctincrease非0),RECOVER, RAC中一个INSTANCE失败后其它NODE会打开此失败的INSTANDE的REDO LOG并RECOVER, strinks rollback segments。
RECO:…
CKPT:CKPT更新DATA FILES的files head。 8.0之后此进程是必须的进程了(以前更新DATA FILES的files head的任务是由LGWR完成的,现在可以说是CKPT减轻了LGWR的工作强度)。
DBWn:从buffer cache写dirty blocks到disk。写的时候是异步IO(asynchronous I/O),DBWn手机BLOCK然后把它们交给OS,此时DBWn并不等待OS写完而直接去收集下批BLOCK。OS写完后会告诉DBWn可以再发下批数据了。
LGWR:比较像DBWn,只是写的时REDO。触发需要以下任何一个条件(COMMIT,3秒,redo log buffer 1/3满),所以一个大的redo log buffer并没有好处,因为它可能并没有完全用到。
ARCn: 当LGWR写满online redo log file后ARCH写到磁盘上,
ASMB :Automatic Storage Management Background: ASM
RBAL(Rebalance process) : ASM
LMON(Lock monitor process):RAC
LMD (Lock manager daemon ) process:RAC
LMSn (Lock manager server ) process:RAC
LCK0(Lock process):RAC
DIAG (Diagnosability daemon ) process:RAC
次要Background Processes
这些background process是可选的,基于你的需求. 并不需要每天运行(除非你设置成JOB) .
CJQ0(Job queues),最多可以有1000个进程, 因为没一个JOB QUEUE PROCESS在一个时间只为一个JOB服务,这就是我们为什么如果想同时跑多个JOB必须设置成多PROCESS的原因. CJQ0是一个协调者,他会根据字典里的信息来判断是否该触发一个Jnnn PROCESS来完成任务.
Q000(AQ queue proces)
QMNC (AQ monitor process)
MMAN(Automatic SGA sizing enabled)
- ORACLE深入 第四章 Oracle Processes
- Troubleshooting Oracle Background Processes
- Oracle Database Background Processes
- Oracle backgroup processes
- Oracle sessions & processes关系
- Oracle 修改 processes
- 深入解析Oracle学习笔记(第四章)
- Script to start Oracle processes
- oracle修改processes与sessions
- Oracle 修改sessions和processes
- oracle 修改session 和processes
- oracle第四章复习
- Oracle Background Processes -oracle 后台进程介绍
- ORACLE 内存管理--《深入浅出ORACLE第四章》
- 【Oracle】第四章异常处理
- 第四章 Oracle 表操作
- 修改oracle的processes和session
- 修改oracle的processes和session
- SATA 和 SATA2
- ORACLE10G修改主机名后的EM(Enterprise Manager)启动问题
- windows2003 ASP 配置指南(转)
- ORACLE深入 第五章 Locking and Latching
- eclipse快捷键
- ORACLE深入 第四章 Oracle Processes
- 中国PHPER水平区分与待遇参考
- ubuntu7.10下编译linux kernel 2.6.23.1之make menuconfig问题解决
- AJAX-ASP教程(GB编码,GET篇)
- ORACLE深入 第三章 内存结构
- ORACLE深入 第二章 Files
- 第四次作業
- smartphone创建菜单时出错
- morgan stanley 面试资料(一)