您好,欢迎访问三七文档
黄老师2013.7Oracle进程•Oracle服务器的内存结构•内存结构与Oracle服务器性能的关系•影响内存结构大小的数据库初始化参数课程内容进程是操作系统中的一种机制,它可执行一系列的操作步骤。在有些操作系统中使用作业(JOB)或任务(TASK)的术语。一个进程通常有它自己的专用存储区。ORACLE进程的体系结构设计使性能最优。概述进程分类ORACLE实例有两种类型:单进程实例和多进程实例。单进程ORACLE实例(又称单用户ORACLE)是一种数据库系统,一个进程执行全部ORACLE代码。由于ORACLE部分和客户应用程序不能分别以进程执行,所以ORACLE的代码和用户的数据库应用是单个进程执行。在单进程环境下的ORACLE实例,仅允许一个用户可存取。例如在MS-DOS上运行ORACLE。多进程ORACLE实例(又称多用户ORACLE)使用多个进程来执行ORACLE的不同部分,对于每一个连接的用户都有一个进程。在多进程系统中,进程分为两类:用户进程和ORACLE进程。当一用户运行一应用程序,如PRO*C程序或一个ORACLE工具(如SQL*PLUS),为用户运行的应用建立一个用户进程(如,Session)。ORACLE进程又分为两类:服务器进程和后台进程。服务器进程服务器进程用于处理连接到该实例的用户进程的请求。当应用和ORACLE是在同一台机器上运行,而不再通过网络,一般将用户进程和它相应的服务器进程组合成单个的进程,可降低系统开销。然而,当应用和ORACLE运行在不同的机器上时,用户进程经过一个分离服务器进程与ORACLE通信。它可执行下列任务:1)对应用所发出的SQL语句进行语法分析和执行。2)从磁盘(数据文件)中读入必要的数据块到SGA的共享数据库缓冲区(该块不在缓冲区时)。3)将结果返回给应用程序处理。后台进程系统为了使性能最好和协调多个用户,在多进程系统中使用一些附加进程,称为后台进程。在许多操作系统中,后台进程是在实例启动时自动地建立。一个ORACLE实例可以有许多后台进程,但它们不是一直存在。后台进程有:DBWR(DatabaseWrite):数据库读写进程LGWR(LogWrite):日志读写进程CKPT(Checkpoint):检查点进程SMON(SystemMonitor):系统监视进程PMON(ProcessMonitor):进程监视进程ARCH(Archive):归档进程RECO:恢复进程LCKn:封锁进程监视进程每个后台进程与ORACLE数据库的不同部分交互。其中SMON、PMON、DBWn、CKPT、LGWR是五个必须的ORACLE后台进程。DBWR数据库读写进程(1)DBWR不是将所有的脏缓存块写入数据文件,因为脏缓存块一旦被写入数据文件,它将被标记为空闲缓存块,其中保存的数据将丢失。如果随后立即有其他的用户进程来访问缓存块中以前所保存的数据,oracle需要重新到数据文件中读取,这样很显然不是我们所期望的。通过LRU算法能够解决这个问题。LRU(最近最少使用)算法。最近未被访问过的缓存块被标记为“冷缓存块(coldcacheblock)”,DBWR进程只将那些同时被标记为“脏”和“冷”的缓存块写入数据文件,这样,那些经常被访问的脏缓存块将继续保留在缓存中,直到他们不再需要使用时才由DBWR进程写入数据文件。脏缓存块:如果某个缓存块的数据被修改,它将被标记为脏DBWR数据库读写进程(2)将脏缓存块写入数据文件的情况:1、空闲缓存块不够时,DBWR将脏缓存块写入数据文件!2、当检查点发生时,启动DBWR3、当数据库缓存的LRU列表的长度达到初始化DB_BLOCK_WRITE_BATCH指定值的一半时,DBWR将被启动;4、若发生超时(大约3秒内未被启动),DBWR进程将被启动注意:DBWR进程启动的时间与用户提交事务的时间完全无关。也就是说,在执行commit语句提交事务之后,与该事务相关的脏缓存块并不是立即写入数据文件中的(但是执行commit语句后将立即启动LGWR将事务写入重做日志文件)。DBWR的启动时间太长,对将来恢复数据库不利,启动时间太短,将给系统I/O带来很多的负担。DBWR数据库读写进程(3)与DBWR相关的初始化参数DB_WRITER_PROCESSES这个参数用于设置创建实例时启动的DBWR后台进程数量,默认为1,即在创建实例时仅启动一个DBWR(DBW0)DB_BLOCK_CHECKPOINT_BATCH这个参数用于设置在每个检查点发生时,DBWR进程写入的脏缓存块的最大数目。增大该参数,可以延长启动DBWR进程的时间间隔。DB_BLOCK_LRU_LATCHES设置数据库缓存区中LRU闩的数量。闩(Latch):oracle用于顺序访问内部系统结构的锁;它被用来控制数据库缓存写入操作的争用。多处理器系统中,这个参数值通常是处理器数目的一半。LGWR日志读写进程(1)日志写进程负责将重做缓存中的重做记录写入联机重做日志文件。缓存中的数据写入重做日志文件之后,相应的缓存内容将被清空。下列情况下,oracle将缓存中的数据写入重做日志文件。·用户通过COMMIT语句提交当前事务·重做日志缓存被写满三分之一·有大于1M的重做日志缓冲区未被写入磁盘·DBWR进程开始将脏缓存块写入数据文件·每隔3秒,即发生一次超时,此时会启动LGWRLGWR日志读写进程(2)事务修改了数据库,将在数据库缓存中产生脏缓存块,同时在重做日志缓存中产生重做记录。如果DBWR进程要将事务的结果写入数据文件,但发现与要写入的脏缓存块相关的重做信息仍然处于重做日志缓存中,它将通知oracle启动LGWR进程,先将这些重做信息写入重做日志文件,直到重做信息全部被写入后,DBWR进程才开始将脏缓存块写入数据文件。这样做保证了数据库的完整性。将来可以做完全恢复或者回退该事务!LGWR日志读写进程(3)日志缓冲区是一个循环缓冲区。当LGWR将日志缓冲区的日志项写入日志文件后,服务器进程可将新的日志项写入到该日志缓冲区。LGWR通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。注意:有时候当需要更多的日志缓冲区时,LWGR在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。LGWR日志读写进程(4)重做日志的几种提交方式:1、快速提交:用户提交一条COMMIT语句时,LGWR立刻将一条提交记录写入到重做日志文件中,然后再开始写入与该事务相关的重做信息。而此时的脏数据块并不会立刻被DBWR进程写入数据文件oracle只有当LGWR将事务的全部重做信息写入重做日志文件之后,才认为这个事务提交成功。事务提交成功后,系统会生成一个SCN,SCN同时保存在它的提交记录和重做记录中。由于SCN记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。2、组提交:LGWR将重做日志缓存中的数据一次性全部(包括已提交和未提交的事务)写入重做日志文件!这样最小化了oracle对I/O的操作,大大提高了oracle的性能!提示:不必担心在组提交情况下是否有未提交事务的重做记录也被写入重做日志文件,因为这些事务的重做记录由于缺少一个提交记录,所以能够被oracle识别出来。CKPT检查点进程(1)概述:“检查点”是一个事件。它能保证数据库处于一个完整状态。执行一个检查点后,Oracle将所有已提交事务对数据库的修改全部写入到硬盘中,此时保证了数据库处于一个完整状态。如果将来数据库崩溃,只需要将数据库恢复到一个检查点执行时刻即可。CKPT工作机制CKPT进程本身只完成两件工作:1)执行检查点和更新控制文件和数据文件DBStatus;2)将脏缓存块写入数据文件的任务交给DBWR进程完成;CKPT检查点进程(2)几个典型检查点执行时间1)在一次重做日志切换时,执行数据库检查点。DBWR进程将缓存中所有的脏缓存块写入数据文件中;2)在表空间被设为脱机时,DBWR进程将缓存中所有与该表空间相关的脏缓存块写入数据文件中;3)每隔多长时间执行一次检查点;CKPT检查点进程(3)检查点的相关初始化参数LOG_CHECKPOINT_TIMEOUT检查点执行的最大间隔时间默认1800秒,也就是30分钟执行一次CHPT。如果该参数设置为0,将禁用基于时间的检查点。LOG_CHECKPOINT_INTERVAL当操作系统块达到多少时执行检查点。(下面有例子)无论该参数设置为什么值,在切换日志时都会出现检查点。LOG_CHECKPOINT_TO_ALERT是否将检查点信息记录到警报日志中。CKPT检查点进程(4)消除不必要检查点的例子假设数据库的重做日志文件大小为5MB,将LOG_CHECKPOINT_INTERVAL参数设置为1152,即当重做日志写入4.5MB时发生检查点切换。(操作系统块大小通常为4KB,1152×4KB=4.5MB)但实际上当重做日志被写满(5MB)时必然会发生日志切换,这时会被执行另一个检查点。显然,前面那个检查点是多余的!SMON系统监视进程在实例启动时负责恢复数据库,步骤如下:1、如果上次数据库是非正常关闭的,当下一次启动实例时,SMON进程会自动读取重做日志文件,对数据库进行恢复(执行将已提交的事务写入数据文件、回退未提交的事务等操作)2、回收临时段或临时表空间中不再使用的空间注意:要想SMON整理某表空间的存储碎片,那么他至少要将PCTINCREASE设置为13、将各个表空间中空闲空间碎片合并在一起SMON进程在启动时被唤起,平时也会被定期地唤醒来做事PMON进程监视进程定期检查调度程序和服务进程。如:获取失败用户的标识,并释放其进程所占系统资源,并强制恢复该失败的进程;主要做了下面的工作(恢复故障步骤):1)清除非正常中断的用户进程留下的孤儿会话;2)回退未提交的事务;3)释放会话所占用的锁;4)SGA区、PGA区等资源;5)将该故障的进程的ID从活动进程表中移去;PMON有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。RECO恢复进程恢复进程RECO负责在分布式数据库环境(DistributedDatabase)中自动恢复那些失败的分布式事务(DistributedTransactions);如果参数DISTRIBUTED_TRANSACTION设置的大于0,那么RECO进程自动启动;当某个分布式事务由于网络连接故障或者其他原因而失败时,RECO进程将尝试与该事物相关的所有数据库进行联系,以完成对该失败事务的处理工作。RECO进程一般不需要DBA进行干预,他会自动完成自己的任务。ARCn归档进程数据库运行在归档模式下时,归档进程ARCn负责在日志切换后将已经写满的重做日志文件复制到归档目标中,以防止写满的重做日志文件被覆盖。注意:手动归档和自动归档LCKn封锁进程是在具有并行服务器选件环境下使用,可多至10个进程(LCK0,LCK1……,LCK9),用于实例间的封锁。Dnnn调度程序进程调度进程Dnnn实际上是多线程服务器(MultithreadedServer,MTS,即共享服务器模式)的组成部分,它以后台进程的形式运行。调度程序进程接受用户进程的请求,将他们放入请求队列中,然后为请求队列中的用户进程分配一个服务进程。DBWR、CKPT、LGWR进程合作总原则将内存数据块写入数据文件实在是一个相当复杂的过程,在这个过程中,首先要保证安全。所谓安全,就是在写的过程中,一旦发生实例崩溃,要有一套完整的机制能够保证用户已经提交的数据不会丢失;其次,在保证安全的基础上,要尽可能的提高效率。众所周知,I/O操作是最昂贵的操作,所以应该尽可能的将脏数据块收集到一定程度以后,再批量写入磁盘中。合作的既安全又高效的目标将内存数据块写入数据文件实在是一个相当复杂的过程,在这个过程中,首先要保证安全。所谓安全,就是在写的过程中,一旦发生实例崩溃,要有一套完整的机制能够保证用户已经提交的数据不会丢失;直观上最简单的解决方法就是,每当用户提交的时候就将所改变的内存数据块交给DB
本文标题:ORACLE进程
链接地址:https://www.777doc.com/doc-13157 .html