你好,游客 登录 注册 搜索
背景:
阅读新闻

《Oracle编程艺术》学习笔记

Oracle进程

[日期:2012-01-11] 来源:Linux社区  作者:fw0124 [字体: ]
Oracle实例主要有3类进程(在Windows中,实际上是线程):
·服务器进程(server process):这些进程根据客户的请求来完成工作。服务器进程包括专用服务器和共享服务器。
·后台进程(background process):这些进程随数据库而启动,用于完成各种维护任务,如将块写至磁盘、维护在线重做日志、清理异常中止的进程等。
·从属进程(slave process):这些进程类似于后台进程,不过它们要代表后台进程或服务器进程完成一些额外的工作。

可以用下面的语句来查询系统中有哪些后台进程,这个视图中paddr不是00的行都是系统上运行的进程。
select paddr,name,description from v$bgprocess order by paddr desc;

PADDR    NAME       DESCRIPTION
-------- ---------- ------------------------------------------------------------
35486804 CJQ0       Job Queue Coordinator
35485CFC SMCO       Space Manager Process
354851F4 VKRM       Virtual sKeduler for Resource Manager
354830DC QMNC       AQ Coordinator
354825D4 ARC3       Archival Process 3
35481ACC ARC2       Archival Process 2
35480FC4 ARC1       Archival Process 1
3547F9B4 ARC0       Archival Process 0
3547D89C MMNL       Manageability Monitor Process 2
3547CD94 MMON       Manageability Monitor Process
3547C28C RECO       distributed recovery
3547B784 SMON       System Monitor Process
3547AC7C CKPT       checkpoint
3547A174 LGWR       Redo etc.
3547966C DBW0       db writer process 0
35478B64 MMAN       Memory Manager
3547805C DIA0       diagnosibility process 0
35477554 PSP0       process spawner 0
35476A4C DBRM       DataBase Resource Manager
35475F44 DIAG       diagnosibility process
3547543C GEN0       generic0
35474934 VKTM       Virtual Keeper of TiMe process
35473E2C PMON       process cleanup
00       RSMN       Remote Slave Monitor
...
00       XDWK       cell automation worker actions

已选择295行。

后台进程包括一些必不可少的进程和一些可选进程。

以下是一些比较重要的后台进程。
1. PMON:进程监视器(Process Monitor)
·负责在出现异常中止的连接之后完成清理
·负责监视其他的后台进程,并在必要时(如果可能的话)重启这些后台进程
·这就是向Oracle TNS监听器注册Oracle实例

2. SMON:系统监视器(System Monitor)
·清理临时空间
·合并空闲空间
    如果你在使用字典管理的表空间,SMON要负责取得表空间中相互连续的空闲区段,并把它们合并为一个更大的空闲区段。
·针对原来不可用的文件恢复活动的事务:这类似于数据库启动时SMON的作用
·执行RAC中失败节点的实例恢复
·清理OBJ$
·收缩回滚段
·“离线”回滚段
    让一个有活动事务的回滚段离线(offline),在这种情况下,回滚段并没有真正离线;它只是标记为“将要离线”。在后台,SMON会定期尝试真正将其置为离线,直至成功为止。
·很多其他维护工作。
SMON会定期醒来或被其他后台进程唤醒,执行这些维护工作。

3. RECO:分布式数据库恢复(Distributed Database Recovery)

4. CKPT:检查点进程(Checkpoint Process)
建立检查点就是把脏块(已修改的块)从块缓冲区缓存写至磁盘。Oracle切换日志文件时就会标记(建立)一个检查点。Oracle需要推进检查点,推进检查点后,就不再需要它刚填满的在线重做日志文件了。
检查点进程并不真的建立检查点,建立检查点主要是DBWn的任务。CKPT只是更新数据文件的文件首部,以辅助真正建立检查点的进程(DBWn)

5. DBWn:数据库块写入器(Database Block Writer)
负责将脏块写入磁盘的后台进程。DBWn会写出缓冲区缓存中的脏块,通常是为了在缓存中腾出更多的空间(释放缓冲区来读入其他数据),或者是为了推进检查点(将在线重做日志文件中的位置前移,如果出现失败,Oracle 会从这个位置开始读取来恢复实例)。
可以配置多个DBWn,充分利用硬件系统能力。
可能情况下,DBWn使用异步I/O将块写至磁盘。采用异步I/O,DBWn会收集一批要写的块,并把它们交给操作系统,立即返回,并收集下一批要写的块。当操作系统完成写操作时,它会异步地通知DBWn。

DBWn会把块写出到所有磁盘,即分散在各个磁盘上,也就是说,DBWn会做大量的分散写(scattered write);
LGWR则是向重做日志完成大量的顺序写(sequential write)。
从理论上讲,如果提交期间Oracle已经将已修改的块物理地写出到磁盘,就可以跳过写在线重做日志文件。但实际上,提交期间,只是由LGWR会把每个事务的重做信息写至在线重做日志,DBWn则在后台将数据库块刷新输出到磁盘。
这么做的原因就是分散写比顺序写慢多了。DBWn 在后台完成它的任务(很慢),而LGWR在用户提交后等待时完成自己的任务(这个任务比较快),就能得到更好的整体性能。尽管从技术上讲这样会使Oracle执行更多不必要的I/O(写日志以及写数据文件)。

6. LGWR:重做日志写入器(Log Writer)
LGWR 进程负责将SGA中重做日志缓冲区的内容刷新输出到磁盘。
数据在重做缓冲区里停留的时间不会太长。实际上,LGWR会在以下某个情况发生时启动对这个区的刷新输出到磁盘(flush):
·每3秒一次
·无论何时有人提交请求
·要求LGWR切换日志文件
·重做缓冲区1/3满,或者包含了1MB的缓存重做日志数据
由于这些原因,如果重做缓冲区的大小超过几MB,通常对系统就没有什么意义了。如果是一个有大量并发事务的大型系统,也许大的重做日志缓冲区会对它有利,因为LGWR把日志缓冲区的一部分输出到磁盘时,其他会话可能会在缓冲区中填入新的数据。一般而言,如果一个事务长时间运行,就会生成大量重做日志,采用更大的日志缓冲区对这种事务最有好处。

7. ARCn:归档进程(Archive Process)
ARCn 进程的任务是:当LGWR 将在线重做日志文件填满时,就将其复制到另一个位置。
在线重做日志用于在出现电源故障(实例终止)时“修正”数据文件,而归档重做日志用于在出现硬盘故障或者误操作删除数据时配合数据文件备份“修正”数据文件。

如果在服务器的警告日志文件(alert_<ORACLE_SID>.log)中看到如下的警告消息:
Thread 1 cannot allocate new log, sequence 1466
Checkpoint not complete
Current log# 3 seq# 1465 mem# 0: /home/ora10g/oradata/ora10g/redo03.log
警告消息中也可能指出Archival required而不是Checkpoint not complete,但是结果几乎一样。
如果数据库试图重用一个在线重做日志文件,但是出现以下情况,就会输出这样一条警告消息。
·DBWn还没有完成重做日志所保护数据的检查点(checkpointing)
·ARCn还没有把重做日志文件复制到归档目标
对最终用户来说,这个时间点上数据库实际上停止了。DBWn 或ARCn将得到最大的优先级以将redo块刷新输出的磁盘。

解决这个问题的办法:
·对DBWR调优,或者使用多个DBWR进程。看看系统产生的I/O,查看是否有一个磁盘(或一组磁盘)“太热”,相应地需要将数据散布开。这个建议对ARCn也适用。
·增加更多在线重做日志文件或者创建更大的重做日志文件。这给DBWn留出了足够的活动空间来建立检查点,也给ARCn留出足够的时间来归档日志。
·让检查点发生得更频繁、更连续。可以修改诸如FAST_START_MTTR_TARGET 、LOG_CHECKPOINT_INTERVAL和LOG_CHECKPOINT_TIMEOUT等参数设置以强制DBWn更频繁地刷新输出脏块。缺点是会导致缓冲区缓存不能充分发挥作用。

linux
【内容导航】
第1页:配置环境 第2页:开发成功的Oracle应用
第3页:SELECT FOR UPDATE SKIP LOCKED 第4页:Oracle体系结构
第5页:Oracle中的文件 第6页:Oracle中的文件-参数文件
第7页:Oracle中的文件-Trace文件 第8页:Oracle中的文件-警告日志文件
第9页:Oracle中的文件-数据文件 第10页:SGA,PGA和UGA
第11页:Oracle进程 第12页:Oracle的锁
第13页:Oracle的并发与多版本控制 第14页:写一致性
第15页:事务原子性 第16页:事务持久性
第17页:DEFERRABLE约束 第18页:REDO和UNDO
第19页:数据库日志模式 第20页:块清除
第21页:ORA-01555:snapshot too old 错误 第22页:表类型
第23页: 第24页:堆组织表
第25页:索引组织表 第26页:索引聚簇表
第27页:散列聚簇表 第28页:有序散列聚簇表
第29页:临时表和CBO 第30页:B*树索引
第31页:什么情况下适合使用B*树索引 第32页:位图索引(bitmap index)
第33页:基于函数的索引 第34页:数据类型-字符串和二进制串
第35页:数据类型-数值 第36页:数据类型-时间日期
第37页:数据类型-LOB 第38页:表分区
第39页:索引分区 第40页:分区的优点
相关资讯       Oracle基础教程 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款