Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
数据库结构(四).进程结构
 
 
一、数据库的进程
 
    <提示>在Windows中如何查看进程(10g):
    打开【配置和移植工具】- Administrator Assistant for Windows
    找到数据库后点击右键 - 选择【进程信息】,即可查看。
 
 
数据写进程DBWR
 
    1、将修改过的数据缓冲区的数据写入对应数据文件
    2、维护系统内的空缓冲区
 
    这里指出几个容易错误的概念:
    1.当一个更新提交后,DBWR把数据写到磁盘并返回给用户提交完成 
×
    2.DBWR会触发CKPT后台进程×
    3.DBWR不会触发LGWR进程×
 
    DBWR是一个很底层的工作进程,它批量的把缓冲区的数据写入磁盘。和任何前台用户的进程几乎没有什么关系,也不受他们的控制。
    DBWR在以下情况下会被触发开始工作:
    1.服务器进程将脏数据块移入DIRTY列表到达其临界值长度(该长度为DB-BLOCK-WRITE-BATCH的一半)
    2.服务器进程搜索一定数量缓存块后仍未找到可用空闲缓存
    3.出现超时(约3s内未被启动)
    4.CKPT进程会通过LGWR通知DBWR进行写操作
 
    DBWR进程若启动太多频繁,则将降低系统I/O性能;若太久启动一次,则对数据库恢复造成一定影响。
 
 
日志写进程LGWR
 
    将重做日志缓冲区的数据写入重做日志文件。
    LGWR是一个必须和前台用户进程通信的进程,当数据被修改的时候,系统会产生一个重做日志并记录在重做日志缓冲区内。这个重做日志可以类似的认为是以下的一个结构:
 
        SCN=000000001000
        数据块ID
        对象ID=0801
        数据行=02
        修改后的数据=0011
 
    提交的时候,LGWR必须将被修改的数据的重做日志缓冲区内数据写入日志数据文件,然后再通知前台进程提交成功,并由前台进程通知用户。从这点可以看出LGWR承担了维护系统数据完整性的任务。
    LGWR在以下情况下触发工作:
    1.用户提交当前事务
    2.重做日志缓冲区被写满1/3
    3.有大于1M 重做日志缓冲区未被写入磁盘
    4.每隔3s发生一次超时,启动LGWR
    5.DBWR需要写入的数据的SCN号大于LGWR记录的SCN号,DBWR触发LGWR写入
 
    一个LGWR进程可以对多个日志文件组成员操作,以避免某个日志文件损坏的情况下发生错误。
    LGWR切换日志时生成一个检查点,通知DBWR写入数据。因为即将覆盖日志文件可能是一个事务修改数据留下的日志。
 
 
归档进程ARCH
 
    当数据库以归档方式运行的时候,Oracle会启动ARCH进程,当重做日志文件被写满时,日志文件进行切换,旧的重做日志文件就被ARCH进程复制到一个或多个特定的目录/ 远程机器。这些被复制的重做日志文件被叫做归档日志文件。
 
    要启动 ARCH 进程,除了数据库要运行在归档模式下外,还需要设置初始化参数 ARCHIVE_LOG_START 为 TRUE ,否则当日志写满之后,数据库会被挂起,等待管理员手动归档之后重新工作。
 
    一个数据库实例可以有多个归档进程,其数量由归档进程参数 LOG_ARCHIVE_MAX_PROCESSES 决定。当归档进程对日志归档时,任何进程无法访问日志文件,直到归档完毕,因此为了加快归档速度,可以启动多个归档进程。
 
 
检查点进程CKPT
 
    检查点进程 CKPT 负责执行检查点,并更新控制文件,启用 DBWR 进程将脏缓存块中的数据写入数据文件(该任务一般由 LGWR 执行)。 CKPT 对于许多应用情况的都不是必须的,只有当数据库数据文件很多, LGWR 在检查点时明显降低性能的情况下才使用 CKPT 。
 
    CKPT 的作用主要就是:同步数据文件、日志文件和控制文件。由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。CKPT会更新数据文件/控制文件的头信息。
 
    检查点的执行间隔如果设置过短,则增加磁盘的 I/O 操作,过长则数据库恢复将消耗太多时间。可以根据以下参数来设置检查点的间隔时间:
 
    LOG_CHECKPOINT_TIMEOUT :决定执行检查点的时间间隔  
    LOG_CHECKPOINT_INTERVAL :设置每产生多少个日志文件数据,系统产生一个检查点
 
    CKPT工作的主要条件如下:
    1. 在日志切换的时候
    2. 数据库用 immediate、transaction、normal 选项 shutdown 数据库时
    3. 根据LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的设置值执行
    4. 用户触发
 
 
系统监控SMON
 
    系统监控进程 SMON 在数据库实例启动时,负责对数据库进行回复操作。如数据库非正常关闭,则下次启动时 SMON 将根据重做日志文件对数据库进行恢复。 SMON 在实例启动时执行一次,其他时候则在其他进程需要时重新启动。
 
    SMON 的工作主要包含:
    1. 在系统启动时,完成系统实例恢复
    2. 清除临时空间
    3. 聚结空闲空间
    4. 从不可用的文件中恢复事务的活动
    5. OPS中失败节点的实例恢复
    6. 清除OBJ$表
    7. 缩减回滚段
    8. 使回滚段脱机
 
 
进程监控PMON
 
    进程监控进程 PMON 在用户进程出现故障时执行进程恢复,并负责清理内存区、释放该进程所使用的资源。例如用户未从数据库退出的情况下直接关闭客户端程序,或由于网络中断而使数据库连接非正常中断,均会由 PMON 清除失效的用户进程,释放用户进程所用的资源。
 
    此外 PMON 进程还会周期性地检查调度程序和服务进程的状态,如果它们失败, PMON 将尝试重启它们,并释放资源。例如:PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源。
 
 
分布式恢复RECO
 
    RECO 负责解决分布事物中的故障。
 
    在分布式数据库系统中包含了多个数据库实例,他们像一个数据库一样运行,其中任何一个实例都可以修改其他数据库的数据。当由于网络问题,有些远程修改过程处于悬而未决的状态。RECO进程会试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。
 
 
用户进程User Process
 
    在客户端,负责将用户的SQL语句传递给服务进程,并从服务器段拿回查询数据。
 
 
服务进程Server Process
 
    服务进程的分类:
    1 、专用服务进程(Dedicated Server Process)
        此时各个服务进程是完全独立的,一个服务进程对应一个用户进程,直到用户断开与实例间的连接才会终止。
    2 、共享服务进程(MultiTreaded Server Process)
        一个服务进程对应多个用户进程,轮流为用户进程服务。可以用少量服务进程通过调度进程为任意数量的用户进程服务。
 
 
调度进程 Dnnn
 
    调度进程 Dnnn 是位于用户进程与共享服务进程之间的关键进程。它负责将用户进程分配给空闲的服务进程,并将处理后的结果返回给用户进程。
 
    管理员可根据情况配置多个调度程序,其名称依次为: D000 、 D111 、 D222 、……、 Dnnn
 
 
posted on 2008-08-21 23:48 decode360 阅读(218) 评论(0)  编辑  收藏 所属分类: 08.DBA

只有注册用户登录后才能发表评论。


网站导航: