数据库结构(四).进程结构
一、数据库的进程
<提示>在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