来着TOM的《oracle 编程艺术 9i,10g,11g》

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的时候,恢复数据文件。

转自:http://zzwssfd.iteye.com/blog/1554629

oracle 的服务器进程(PMON, SMON,CKPT,DBWn,LGWR,ARCn)的更多相关文章

  1. ORACLE内存结构:PGA And UGA,ORACLE用户进程、服务器进程

    执行一个SQL语句 执行查询语句的过程: 用户进程执行一个查询语句如select * from emp where empno=7839 用户进程和服务器进程建立连接,把改用户进程的信息存储到PGA的 ...

  2. ORACLE 的前后台进程

    关于oracle用户进程,服务进程,后台进程 用户进程(User Process) 是一个需要与Oracle Server交互的程序 运行于客户端 当用户运行某个工具或应用程序(如SQL*Plus)时 ...

  3. Oracle 后台进程(五)SMON进程

    转载自:刘相兵 Maclean Liu 文章 你所不知道的后台进程 SMON 功能   SMON(system monitor process)系统监控后台进程,有时候也被叫做 system clea ...

  4. Oracle体系结构之进程

    Oracle体系结构之进程 一.概述 Oracle中的每个进程都要执行一个特定的任务(或者一组任务),每个进程都会为自己分配内存(PGA)来完成它的任务.一个Oracle实例主要有以下3类进程: (1 ...

  5. 【转】Oracle基础结构认知—进程及逻辑结构 礼记八目 2017-12-17 19:33:21

    原文地址:https://www.toutiao.com/i6500477672349499917/ 一. Process Structure进程结构 Oracle有两种类型的进程: 服务器进程和后台 ...

  6. Oracle 11g 服务器结构

    Oracle 服务器主要又实例.数据库.程序全局区和前台进程组成. 实例可以进一步划分为系统全局区(SGA)和后台进程(PMON.SMON等)两部分,其中,SGA 使用操作系统的内存资源,而后台进程需 ...

  7. Linux下使用ps命令来查看Oracle相关的进程

    Linux下可以使用ps命令来查看Oracle相关的进程 Oracle Listener 这个命令会列出Oracle Net Listener的进程 [oracle@ www.linuxidc.com ...

  8. ORACLE处理用户进程大剖析[阅读]

    下面我们要讲ORACLE服务器进程如何处理用户进程的请求,当一个用户进程发出了一条SQL语名:   UPDATE TABBLEA SET SALARY=SALARY*2:   首先,服务器进程把这条语 ...

  9. Linux下可以使用ps命令来查看Oracle相关的进程

    Linux下可以使用ps命令来查看Oracle相关的进程 Oracle Listener 这个命令会列出Oracle Net Listener的进程 [oracle@ www.linuxidc.com ...

随机推荐

  1. C#--virtual,abstract,override,new,sealed

    virtual:使用此关键字,可以使其在派生类中被重写. abstract:抽象方法,由子类重写,或继续为抽象方法存在,并由其子子类实现. override: 重写父类方法,属性,或事件的抽象实现或虚 ...

  2. C# TextBox控件 显示大量数据

    串口通信:在使用TextBox空间显示数据时,因为要显示大量的接收到的数据,当数据量大且快速(串口1ms发送一条数据)时,使用+=的方式仍然会造成界面的卡顿(已使用多线程处理),但使用AppendTe ...

  3. 用jQuery的ajax请求一般处理程序返回json数据

    1.web页面代码: 注意事项: dataType类型一定要写成json. 2.一般处理程序代码: 注意事项: ContentType类型写成"application/json"或 ...

  4. JavaScript进阶学习的一些建议

    blankyao最近问我如何学习JavaScript,他觉着在理解了JavaScript的语法之后,不知如何去学习JavaScript了. 其实我也是个JavaScript小菜,最近在开发中遇到不少关 ...

  5. jquery1.9学习笔记 之选择器(基本元素三)

    标签选择器("element") 描述: 选择所有与给出标签名相匹配的元素. 同功能的JS原生方法:getElementByTagName() 例子:  查找每个div元素. &l ...

  6. MTK手机最低亮度值修改教程,有效降低亮度[转]

    感谢halflover的教程 反编译framework-res.apk 打开\framework-res\res\values\integers.xml 然后找到 <integer name=& ...

  7. 转:AM335x启动流程(BootRom->MLO->Uboot)

    http://blog.chinaunix.net/uid-28458801-id-3486399.html 参考文件: 1,AM335x ARM Cortex-A8 Microprocessors ...

  8. iOS设备后台播放音乐方法

    iOS设备后台播放音乐方法 1 在设置Capabliites中打开Background Modes,选择Audio And AirPlay 2 在控制viewDidLoad中添加下面代码 AVAudi ...

  9. 根据SVN的MESSAGE进行多版本输出,反向排序,真是曲折~~~啊

    import os,sys,time file = open('svnlog') revList = [] tempList = [] linen = 1 for line in file: if ( ...

  10. EBS服务器管理

    EBS 服务的重启 停止Oracle Applications 服务的顺序为:停止应用产品相关服务,再停止数据库相关服务: 启动Oracle Applications 服务的顺序为:启动数据库相关服务 ...