ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【内存&进程】Oracle内存&进程结构(转载)

【内存&进程】Oracle内存&进程结构(转载)

原创 Linux操作系统 作者:chicheng_cn421 时间:2011-05-10 17:56:07 0 删除 编辑

原PPT文件可到这里下载
http://space.itpub.net/20335819/viewspace-694945
 
【内存&进程】Oracle内存&进程结构(转载)
杨南海 大连理工大学
Oracle内存&进程结构
提纲
■1 服务器服务模式
■2 实例及其内存结构
■3 SGA
■4 PGA
■5 进程结构
■6 后台进程
1 服务器服务模式
■运行模式
  □数据库为用户进程提供服务的方式。
■两种
  □专用服务器模式
  □共享服务器模式
2 实例及其内存结构
■实例
  □Oracle数据库服务器由一个Oracle数据库和一个Oracle实例构成。
  □数据库启动后,将会为其分配一个系统全局区,并启动若干的后台进程。
  □所有的后台进程以及内存结构的总和成一个Oracle实例。
  □用户对数据库的访问是通过与实例的交互实现的,实例在数据库和用户间充当了中介角色。
  □每个数据库至少对应一个实例。
■实例组成
  □实例的内存结构:系统全局区(SGA)和程序全局区(PGA)
  □实例的进程结构:若干后台进程和服务进程组成,共享服务器下还包括调度进程。
实例的内存结构
■存储的数据
  □缓存数据,如用户查询和修改过的数据块以及重做记录
  □解析后的SQL或PL/SQL程序代码。
  □所有数据库用户的会话信息。
  □后台进程所需要的共享信息和数据。
■组成
  □SGA
■SGA中的数据可以被所有的服务和后台进程共享。
  □PGA
■PGA中保存的是某个服务进程私有的数据和控制信息,它是非共享内存。Oracle中每个服务进程都有自己的PGA区,因此,PGA区可看作是服务进程的组成部分之一。
3 SGA
■概念
  □系统全局区以一组含有一个Oracle数据库实例的数据和控制信息的内存结构。
  □每个Oracle实例只具有一个SGA,SGA中的信息能被所有的进程共享。SGA区必须全部驻留在共享内存段中。
  □系统全局区SGA也称共享全局区SGA。
  □当数据库实例启动时,系统自动分配SGA,当关闭实例时,系统自动回收SGA。
■SGA包含的数据结构
  □数据库缓存
  □重做日志缓存
  □共享池
  □Java池
  □大型池
  □流池
  □数据字典缓存
  □其他控制信息结构
SGA_MAX_SIZE初始化参数
■内存限制
  □启动实例时,Oracle为SGA最小限度分配内存,以后允许扩展分配。通常不超过参数SGA_MAX_SIZE的大小。但如果初始化参数文件中SGA区各组件大小总合超过SGA_MAX_SIZE的值,则SGA_MAX_SIZE参数将被忽略。
■SGA区大小的主要决定因素
  □DB_CACHE_SIZE 设置数据库缓存大小.
  □LOG_BUFFER       设置重做日志缓存的大小.
  □SHARED_POOL_SIZE 设置共享池大小(用于共享SQL和PL/SQL).
  □LARGE_POOL_SIZE  大型池大小; the default is 0.
  □JAVA_POOL_SIZE     Java池大小.
■自动共享内存管理
  □设置参数SGA_TARGET,就可以自动分配各SGA组件的内存大小
  □不能进行自动管理SGA组件:Keep/Recycle缓存;非标块缓存。
SGA的显示与锁定
■显示SGA
  □show SGA;
■锁定SGA区
  □设置LOCK_SGA为true,使SGA位于物理内存中。
数据库缓存
■库缓存概念
  □库缓存位于SGA区中,保存的是最近从数据文件中读取的数据块。
■缓存块类型
  □脏缓存块:保存已经被修改过的数据,它们需要被重新写入数据文件。将由DBWR写回数据库。
  □空闲缓存块:不包含任何数据,等待数据的写入。
  □命中缓存块:始终保存在数据库缓存中,不会被换出内存。
■缓存块管理方式
  □写入列表(脏缓存块列表):包含已经被修改并需要写入硬盘的缓存块
  □最近最少使用列表(LRU列表):包含所有空闲块、命中缓存块以及还没来得及移入写入列表的脏缓存块。
■库缓存大小
  □DB_CACHE_SIZE:指定库缓存大小(标准块大小)
  □DB_BLOCK_SIZE:指定标准块大小
  □非标准块大小:DB_2K_CACHE_SIZE, DB_4K_CACHE_SIZE, DB_8K_CACHE_SIZE, DB_16K_CACHE_SIZE, DB_32K_CACHE_SIZE
  □如果有非标准块,则SGA中必须建立具有与标准块大小2n倍的库缓存。
库缓存结构
■库缓存被分为三个独立的缓存池
  □KEEP缓存池:其中的缓存块将始终保留在数据库缓存中,任何情况下都不会换出。
  □RECYCLE缓存池:其中的缓存块一旦使用完毕将被立刻换出内存,所以RECYCLE缓存池中的内容是随时更新的。
  □DEFAULT缓存池:如果不指定缓存池,则使用DEFAULT缓存池,换出方式采用LRU方式。
■说明
  □所有非标准块大小的库缓存只能位于default缓存池中。只有使用标准块大小的数据库缓存才能作为keep缓存池和recycle缓存池使用
  □keep缓存池和recycle缓存池的大小由参数BUFFER_POOL_KEEP和BUFFER_POOL_RECYCLE指定。
重做日志缓存
■概念
  □重做日志缓存是SGA区中的一个缓存区,用于缓存在对数据修改操作中生成的重做日志记录。将被LGWR进程写入重做日志文件。
  □该缓存区是一个循环缓存区。
■重做日志缓存大小
  □LOG_BUFFER:指定重做日志缓存的大小。
共享池
■概念
  □SGA的共享池包括库缓存、数据字典缓存以及用于存储并行操作信息和控制结构的缓存。
  □共享池用于缓存与SQL或PL/SQL语句、数据字典、资源锁以及其他控制结构相关的数据。
■大小
  □由初始参数shared_pool_size决定,默认大小8MB。
■库缓存
  □包括共享SQL区、私有SQL区(共享服务器模式下)、PL/SQL存储过程与包、锁与库缓存句柄等控制结构
  □每条SQL语句执行时被解析为两部分,分别存储在共享SQL区和私有SQL区中。共享SQL区中存放SQL语句的语法分析结果和执行计划;私有SQL区中存放如绑定变量、环境和会话参数等信息。一般情况下,私有SQL区位于PGA中,共享服务器模式下才位于SGA中。
  □PL/SQL程序单元的处理和SQL语句的处理类似。
■字典缓存
  □为提高效率,缓存常使用的数据字典信息。如账户信息、数据库结构信息等。
大型池
■大型池是一个可选的内存结构。提供大量内存。
■适合于下列操作:
  □进行数据库备份或恢复操作;
  □执行具有大量排序操作的SQL语句;
  □执行并行数据库操作。
■大型池没有LRU列表
Java池
■用于为JVM中的Java代码和数据提供内存服务。
4 PGA
■概念
  □一个程序全局区是保存某个服务进程的数据和控制信息的内存结构。
  □当某个服务进程启动时,创建PGA。
  □PGA是一个非共享内存区。
■PGA的内容
  □PGA的内容与实例的运行模式有关,在共享服务器模式和专用服务器模式下是不一样的。
  □通常来讲,PGA由私有SQL区和会话内存区组成。
■私有SQL区
  □包含绑定变量和运行时内存结构。
  □在共享服务器模式下,部分私有SQL区保存在SGA中。
  □多个私有SQL区可能关联到一个共享SQL工作区中。
  □一个用户能使用的私有SQL区数目取决于open_cursors参数。
■会话内存区
  □保存用户会话变量以及其他与会话相关的信息。
  □共享服务器模式下,会话内存区位于SGA中共享。
SQL工作区
■概念
  □在执行复杂SQL查询的时候,服务进程会在PGA中创建一些专用内存结构,它们统称SQL工作区。
■内存敏感的操作
  □排序(order by,group by等):SORT_AREA_SIZE
  □hash连接:HASH_AREA_SIZE
  □位图合并与创建: BITMAP_MERGE_AREA_SIZE、 CREATE_BITMAP_AREA_SIZE
专用服务器模式下PGA内存管理
■早期版本
  □SORT_AREA_SIZE,
  □HASH_AREA_SIZE,
  □BITMAP_MERGE_AREA_SIZE
  □CREATE_BITMAP_AREA_SIZE
■9i以后
  □PGA_AGGREGATE_TARGETà自动管理
  □将初始化参数WORKAREA_SIZE_POLICY设置为auto,自动管理才生效。
■查询PGA
  □查询PGA内存分配的系统视图:V$SYSSTAT、V$SESSTAT、V$PGASTAT、V$SQL_WORKAREA、V$SQL_WORKAREA_ACTIVE、V$PROCESS
  □例:查询个服务进程的PGA使用情况。
■select a.name,b.pga_used_mem,b.pga_alloc_mem,b.pga_max_mem from v$shared_server a,v$process b where a.paddr=b.addr;
5 进程结构
■进程类型
  □用户进程
  □Oracle进程
进程类型
进程类型
■用户进程
  □运行应用程序或Oracle工具代码。完成用户指定的任务。不是实例的组成部分。
■Oracle进程
  □运行Oracle自身代码。用于完成特定的服务功能。
  □Oracle进程分服务进程和后台进程。
■用户进程与服务进程
  □专用服务器模式,每个用户进程创建一个服务进程。
  □共享服务器模式,一个服务进程同时为多个用户进程服务。
用户进程
■用户进程的建立
  □当用户执行一个Oracle应用程序,如Pro*C程序,或者启动一个Oracle工具时,如SQL*PLUS,系统将创建一个用户进程来执行。
■连接和会话
  □连接:是一个用户进程与数据库实例间的通信路径。通过操作系统平台中的进程间通信机制或网络连接实现。
  □会话:是一个用户到数据库的特定连接。会话在用户连接到实例过程中始终存在,直到断开连接或中止应用程序。
  □共享服务器模式,多个会话将共享一个服务进程。
  □专用服务器模式,每个会话将独占一个服务进程。
Oracle 进程
■服务进程
  □服务进程是由Oracle自身创建的,用于处理连接到实例的用户进程的请求。
  □用户进程必须通过服务进程才能访问数据库。
  □服务进程分两种:专用服务进程、共享服务进程。
  □服务进程的主要任务:
■解析并执行用户进程提交的SQL语句
■在SGA的数据库缓存中搜索用户进程访问的数据,如果没有,则负责从磁盘中读入。
■将结果返回给用户。
■后台进程
  □为提高系统性能,有效地为多用户提供服务,Oracle系统采用的多个进程统称后台进程。
  □后台进程大部分相互独立,并完成一类指定任务。
  □通常包括:DBWn,LGWR,CKPT,SMON,PMON,ARCn,RECO,Dnnn,CJQn,QMNn。这些进程有的是必须存在的,有的是可选的。
6 后台进程
■数据库写进程DBWn
■日志写进程LGWR
■检查点进程CKPT
■系统监视进程SMON
■进程监视进程PMON
■归档进程ARCn
■恢复进程RECO
■调度进程Dnnn
■CJQn
数据库写进程DBWn
■功能
  □DBWR负责将数据库缓存中的脏缓存块成批写入到数据文件中。
  □为了提高写入能力,Oracle允许启动9个额外的DBWR进程(DBW1到DBW9)。但是DBWR进程数不应超过系统CPU数,否则,附加的进程是毫无用处的。
■说明
  □DBWR写入原则是:写入脏的且冷的缓存块。遵照LRU算法执行。
  □参数DB_WRITER_PROCESSES指定DBWR的数量。如果不指定,则系统将按照CPU数目来设定。
  □参数DB_BLOCK_CHECKPOINT_BATCH指定在每个检查点发生时,DBWR进程写入脏缓存块的最大数目。
  □参数DB_BLOCK_LRU_LATCHES设置数据库缓存中LRU闩的数量。
DBWR的写入时机
■1、用户执行insert,update操作时,会将数据写入数据库缓存。如果缓存块不足,则DBWR启动,将脏块写入磁盘文件,以获得更多空闲空间。
■2、检查点发生,启动DBWR进程。
■3、数据库缓存的LRU列表长度达到参数DB_BLOCK_WRITE_BATCH指定值的一半,启动DBWR进程。
■4、超时启动(大约3秒)。
日志写进程LGWR
■功能
  □LGWR负责将重做日志缓存中的重做记录写入联机重做日志文件。
  □重做日志缓存是一个循环结构,在LGWR进程将缓存中的数据写入重做日志文件时,oracle能继续向缓存中写入新的数据。LGWR进程写入重做日志文件的速度快于Oracle写入重做日志缓存的速度,故能保证缓存中有足够空闲空间。
■写入时机
  □用户通过Commit语句提交事务
  □重做日志缓存被写满1/3
  □DBWR进程开始将脏缓存块写入数据文件
  □超时启动,每隔3秒。
■重做日志文件组
  □通常日志文件有多足,每组至少有2个,LGWR在写入时同时写多个组。组内成员采用循环写入方式,写满一个则进行日志切换。
快速提交与组提交
■快速提交
  □快速提交是指,当用户提交了一条commit语句时,LGWR会立刻将提交记录写入重做日志文件,然后再开始写该事务相关的重做信息。该事务产生的脏缓存块并不立刻被DBWR写入数据文件。
  □事务提交成功后,Oracle为该事务生成一个系统变更码(SCN)。
■组提交
  □组提交是指,数据库中同时存在多个事务,当一个事务开始提交后,LGWR开始将他的重做记录写入磁盘,再写入过程中又有多个事务也执行commit,这时LGWR不立即将这些事务的重做记录写入磁盘,而等待第一个事务的重做记录都被写入磁盘后,LGWR将日志缓存中的数据一次性全部写入重做日志文件。
检查点进程CKPT
■检查点
  □一个事件,当发生时,数据库缓存中的脏缓存块将被写入数据文件,同时Oracle将对数据库控制文件和数据文件进行更新,以记录下当前的数据库结构和状态。
  □执行检查点后,可以保证所有已提交事务对数据库所做的更改全部写入到了磁盘中。
■CKPT功能
  □执行检查点和更新控制文件和数据文件
  □将写脏缓存块的任务交给DBWR完成。
■相关参数
  □LOG_CHECKPOINT_TIMEOUT 指定检查点执行最大间隔时间(秒单位),设为0,则禁用时间检查点。
  □LOG_CHECKPOINT_INTERVAL 指定出现检查点前,必须写入重做日志文件中的操作系统块数目。
  □LOG_CHECKPOINT_TO_ALERT 指定是否将检查点信息记入警告日志中。
系统监视进程SMON
■功能
  □在实例启动时负责对数据库进行恢复操作。
  □在临时段或临时表空间中回收不再使用的表空间
  □将各个表空间中的空闲空间碎片合并在一起。
■说明
  □SMON除了在实例启动时执行一次外,实例运行中,它会被定期唤醒。
  □如果其他进程需要SMON执行,则可以随时唤醒。
进程监视进程PMON
■功能
  □负责对失败的用户进程或服务进程进行恢复,并释放进程所占用的资源。
  □定期检查调度进程和服务进程的状态,如果失败,会重新起动尝试,并释放所占资源。
  □PMON也会使用监听器进行数据库实例和调度进程的注册。
■说明
  □PMON与SMON类似,可以被周期性地唤醒,检查是否有工作要做;如果需要,也可以被其他进程唤醒。
归档进程ARCn
■功能
  □在归档模式下,归档进程ARCn负责在日志切换后将已经写满的重做日志文件复制到归档目标中,以防止写满的重做日志文件被覆盖。
■说明
  □ARCn的启动,需要数据库运行在归档模式下。将参数ARCHIVE_LOG_START设为TRUE,则ARCn启动进行自动归档;如果设置为FALSE,则不启动ARCn,必须进行手工归档。
  □默认情况下,实例启动一个归档进程ARC0。如果ARC0在归档一个重做日志文件时,其他进程无法访问它。为了加快归档速度,Oracle最多可以启动10个归档进程(ARC0-ARC9)
恢复进程RECO
■功能
  □负责在分布式数据库环境中自动恢复那些失败的分布式事务。
■说明
  □如果将数据库配置为分布式事务处理(设置DISTRIBUTED_TRANSACTIONS>0),则RECO进程会自动启动。如果设置为0,则不启动。
  □RECO不需要DBA干预,自动完成。
调度进程Dnnn
■调度进程是多线程服务器(Multithreaded Server,MTS,即共享服务器)的组成部分。
■接受用户进程的请求,将他们放入请求队列中,然后为请求队列中的用户进程分配一个服务进程。
作业队列进程CJQn
■用于调度和管理作业。
■CJQ0能够启动最多100个作业队列副进程来运行作业。
■视图dba_jobs,user_jobs,all_jobs可以查看数据库中运行的作业。
其他后台进程
■其他后台进程如
  □ARB
  □ASMB
  □CTWR
  □MMAN
  □MMNL
  □MMON
  □RBAL
  □RVWR

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20335819/viewspace-694948/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle进程结构
请登录后发表评论 登录
全部评论

注册时间:2011-03-05

  • 博文量
    261
  • 访问量
    369168