1.3.8 内存结构和进程结构[1]
这部分将讨论oracle服务器管理数据库的内存和进程结构,本部分讨论的体系结构特征将使得Oracle服务器支持:
多个用户并行访问单个数据库。
并行多用户、多应用数据库系统所需的高性能。
一个Oracle.服务器使用内存结构和进程管理访问数据库。所有的内存结构都存储在计算机的主存中。进程是这些计算机内存中工作的任务。图1-2显示了Oracle服务器内存和进程结构。
Oracle创建和使用内存结构完成几项工作。例如,执行内存存储程序代码,或者在多个用户中共享数据。两种基本的内存结构同Oracle相关联:系统全局区和程序全局区。
1. 系统全局区
系统全局区(SGA)是Oracle数据库存放系统信息的一块内存区域。这样设计的主要原因是在内存中通信进程速度快、效率高。所有的用户进程和服务器进程都可以访问这个内存结构。
〔1)数据块缓存区数据块缓存区(Data Block Buffer
Cache)是SGA中的一个高速缓存区域,用来存储从数据库中读取数据段的数据块(如表、索引和簇).数据块缓存区的大小由数据库服务器init.ora文件中的DB_BLocK_BUFFERS参数决定(用数据库块的个数表示).在调整和管理数据库时,调整数据块缓存区的大小是一个重要的部分。
因为数据块缓存区的大小固定,并且其大小通常小于数据库段所使用的空间,所以它不能一次装载下内存中所有的数据库段。通常,数据块缓存区只是数据库大小的1%~2%.Oracle使用最近最少使用(Least
Recently Used,
LRU)算法来管理可用空间。当存储区需要自由空间时,最近最少使用块将被移出,新数据块将在存储区代替它的位置。通过这种方法,将最频繁使用的数据保存在存储区中。
然而,如果SGA的大小不足以容纳所有最常使用的数据,那么,不同的对象将争用数据块缓存区中的空间。当多个应用程序共享同一个SGA时,布民有可能发生这种情况。此时,每个应用的最近使用段都将与其他应用的最近使用段争夺SGA中的空间。其结果是,对数据块缓存区豹数据请求将出现较低的命中率,导致系统性能下降。
1.3.8 内存结构和进程结构[2]
(2)字典缓存区
数据库对象的信息存储在数据字典表中,这些信息包括用户账号数据、数据文件名、段名、盘区位置、表说明和权限,当数据库需要这些信息(如检查用户查询一个表的授权)时,将读取数据字典表并且将返回的数据存储在字典缓存区的SGA中。
数据字典缓存区通过最近最少使用(LRU)算法来管理。字典缓存区的大小由数据库内部管理。字典缓存区是SQL共享池的一部分,共享池的大小由数据库文件int.ora中的SHARED-POOL-SIZE参数来设置。
如果字典缓存区太小,数据库就不得不反复查询数据字典表以访问数据库所需的信息,这些查询称为循环调用(Recursive
call),这时的查询速度相对字典缓存区独立完戍查询时要低。
(3)重做日志缓冲区
重做项描述对数据库进行的修改。它们写到联机重做日志文件中,以便在数据库恢复过程中用于向前滚动操作。然而,在被写入联机重做日志文件之前,事务首先被一记录在称做重做日志缓冲区(Redo
Log Buffer)的SGA中。数据库可以周期地分批向联机重做日志文件中写重做项的内容,从而优化这个操作。
重做日志缓冲区的大小〔以字节为单位)由init_ora文件中的LOG_BUFFER参数决定。
(4)SQL共享池
SQL共享池存储数据字典缓存区及库缓存区(Library
Cache),即对数据库进行操作的语句信息。当数据块缓冲区和字典缓存区能够共享数据库用户间的结构及数据信息时,库缓存区允许共享常用的SQL语句。