Oracle常用进程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle常⽤进程
PMON
PMON,进程监视。
PMON主要有3个⽤途:
1,在进程⾮正常中断后,做清理⼯作。
例如:dedicated server失败了或者因为⼀些原因被杀死,这是PMON的⼯作分两种。
第⼀,是对dedicated server所做的⼯作进⾏恢复或撤销。
第⼆:是释放dedicated server占⽤的资源。
PMON会把失败进程的未提交的⼯作进⾏rollback,释放锁,释放SGA空间
2,在进程abort后,PMON进⾏清理⼯作。
PMON会监视oracle其他的后台进程,并在需要的时候对它们进⾏重建。
如果shared server或者dispatcher失败后,PMON会介⼊其中,并在清理完失败进程后,重建⼀个shared server或dispatcher。
例如:在数据库进⾏写⽇志的时候LGWR进程失败,这是个很严重的错误。
解决这种问题最安全的⽅法是⽴即中断实例,并恢复。
3,PMON的第三个⽤途是,向Oracle TNS listener注册实例信息。
在实例启动的时候,PMON会查询oracle的默认端⼝(1521端⼝)是否处于⼯作状态。
如果这个端⼝已经处于⼯作状态,那么该实例就可以启动,PMON把实例的相关信息告诉listener,包括服务名、实例的信息等。
如果listener没有启动,PMON就会定期的尝试去连接listener。
这⾥要注意如果oracle没有是默认的1521端⼝,⽽是使⽤其他的端⼝时,PMON和listener的连接过程和使⽤1521端⼝还是很相似的,除了,在使⽤⾮默认端⼝时,listener的地址要在参数LOCAL_LISTENER 中指定。
SMON
SMON,系统监视。
SMON的⼯作如下:
1,清理临时空间。
2,聚合空闲空间。
如果使⽤dictionary-managed ⽅式来管理表空间,SMON就要负责把空闲的extent聚合成⼤的空闲extent。
这种情况只有在表空间的管理⽅式是dictionary-managed ,且参数PCTINCREASE被设置成⾮零值的时候才会发⽣。
3,对不可⽤⽂件的事务恢复。
在数据库启动的时候,SMON会恢复失败的事务,这些事务是在实例恢复或crash恢复的时候被跳过的。
例如:在磁盘上某哥⽂件不可⽤了,在这个⽂件⼜重新可⽤后,SMON会恢复它。
4,在RAC的单节点故障上进⾏实例恢复。
在RAC 环境下,如果cluster(簇群)中有⼀个实例失败了(如:实例所在的机器挂掉了),在这个cluster上的其他的节点会打开失败实例的redo log,并恢复失败实例
5,清理OBJ$。
OBJ$是个低级别的数据字典,它⼏乎包含了数据库中所有的objects的entry。
多数时候,有的entries的objects已经被删除了,或者当前的entry代表的不再是最新的objects。
SMON就负责删除这些entry信息了
6,收缩undo segments。
SMON会⾃动把rollback segment收缩到最优的⼤⼩
7,离线rollback segments。
DBA可能需要把⼀个处于active状态的事务的rollback segment离线。
此时如果事务正在使⽤这个已经离线的rollback segment,那么这个segment并未真的离线,⽽是被标记为“pending offline"。
在后台,SMON会⼀直尝试离线这个segment,直到成功。
此外,SMON还会刷新视图DBA_TAB_MONITORING的统计信息等。
SMON会消耗⼤量的CPU。
SMON会定期地,或被其他后台进程唤醒,来执⾏清理⼯作。
CKPT
CKPT,检查点进程。
CKPT进程并不像它的名字说的那样进⾏checkpoint,执⾏checkpoint是DBWn的⼯作。
它只是来更新数据⽂件头的。
oracle8.0之前,CKPT只是⼀个可选的进程。
但oracle8.0之后,CKPT进程就进程被打开。
过去更新数据⽂件头的checkpoint 信息是LGWR 的⼯作,然⽽,随着数据库⽂件的增加,LGWR的负担也变得越来越重。
如果LGWR要更新100,甚⾄1000哥⽂件头,那么就会有很多的session等待很长时间去commit。
所有CKPT就把这个⼯作承担下来了
DBWn
DBWn,数据写进程。
DBWn负责把缓冲区的脏数据写到磁盘上。
在oracle发⽣switch log files的时候,会发⽣checkpoint。
checkpoint发⽣后,在redo log中的数据就可以被覆盖了。
如果在redo log被填满,且要重新利⽤redo log 来存放新的数据时,⽽此时checkpoint还为完
成,oracle就会返回”checkpoint not complete“。
DBWn的性能相当重要。
如果DBWn写数据的速度不够快,这样释放出空闲buffer的速度也就不会快。
那么Free Buffer Waits 和Write Complete Waits的值就会很快的增长。
oracle可以配置多达36个DBW进程。
从DBW0到DBW35.多数系统只有⼀个DBW进程,但在多CPU系统中就可能不⽌⼀个DBW进程了。
这样做的⽬的是分散写数据的负担,保证SGA中有⾜够的空闲空间。
优化情况下,DBW是通过异步(asynchronous)I/O向磁盘写数据的。
通过异步I/O,DBW先把blocks组成⼀个batch(⼀捆),再把batch递交给OS,DBW不会等待OS把batch写⼊到磁盘,⽽是返回,继续收集下⼀个batch。
当OS完成写后,会异步通知DBW进程,已经把batch 成功的写⼊到磁盘了。
最后,DBW进程是分散地把数据写到磁盘上的。
⽽LGWR是连续写redo log。
分散写要⽐连续写耗时的多。
但是,DBW是在后台进⾏分散写的,⽽LGWR做连续写是为了减少⽤户等待的时间。
疑问:TOM说DBWn是把blocks组成⼀个batch,然后异步交给OS,让OS写到磁盘的。
为啥⼜说DBWn是分散写数据的,写数据的活不是OS⼲的吗?
LGWR
LGWR,⽇志写进程。
LGWR是把SGA中redo log buffer的信息写到redo log file的进程。
LGWR会在下⾯情况发⽣:
1,每个3秒钟,进⾏⼀次LGWR
2,任何事务进⾏了commit
3,当redo log buffer是1/3满,或者⾥⾯有1MB的数据
基于以上的原因,把redo log buffer设置的很⼤就没必要的。
ARCn
ARCn,归档进程。
ARCn的⼯作是在LGWR把onlone redo log填满后,ARCn把redo log file的内容copy到其他的地⽅。
归档⽇志可以⽤来做media recovery。
online redo log 是被⽤来为实例失败的时候,恢复数据⽂件。
⽽归档⽇志是被⽤来在media recovery的时候,恢复数据⽂件。