- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库核心进程.doc
ARC0,需要访问脱机存储设备和控制文件;以及?CKPT,需要访问数据文件和控制文件。
数据库写入进程(DBWn)
数据库写入进程database writer process (DBWn),将buffer中的内容写入数据文件中。DBWn进程负责将在buffer cache中的那些修改的buffer,也就是脏数据写入磁盘中。
对于大多数系统来说,1个进程(DBW0)就足够了,但也可以通过设置初始化参数DB_WRITER_PROCESSES,增加数据库写入进程,编号从DBW0-DBW9以及DBWa-DBWj,最多可以20个进程。但是前提是必须有足够多的CPU供这些进程使用,在一个单CPU的系统中,额外地配置该进程并不能提高性能,所以需要根据CPU及处理器的个数决定如何设置该参数。
当一个buffer在数据库的buffer cache中被修改了,就会被标记为脏数据(dirty)。Buffer cache的冷端(cold buffer)是指根据LRU(least recently used)算法选择出的,最近最少使用的buffer。DBWn进程将冷端的、脏的buffer写入磁盘,这样用户进程就可以查找冷端、干净的buffer用于将新的数据块读入cache中。当一个buffer被用户进程修改(弄脏),此buffer就不再是free buffer,不能用于新数据的写入。如果free buffer数量过少,用户进程就会找不到足够的空间用于数据写入。而DBWn进程有效地管理了buffer cache,让用户进程总是能够获得free buffer。
DBWn进程总是将冷端、脏buffer写入磁盘,DBWn在改善查找free buffer性能的同时,也另最近频繁使用的buffer保留在内存中。例如,储存那些频繁访问且较小的表或索引的数据块,可以keep在cache中,没必要反复地从磁盘中读取。由于LRU算法将访问频率高的数据块保留在buffer cache中,所以一个buffer被写入磁盘中,该buffer所包含的数据被马上访问的概率较小。
满足以下条件时,DBWn进程会将脏数据缓冲区(dirty buffers)写入磁盘:
·当服务器进程扫描了一定数量的buffer之后,没有找到干净的可用的buffer,它通知DBWn写入。DBWn将buffer写入磁盘的操作是异步的,因为在DBWn工作的同时还有其他进程在执行。
·DBWn周期性地写buffer,从而使得checkpoint前移,checkpoint是当一个实例需要实例恢复时,应用重做日志的起始位置。这个位置是由buffer中最早的脏数据缓冲区(dirty buffers)决定的。
无论那种情况,DBWn进程都是批量(一次多数据块)地写入以提高性能。一次批量写入的数据块的数量随操作系统的不同而改变,没有固定值。
日志写入进程(LGWR)
?????????日志写入进程log writer process (LGWR)负责管理日志缓冲区,将日志缓冲区写入磁盘上的日志文件。LGWR将从上次之后才复制到buffer中的重做条目写入磁盘。
?????????日志缓冲区(redo log buffer)是一个环形的缓冲区(circular buffer)。当LGWR进程将日志缓冲区的重做条目写入日志文件,服务器进程同时也将新的条目复制到日志缓冲区覆盖那些已经写入磁盘的条目。LGWR通常需要保证足够快地写入,即使在频繁访问redo log时也要确保缓冲区有足够的空间用于写入新的条目。
???????? LGWR将一部分连续的buffer写入磁盘。LGWR写入的内容有:
·一个用户进程提交事务的提交记录。
·Redo log buffer,以下3个条件,满足其中一个就写入。
·每三秒写入一次。
·当日志缓冲区使用了三分之一。
·当DBWn进程向磁盘写入脏缓冲区,但需要写入的日志还没有写入。
注意:
在DBWn进程向磁盘写入脏数据之前,所有与修改数据相关的重做记录都必须被写入磁盘,这就是先写日志原则(write-ahead protocol)。如果DBWn发现有一些重做记录没有写入磁盘,会通知LGWR将它们写入,并等待将LGWR进程将重做日志缓冲区内的相关数据写入磁盘后,才能将数据缓冲区写入磁盘。
LGWR同步地向一个日志组的多个镜像成员写入。如果其中的一个成员文件损坏了,LGWR继续向其他成员写入,并将错误记录到LGWR进程的trace文件和alert log中。如果一个日志组的所有成员文件都损坏了,或者日志组由于未归档而暂时不可用,那么LGWR就无法继续工作了。
?????????当用户执行了一句commit时,LGWR将提交记录放进日志缓冲区,并且将它与事务的重做条目一起立即写入磁盘。而相关的被修改的
文档评论(0)