《Oracle体系结构45006957096698.docx》由会员分享,可在线阅读,更多相关《Oracle体系结构45006957096698.docx(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Oracle体系结构数据库(Database)数据库是一个数数据的集合,不不仅是指物理理上的数据,也也指物理、存存储及进程对对象的一个组组合。Oraacle是一一个基于B/S模式的关关系型数据库库管理系统(RRDBMS)。Oracle系系统体系结构构由三部分组组成:逻辑结结构、物理结结构和实例。数据库(Dattabasee)一、Oraclle的逻辑结结构Oracle的的逻辑结构是是一种层次结结构。主要由由:表空间、段段、区和数据据块等概念组组成。逻辑结结构是面向用用户的,用户户使用Oraacle开发发应用程序使使用的就是逻逻辑结构。数数据库存储层层次结构及其其构成关系,结构对象也也从数据块到到
2、表空间形成成了不同层次次的粒度关系系。1.数据块(DData BBlockss)数据块是Oraacle最小小的存储单位位,Oraccle数据存存放在“块”中。一个块块占用一定的的磁盘空间。特特别注意的是是,这里的“块”是Oraccle的“数据块”,不是操作作系统的“块”。Oracle每每次请求数据据的时候,都都是以块为单单位。也就是是说,Oraacle每次次请求的数据据是块的整数数倍。如果OOraclee请求的数据据量不到一块块,Oraccle也会读读取整个块。所所以说,“块”是Oraccle读写数数据的最小单单位或者最基基本的单位。块的标准大小由由初始化参数数DB_BLLOCK_SSIZE指
3、定定。具有标准准大小的块称称为标准块(Standdard BBlock)。块的大小小和标准块的的大小不同的的块叫非标准准块(Nonnstanddard BBlock)。操作系统每次执执行I/O的的时候,是以以操作系统的的块为单位;Oraclle每次执行行I/O的时时候,都是以以Oraclle的块为单单位。Oracle数数据块大小一一般是操作系系统块的整数数倍。数据块的格式(Data Blockk Formmat)块中存放表的数数据和索引的的数据,无论论存放哪种类类型的数据,块块的格式都是是相同的,块块由块头(hheaderr/Commmon annd Varriablee),表目录录(Tabl
4、le Dirrectorry),行目目录(Roww Direectoryy),空余空空间(Freee Spaace)和行行数据(Roow Datta)五部分分组成,如下下图 块头(heaader/CCommonn and Variaable):存放块的基基本信息,如如:块的物理理地址,块所所属的段的类类型(是数据据段还是索引引段)。表目录(Tabble Diirectoory):存存放表的信息息,即:如果果一些表的数数据被存放在在这个块中,那那么,这些表表的相关信息息将被存放在在“表目录”中。行目录(Roww Direectoryy):如果块块中有行数据据存在,则,这这些行的信息息将被记录在在
5、行目录中。这这些信息包括括行的地址等等。行数据(Roww Dataa):是真正正存放表数据据和索引数据据的地方。这这部分空间是是已被数据行行占用的空间间。空余空间(Frree Sppace):空余空间是是一个块中未未使用的区域域,这片区域域用于新行的的插入和已经经存在的行的的更新。头部信息区(OOverheead):我我们把块头(headeer/Commmon aand Vaariablle),表目目录(Tabble Diirectoory),行行目录(Roow Dirrectorry)这三部部分合称为头头部信息区(Overhhead)。头头部信息区不不存放数据,它它存放的整个个块的信息。头头
6、部信息区的的大小是可变变的。一般来来说,头部信信息区的大小小介于84字字节(byttes)到1107字节(bytess)之间。数据块中自由空空间的使用当往数据库中插插入(INSSERT)数数据的时候,块块中的自由空空间会减少;当对块中已已经存在的行行进行修改(UPDATTE)的时候候(使记录长长度增加),块块中的自由空空间也会减少少。DELETE语语句和UPDDATE语句句会使块中的的自由空间增增加。当使用用DELETTE语句删除除块中的记录录或者使用UUPDATEE语句把列的的值更改成一一个更小值的的时候,Orracle会会释放出一部部分自由空间间。释放出的的自由空间并并不一定是连连续的。通
7、常常情况下,OOraclee不会对块中中不连续的自自由空间进行行合并。因为为合并数据块块中不连续的的自由空间会会影响数据库库的性能。只只有当用户进进行数据插入入(INSEERT)或者者更新(UPPDATE)操作,却找找不到连续的的自由空间的的时候,Orracle才才会合并数据据块中不连续续的自由空间间。对于块中的自由由空间,Orracle提提供两种管理理方式:自动动管理,手动动管理行链接和行迁移移(Row Chainning aand Miigratiing)行链接(Roww Chaiining):如果我们们往数据库中中插入(INNSERT)一行数据,这这行数据很大大,以至于一一个数据块存存不
8、下一整行行,Oraccle就会把把一行数据分分作几段存在在几个数据块块中,这个过过程叫行链接接(Row Chainning)。如如下图所示:如果一行数据是是普通行,这这行数据能够够存放在一个个数据块中;如果一行数数据是链接行行,这行数据据存放在多个个数据块中。行迁移(Roww Migrratingg):数据块块中存在一条条记录,用户户执行UPDDATE更新新这条记录,这这个UPDAATE操作使使这条记录变变长,这时候候,Oraccle在这个个数据块中进进行查找,但但是找不到能能够容纳下这这条记录的空空间,无奈之之下,Oraacle只能能把整行数据据移到一个新新的数据块。原原来的数据块块中保留一
9、个个“指针”,这个“指针”指向新的数数据块。被移移动的这条记记录的ROWWID保持不不变。行迁移移的原理如下下图所示:无论是行链接还还是行迁移,都都会影响数据据库的性能。OOraclee在读取这样样的记录的时时候,Oraacle会扫扫描多个数据据块,执行更更多的I/OO。块中自由空间的的自动管理Oracle使使用位图(bbitmapp)来管理和和跟踪数据块块,这种块的的空间管理方方式叫“自动管理”。自动管理理有下面的好好处:易于使用更好地利用空空间可以对空间进进行实时调整整块中自由空间的的手动管理用户可以通过PPCTFREEE, PCCTUSEDD来调整块中中空间的使用用,这种管理理方式叫手动
10、动管理。相对对于自动管理理,手动管理理方式比较麻麻烦,不容易易掌握,容易易造成块中空空间的浪费。PCTUSEDD也是用于设设置一个百分分比,当块中中已使用的空空间的比例小小于这个百分分比的时候,这这个块才被标标识为有效状状态。只有有有效的块才被被允许插入数数据。PCTFREEE参数用于指指定块中必须须保留的最小小空闲空间百百分例,默认认值为10。之之所以要预留留这样的空间间,是因为UUPDATEE时,需要这这些空间。如如果UPDAATE时,没没有空余空间间,Oraccle就会分分配一个新的的块,这会产产生行迁移(Row MMigratting)。例如,假定在CCreatee tablle语句中
11、指指定了pcttfree为为20,则说说明在该表的的数据段内每每个数据块的的20%被作作为可利用的的空闲空间,用用于更新已在在数据块内存存在的数据行行其余80%是用于插入入新的数据行行,直到达到到80%为止止。显然,ppctfreee值越小,则则为现存行更更新所预留的的空间越少。因因此,如果ppctfreee设置得太太高,则在全全表扫描期间间增加I/OO,浪费磁盘盘空间;如果果pctfrree设置得得太低,则会会导致行迁移移。 pctusedd参数设置了了数据块是否否是空闲的界界限。当数据据块的使用空空间低于pcctusedd的值时,此此数据块标志志为空闲,该该空闲空间仅仅用于插入新新的行。如
12、果果数据块已经经达到了由ppctfreee所确定的的上边界时,OOraclee就认为此数数据块已经无无法再插入新新的行。例如如,假定在CCreatee tablle语句中指指定pctuused为440,则当小小于或等于339时,该数数据块才是可可用的。所以以,可将数据据块填得更满满,这样可节节省空间,但但却增加了处处理开销,因因为数据块的的空闲空间总总是要被更新新的行占据,所所以对数据块块需要频繁地地进行重新组组织。比较低低的pctuused增加加了数据库的的空闲空间,但但减少了更新新操作的处理理开销。所以以,如果pcctusedd设置过高,则则会降低磁盘盘的利用率导导致行迁移;若pctuus
13、ed设置置过低,则浪浪费磁盘空间间,增加全表表扫描时的II/O输出。ppctuseed是与pcctfreee相对的参数数。 那么,如何选择择pctfrree和pcctusedd的值呢?有有个公式可供供参考。显然然,pctffree和ppctuseed的之和不不能超过1000。若两者者之和低于1100,则空空间的利用与与系统的I/O之间的最最佳平衡点是是:pctffree与ppctuseed之和等于于100%减减去一行的大大小占块空间间大小的百分分比。例如,如如果块大小为为2048字字节,则它需需要100个个字节的开销销,而行大小小是390字字节(为可用用块的20%)。为了充充分利用空间间,pc
14、tffree与ppctuseed之和最好好为80%。 那么,怎样确定定数据块大小小呢?有两个个因素需要考考虑: 一是数据库环境境类型。例如如,是DSSS环境还是OOLTP环境境?在数据仓仓库环境(OOLAP或DDSS)下,用用户需要进行行许多运行时时间很长的查查询,所以应应当使用大的的数据块。在在OLTP系系统中,用户户处理大量的的小型事务,采采用较小数据据块能够获得得更好的效果果。 二是SGA的大大小。数据库库缓冲区的大大小由数据块块大小和初始始化文件的ddb_bloock_buufferss参数决定。最最好设为操作作系统I/OO的整数倍。2数据区(EExtentt)是一组连续的数数据块。当
15、一一个表、回滚滚段或临时段段创建或需要要附加空间时时,系统总是是为之分配一一个新的数据据区。一个数数据区不能跨跨越多个文件件,因为它包包含连续的数数据块。使用用区的目的是是用来保存特特定数据类型型的数据,也也是表中数据据增长的基本本单位。在OOraclee数据库中,分分配空间就是是以数据区为为单位的。一一个Oraccle对象包包含至少一个个数据区。设设置一个表或或索引的存储储参数包含设设置它的数据据区大小。3段(Seggment)是由多个数据区区构成的,它它是为特定的的数据库对象象(如表段、索索引段、回滚滚段、临时段段)分配的一一系列数据区区。段内包含含的数据区可可以不连续,并并且可以跨越越多
16、个文件。使使用段的目的的是用来保存存特定对象。 一个Oraclle数据库有有4种类型的的段: 数据段:数据段段也称为表段段,它包含数数据并且与表表和簇相关。当当创建一个表表时,系统自自动创建一个个以该表的名名字命名的数数据段。 索引段:包含了了用于提高系系统性能的索索引。一旦建建立索引,系系统自动创建建一个以该索索引的名字命命名的索引段段。 回滚段:包含了了回滚信息,并并在数据库恢恢复期间使用用,以便为数数据库提供读读入一致性和和回滚未提交交的事务,即即用来回滚事事务的数据空空间。当一个个事务开始处处理时,系统统为之分配回回滚段,回滚滚段可以动态态创建和撤销销。系统有个个默认的回滚滚段,其管理
17、理方式既可以以是自动的,也也可以是手工工的。 临时段:它是OOraclee在运行过程程中自行创建建的段。当一一个SQL语语句需要临时时工作区时,由由Oraclle建立临时时段。一旦语语句执行完毕毕,临时段的的区间便退回回给系统。4表空间(ttablesspace)是数据库的逻辑辑划分。任何何数据库对象象在存储时都都必须存储在在某个表空间间中。表空间间对应于若干干个磁盘文件件,即表空间间是由一个或或多个磁盘文文件构成的。表表空间相当于于操作系统中中的文件夹,也也是数据库逻逻辑结构与物物理文件之间间的一个映射射。每个数据据库至少有一一个表空间(ssystemm tabllespacce),表空空间
18、的大小等等于所有从属属于它的数据据文件大小的的总和。(1)系统表空空间(sysstem ttablesspace)是每个Oraccle数据库库都必须具备备的。其功能能是在系统表表空间中存放放诸如表空间间名称、表空空间所含数据据文件等数据据库管理所需需的信息。系系统表空间的的名称是不可可更改的。系系统表空间必必须在任何时时候都可以用用,也是数据据库运行的必必要条件。因因此,系统表表空间是不能能脱机的。 系统表空间包括括数据字典、存存储过程、触触发器和系统统回滚段。为为避免系统表表空间产生存存储碎片以及及争用系统资资源的问题,应应创建一个独独立的表空间间用来单独存存储用户数据据。(2)SYSAAU
19、X表空间间 是随着数据库的的创建而创建建的,它充当当SYSTEEM的辅助表表空间,主要要存储除数据据字典以外的的其他对象。SSYSAUXX也是许多OOraclee 数据库的的默认表空间间,它减少了了由数据库和和DBA管理理的表空间数数量,降低了了SYSTEEM表空间的的负荷。(3)临时表空空间 相对于其他表空空间而言,临临时表空间(ttemp ttablesspace)主主要用于存储储Oraclle数据库运运行期间所产产生的临时数数据。数据库库可以建立多多个临时表空空间。当数据据库关闭后,临临时表空间中中所有数据将将全部被清除除。除临时表表空间外,其其他表空间都都属于永久性性表空间。(4)撤销
20、表空空间 用于保存Oraacle数据据库撤销信息息,即保存用用户回滚段的的表空间称之之为回滚表空空间(或简称称为RBS撤撤销表空间(uundo ttablesspace)。在在Oraclle8i中是是rollbback ttablesspace,从从Oraclle9i开始始改为unddo tabblespaace。在OOraclee 10g中初始始创建的只有有6个表空间间sysauux、sysstem、ttemp、uundotbbs1、exxamplee和userrs。其中ttemp是临临时表空间,uundotbbs1是unndo撤销表表空间。(5)USERRS表空间用户表空间,用用于存放永久
21、久性用户对象象的数据和私私有信息。每每个数据块都都应该有一个个用户表空间间,以便在创创建用户是将将其分配给用用户。二、物理结构Oracle物物理结构包含含了数据文件件、日志文件件和控制文件件1.数据文件每一个ORACCLE数据库库有一个或多多个物理的数数据文件(ddata ffile)。一一个数据库的的数据文件包包含全部数据据库数据。逻逻辑数据库结结构(如表、索索引)的数据据物理地存储储在数据库的的数据文件中中。数据文件件有下列特征征: 一个数据文件仅仅与一个数据据库联系。一旦建立,数据据文件不能改改变大小.一个表空间(数数据库存储的的逻辑单位)由由一个或多个个数据文件组组成。 数据文件中的数
22、数据在需要时时可以读取并并存储在ORRACLE内内存储区中。例例如:用户要要存取数据库库一表的某些些数据,如果果请求信息不不在数据库的的内存存储区区内,则从相相应的数据文文件中读取并并存储在内存存。当修改和和插入新数据据时,不必立立刻写入数据据文件。为了了减少磁盘输输出的总数,提提高性能,数数据存储在内内存,然后由由ORACLLE后台进程程DBWR决决定如何将其其写入到相应应的数据文件件。2.日志文件每一个数据库有有两个或多个个日志文件(rredo llog fiile)的组组,每一个日日志文件组用用于收集数据据库日志。日日志的主要功功能是记录对对数据所作的的修改,所以以对数据库作作的全部修改
23、改是记录在日日志中。在出出现故障时,如如果不能将修修改数据永久久地写入数据据文件,则可可利用日志得得到该修改,所所以从不会丢丢失已有操作作成果。 日志文件主要是是保护数据库库以防止故障障。为了防止止日志文件本本身的故障,OORACLEE允许镜象日日志(mirrroredd redoo log),以致可在在不同磁盘上上维护两个或或多个日志副副本。 日志文件中的信信息仅在系统统故障或介质质故障恢复数数据库时使用用,这些故障障阻止将数据据库数据写入入到数据库的的数据文件。然然而任何丢失失的数据在下下一次数据库库打开时,OORACLEE自动地应用用日志文件中中的信息来恢恢复数据库数数据文件。Oralc
24、e两两种日志文件件类型:联机日志文件 这是Oraclle用来循环环记录数据库库改变的操作作系统文件归档日志文件 这是指为避免联联机日志文件件重写时丢失失重复数据而而对联机日志志文件所做的的备份Oracle有有两种归档日日志模式,OOraclee数据库可以以采用其中任任何一种模式式:NOARCHIIVELOGG 不对日志文件进进行归档。这这种模式可以以大大减少数数据库备份的的开销,但可可能回导致数数据的不可恢恢复ARCHIVEELOG 在这种模式下,当当Oraclle转向一个个新的日志文文件时,将以以前的日志文文件进行归档档。为了防止止出现历史“缺口”的情况,一一个给定的日日志文件在它它成功归档
25、之之前是不能重重新使用的。归归档的日志文文件,加上联联机日志文件件,为数据库库的所有改变变提供了完整整的历史信息息。在Oraclee利用日志文文件和归档日日志文件来恢恢复数据库时时,内部序列列号可以起一一个向导的作作用。3.控制文件每一ORACLLE数据库有有一个控制文文件(conntrol file),它记录数数据库的物理理结构,包含含下列信息类类型: 数据库名; 数据库数据文件件和日志文件件的名字和位位置; 数据库建立日期期。 为了安全起见,允允许控制文件件被镜象。 每一次ORACCLE数据库库的实例启动动时,它的控控制文件用于于标识数据库库和日志文件件,当着手数数据库操作时时它们必须被被
26、打开。当数数据库的物理理组成更改时时,ORACCLE自动更更改该数据库库的控制文件件。数据恢复复时,也要使使用控制文件件。4.参数文件除了构成Oraacle数据据库物理结构构的三类主要要文件外,OOraclee数据库还具具有另外一种种重要的文件件:参数文件件。参数文件件记录了Orracle数数据库的基本本参数信息,主主要包括数据据库名、控制制文件所在路路径、进程等等。与旧版本本的初始化参参数文件INNITsidd.ora不不同,在Orracle110g中还可可以使用二进进进制服务器器参数文件,并并且该服务器器参数文件在在安装Oraacle数据据库系统时由由系统自动创创建,文件的的名称为SPPF
27、ILEssid.orra,sidd为所创建的的数据库实例例名。 SPFILEssid.orra中的参数数是由Oraacle系统统自动管理。如如果想要对数数据库的某些些参数进行设设置,则可能能过OEM或或ALTERR SYSTTEM命令来来修改。用户户最好不要用用编辑器进行行修改。三、实例(innstancce)数据库实例(也也称为服务器器Serveer)就是用用来访问一个个数据库文件件集的一个存存储结构及后后台进程的集集合。它使一一个单独的数数据库可以被被多个实例访访问(也就是是ORACLLE并行服务务器- OOPS)。实例在操作系统统中用ORAACLE_SSID来标识识,在Oraacle中用
28、用参数INSSTANCEE_NAMEE来标识, 它们两个的的值是相同的的。数据库启启动时,系统统首先在服务务器内存中分分配系统全局局区(SGAA),构成了了Oraclle的内存结结构,然后启启动若干个常常驻内存的操操作系统进程程,即组成了了Oraclle的 进程程结构,内存存区域和后台台进程合称为为一个Oraacle实例例。1.系统全局区区(SGA)SGA是一组为为系统分配的的共享的内存存结构,可以以包含一个数数据库实例的的数据或控制制信: 息息。如果多个个用户连接到到同一个数据据库实例,在在实例的SGGA中,数据据可以被多个个用户共享, 当数据库实实例启动时,SSGA的内存存被自动分配配;当
29、数据库库实例关闭时时,SGA内内存被回收。 SGA是是占用内存最最大的一个区区域,同时也也是影响数据据库性能的重重要因素。系统全局区(SSGA),主主要包括:1)数据块缓存存区 数据块缓存区(databblockbbufferrcachee)是SGAA中的一个高高速缓存区域域,用来存储储从数据库中中读取数据段段的数据块(如表、索引引和簇)。数数据块缓存区区的大小由数数据库服务器器init.ora文件件中的DB_LOCK_BUFFEERS参数决决定(用数据据库块的个数数表示)。在在调整和管理理数据库时,调调整数据块缓缓存区的大小小是一个重要要的部分。因为数据块缓存存区的大小固固定,并且其其大小通
30、常小小于数据库段段所使用的空空间,所以它它不能一次装装载下内存中中所有的数据据库段。通常常,数据块缓缓存区只是数数据库大小的的1%2%,Oraccle使用最最近最少使用用(LRU,lleastrrecenttlyuseed)算法来来管理可用空空间。当存储储区需要自由由空间时,最最近最少使用用块将被移出出,新数据块块将在存储区区代替它的位位置。通过这这种方法,将将最频繁使用用的数据保存存在存储区中中。然而,如果SGGA的大小不不足以容纳所所有最常使用用的数据,那那么,不同的的对象将争用用数据块缓存存区中的空间间。当多个应应用程序共享享同一个SGGA时,很有有可能发生这这种情况。此此时,每个应应用
31、的最近使使用段都将与与其他应用的的最近使用段段争夺SGAA中的空间。其其结果是,对对数据块缓存存区的数据请请求将出现较较低的命中率率,导致系统统性能下降。2)字典缓存区区 数据库对象的信信息存储在数数据字典表中中,这些信息息包括用户帐帐号数据、数数据文件名、段段名、盘区位位置、表说明明和权限,当当数据库需要要这些信息(如检查用户户查询一个表表的授权)时时,将读取数数据字典表并并且将返回的的数据存储在在字典缓存区区的SGA中中。数据字典缓存区区通过最近最最少使用(LLRU)算法法来管理。字字典缓存区的的大小由数据据库内部管理理。字典缓存存区是SQLL共享池的一一部分,共享享池的大小由由数据库文件
32、件init.ora中的的SHAREED_POOOL_SIZZE参数来设设置。如果字典缓存区区太小,数据据库就不得不不反复查询数数据字典表以以访问数据库库所需的信息息,这些查询询称为循环调调用(reccuesivvecalll),这时的的查询速度相相对字典缓存存区独立完成成查询时要低低。3)重做日志缓缓冲区 重做项描述对数数据库进行的的修改。它们们写到联机重重做日志文件件中,以便在在数据库恢复复过程中用于于向前滚动操操作。然而,在在被写入联机机重做日志文文件之前,事事务首先被记记录在称作重重做日志缓冲冲区(reddologbbufferr)的SGAA中。数据库库可以周期地地分批向联机机重做日志文
33、文件中写重做做项的内容,从从而优化这个个操作。重做做日志缓冲区区的大小(以以字节为单位位)由iniit.oraa文件中的LLOG_BUUFFER参参数决定。4)SQL共享享池 SQL共享池存存储数据字典典缓存区及库库缓存区(llibrarrycachhe),即对对数据库进行行操作的语句句信息。当数数据块缓冲区区和字典缓存存区能够共享享数据库用户户间的结构及及数据信息时时,库缓存区区允许共享常常用的SQLL语句。SQL共享池包包括执行计划划及运行数据据库的SQLL语句的语法法分析树。在在第二次运行行(由任何用用户)相同的的SQL语句句时,可以利利用SQL共共享池中可用用的语法分析析信息来加快快执
34、行速度。SQL共享池通通过LRU算算法来管理。当当SQL共享享池填满时,将将从库缓存区区中删掉最近近最少使用的的执行路径和和语法分析树树,以便为新新的条目腾出出空间。如果果SQL共享享池太小,语语句将被连续续不断地再装装入到库缓存存区,从而影影响操作性能能。SQL共享池的的大小(以字字节为单位)由initt.ora文文件参数SHHARED_POOL_SIZE决决定。5)大池 大池(LarggePooll)是一个可可选内存区。如如果使用线程程服务器选项项或频繁执行行备份/恢复复操作,只要要创建一个大大池,就可以以更有效地管管理这些操作作。大池将致致力于支持SSQL大型命命令。利用大大池,就可以以
35、防止这些SSQL大型命命令把条目重重写入SQLL共享池中,从从而减少再装装入到库缓存存区中的语句句数量。大池池的大小(以以字节为单位位)通过innit.orra文件的LLARGE_POOL_SIZE参参数设置,用用户可以使用用init.ora文件件的LARGGE_POOOL_MINN_ALLOOC参数设置置大池中的最最小位置。OOraclee8i已不用用这个参数。作作为使用LaargePoool的一种种选择方案,可可以用iniit.oraa文件的SHHARED_POOL_RESERRVED_SSIZE参数数为SQL大大型语句保留留一部分SQQL共享池。6)Java池池 由其名字可知,JJava
36、池为为Java命命令提供语法法分析。Jaava池的大大小(以字节节为单位)通通过在Oraacle8ii引入的innit.orra文件的JJAVA_PPOOL_SSIZE参数数设置。innit.orra文件的JJAVA_PPOOL_SSIZE参数数缺省设置为为10MB。7)多缓冲池 可以在SGA中中创建多个缓缓冲池,能够够用多个缓冲冲池把大数据据集与其他的的应用程序分分开,以减少少它们争夺数数据块缓存区区内相同资源源的可能性。对对于创建的每每一个缓冲池池,都要规定定其LRU锁锁存器的大小小和数量。缓缓冲区的数量量必须至少比比LRU锁存存器的数量多多50倍。创建缓冲池时,需需要规定保存存区(kee
37、epareaa)的大小和和再循环区(recyccleareea)的大小小。与SQLL共享池的保保留区一样,保保存区保持条条目,而再循循环区则被频频繁地再循环环使用。可以以通过BUFFFER_PPOOL_KKEEP参数数规定来保存存区的大小。例例如: 保存和再循环缓缓冲池的容量量减少了数据据块缓冲存储储区中的可用用空间(通过过DB_BLLOCK_BBUFFERRS参数设置置)。对于使使用一个新缓缓冲池的表,通通过表的sttoragee子句中的bbufferr_pooll参数来规定定缓冲池的名名字。例如,如如果需要从内内存中快速删删除一个表,就就把它赋予RRECYCLLE池。缺省省池叫作DEEFA
38、ULTT,这样就能能在以后用aalterttable命命令把一个表表转移到DEEFAULTT池。2.后台进程(BBackgrroung Proceess)数据库的物理结结构与内存结结构之间的交交互要通过后后台进程来完完成。1、DBWR进进程:该进程程执行将缓冲冲区写入数据据文件,是负负责缓冲存储储区管理的一一个Oraccle后台进进程。当缓冲冲区中的一缓缓冲区被修改改,它被标志志为“弄脏”,DBWRR的主要任务务是将“弄脏”的缓冲区写写入磁盘,使使缓冲区保持持“干净”。由于缓冲冲存储区的缓缓冲区填入数数据库或被用用户进程弄脏脏,未用的缓缓冲区的数目目减少。当未未用的缓冲区区下降到很少少,以致用
39、户户进程要从磁磁盘读入块到到内存存储区区时无法找到到未用的缓冲冲区时,DBBWR将管理理缓冲存储区区,使用户进进程总可得到到未用的缓冲冲区。Oracle采采用LRU(LLEAST RECENNTLY UUSED)算算法(最近最最少使用算法法)保持内存存中的数据块块是最近使用用的,使I/O最小。在在下列情况预预示DBWRR 要将弄脏脏的缓冲区写写入磁盘:当一个服务器进进程将一缓冲冲区移入“弄脏”表,该弄脏脏表达到临界界长度时,该该服务进程将将通知DBWWR进行写。该该临界长度是是为参数DBB-BLOCCK-WRIITE-BAATCH的值值的一半。当一个服务器进进程在LRUU表中查找DDB-BLO
40、OCK-MAAX-SCAAN-CNTT缓冲区时,没没有查到未用用的缓冲区,它它停止查找并并通知DBWWR进行写。出出现超时(每每次3秒),DDBWR 将将通知本身。当当出现检查点点时,LGWWR将通知DDBWR.在在前两种情况况下,DBWWR将弄脏表表中的块写入入磁盘,每次次可写的块数数由初始化参参数DB-BBLOCK- WRITTE-BATTCH所指定定。如果弄脏脏表中没有该该参数指定块块数的缓冲区区,DBWRR从LUR表表中查找另外外一个弄脏缓缓冲区。如果DBWR在在三秒内未活活动,则出现现超时。在这这种情况下DDBWR对LLRU表查找找指定数目的的缓冲区,将将所找到任何何弄脏缓冲区区写入
41、磁盘。每每当出现超时时,DBWRR查找一个新新的缓冲区组组。每次由DDBWR查找找的缓冲区的的数目是为寝寝化参数DBB-BLOCCK- WRRITE-BBATCH的的值的二倍。如如果数据库空空运转,DBBWR最终将将全部缓冲区区存储区写入入磁盘。在出现检查点时时,LGWRR指定一修改改缓冲区表必必须写入到磁磁盘。DBWWR将指定的的缓冲区写入入磁盘。在有些平台上,一一个实例可有有多个DBWWR.在这样样的实例中,一一些块可写入入一磁盘,另另一些块可写写入其它磁盘盘。参数DBB-WRITTERS控制制DBWR进进程个数。2、LGWR进进程:该进程程将日志缓冲冲区写入磁盘盘上的一个日日志文件,它它
42、是负责管理理日志缓冲区区的一个Orracle后后台进程。LLGWR进程程将自上次写写入磁盘以来来的全部日志志项输出,LLGWR输出出:当用户进程提提交一事务时时写入一个提提交记录。 每三秒将日志志缓冲区输出出。 当日志缓冲区区的1/3已已满时将日志志缓冲区输出出。 当DBWR将将修改缓冲区区写入磁盘时时则将日志缓缓冲区输出。LGWR进程同同步地写入到到活动的镜象象在线日志文文件组。如果果组中一个文文件被删除或或不可用,LLGWR可继继续地写入该该组的其它文文件。日志缓冲区是一一个循环缓冲冲区。当LGGWR将日志志缓冲区的日日志项写入日日志文件后,服服务器进程可可将新的日志志项写入到该该日志缓冲
43、区区。LGWRR 通常写得得很快,可确确保日志缓冲冲区总有空间间可写入新的的日志项。注意:有时候当当需要更多的的日志缓冲区区时,LWGGR在一个事事务提交前就就将日志项写写出,而这些些日志项仅当当在以后事务务提交后才永永久化。ORACLE使使用快速提交交机制,当用用户发出COOMMIT语语句时,一个个COMMIIT记录立即即放入日志缓缓冲区,但相相应的数据缓缓冲区改变是是被延迟,直直到在更有效效时才将它们们写入数据文文件。当一事事务提交时,被被赋给一个系系统修改号(SSCN),它它同事务日志志项一起记录录在日志中。由由于SCN记记录在日志中中,以致在并并行服务器选选项配置情况况下,恢复操操作可
44、以同步步。3、CKPT进进程:该进程程在检查点出出现时,对全全部数据文件件的标题进行行修改,指示示该检查点。在在通常的情况况下,该任务务由LGWRR执行。然而而,如果检查查点明显地降降低系统性能能时,可使CCKPT进程程运行,将原原来由LGWWR进程执行行的检查点的的工作分离出出来,由CKKPT进程实实现。对于许许多应用情况况,CKPTT进程是不必必要的。只有有当数据库有有许多数据文文件,LGWWR在检查点点时明显地降降低性能才使使CKPT运运行。 CKKPT进程不不将块写入磁磁盘,该工作作是由DBWWR完成的。初初始化参数CCHECKPPOINT-PROCEESS控制CCKPT进程程的使能或
45、使使不能。缺省省时为FALLSE,即为为使不能。 由于OOraclee中LGWRR和DBWRR工作的不一一致,Oraacle引入入了检查点的的概念,用于于同步数据库库,保证数据据库的一致性性。在Oraacle里面面,检查点分分为两种:完完全检查点和和增量检查点点。下面我们们分别介绍这这两种检查点点的作用:1、完全检查点点 在Orracle88i之前,数数据库的发生生的检查点都都是完全检查查点,完全检检查点会将数数据缓冲区里里面所有的脏脏数据块写入入相应的数据据文件中,并并且同步数据据文件头和控控制文件,保保证数据库的的一致。完全全检查点在88i之后只有有在下列两种种情况下才会会发生:(1)DB
46、A手手工执行allter ssystemm checckpoinnt的命令;(2)数据库正正常shuttdown(iimmediiate,ttransccationnal,noormal)。由于完全检查点点会将所有的的脏数据库块块写入,巨大大的IO往往往会影响到数数据库的性能能。因此Orracle从从8i开始引引入了增量检检查点的概念念。2、 增量检查查点Oracle从从8i开始引引入了检查点点队列这么一一种概念,用用于记录数据据库里面当前前所有的脏数数据块的信息息,DBWRR根据这个队队列而将脏数数据块写入到到数据文件中中。检查点队队列按时间先先后记录着数数据库里面脏脏数据块的信信息,里面的
47、的条目包含RRBA(Reedo Bllock AAddresss,重做日日志里面用于于标识检查点点期间数据块块在重做日志志里面第一次次发生更改的的编号)和数数据块的数据据文件号和块块号。在检查查点期间不论论数据块更改改几次,它在在检查点队列列里面的位置置始终保持不不变,检查点点队列也只会会记录它最早早的RBA,从从而保证最早早更改的数据据块能够尽快快写入。当DDBWR将检检查点队列里里面的脏数据据块写入到数数据文件后,检检查点的位置置也要相应地地往后移,CCKPT每三三秒会在控制制文件中记录录检查点的位位置,以表示示Instaance RRecoveery时开始始恢复的日志志条目,这个个概念称为检检查点的“心跳”(hearrtbeatt)。检查点点位置发生变变更后,Orracle里里面通过4个个参数用于控控制检查点位位置和最后的的重做日志条条目之间的距距离。在这里里面需要指出出的是,多数数人会将这44个参数看作作控制增量检检查点发生的的时间。事实实上这是错误误的,这4个个参数是用于于控制检查点点队列里面的的条目数量,而而不是控制检检查点的发生生。(1)fastt_starrt_io_targeet该参数用于表示示数据库发生生Instaance RRecoveery的时候候需要产生的的IO总数,它它通过v$ffilesttat
限制150内