一、共享内存的组成:
常驻部分
虚拟部分
IPC 通信或消息部分
虚拟扩展部分
见下图
ONCONFIG 文件中的 SHMTOTAL 配置参数指定数据库服务器可以用于所有内存分配的总共享内存量。
当数据库服务器需要的内存比 SHMTOTAL 所允许的更多时:减小 BUFFERPOOL 配置参数中的 DS_TOTAL_MEMORY 值或 buffers 值可能是一种解决方案;增大 SHMTOTAL 的值是另一种解决方案。
1、常驻部分
操作系统在进程间切换时通常将各部分内存的内容与磁盘交换。然而,当一部分内存指定为常驻时,它不会与磁盘交换。使频繁访问的数据常驻在内存中可以提高性能,因为与其它方法相比,这样做会减少访问该数据的磁盘 I/O 操作数。当操作系统支持共享内存驻留并且将ONCONFIG 文件中的 RESIDENT 参数设为非 0 的值时,数据库服务器请求操作系统将一些虚拟部分保持在物理内存中
1.1 共享内存头
包含有关共享内存中所有其它结构的描述,包括内部表和缓冲池。
共享内存头还包含指向这些结构的位置的指针。当虚拟处理器首次连接到共享内存时,它会读取共享内存头中的地址信息以便引导到所有其它结构。
共享内存头的大小大约有 200 千字节,但该大小会根据计算机平台而发生变化。您不能调整该头大小。
1.2 缓冲池
包含存储从磁盘读取的数据库空间页的缓冲区。
BUFFERPOOL 配置参数指定有关缓冲区的信息,包括指定缓冲池中缓冲区的数量。要分配适当的缓冲区数,对于每个用户至少要启动四个缓冲区。比如: 500 个以上的用户,最少要求 2000 个缓冲区。每个缓冲区就是一个数据库服务器页的大小。通常,数据库服务器以页为单位(缓冲区大小)来执行 I/O。
1.3 逻辑日志缓冲区
逻辑日志来存储自上次数据库空间备份以来对数据库服务器所作更改的记录。数据库服务器一次只使用逻辑日志缓冲区中的一个。此缓冲区是当前的逻辑日志缓冲区。在数据库服务器将当前的逻辑日志缓冲区清仓到磁盘之前,它将使第二个逻辑日志缓冲区成为当前的缓冲区以便其可以在第一个缓冲区清仓时继续写入。如果第二个逻辑日志缓冲区在第一个缓冲区完成清仓前充满,则第三个逻辑日志缓冲区将成为当前的缓冲区。
逻辑日志缓冲区及其与磁盘上的逻辑日志文件的关系:
http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.admin.doc/admin023.gif
LOGBUFF 参数指定逻辑日志缓冲区的大小(推荐值:64KB)。如果存储大于缓冲区大小的记录(例如,数据库空间中的 TEXT 或 BYTE 数据),则小缓冲区可能会产生问题。
1.4 物理日志缓冲区
物理日志缓冲区来容纳一些修改前的页映象。物理日志缓冲区实际上是两个缓冲区。双缓冲允许数据库服务器进程在其它缓冲区正清仓到磁盘上的物理日志时写入活动物理日志缓冲区。ONCONFIG 文件中的 PHYSBUFF 参数(默认值:512KB)指定物理日志缓冲区的大小。当小于512KB时,会影响性能,但不会影响事务完整性。
1.5 锁表
锁表是可用锁的池。每个锁是 44 字节。单个事务可以拥有多个锁。
LOCKS 配置参数决定要锁表的初始大小。如果会话分配的锁数超过 LOCKS 的值,则数据库服务器会将锁表的大小加倍,最多达 15 倍。LOCKS 的最大值是 8,000,000(32位机)或500,000,000(64位机)。对于新的表,可以使用DEF_TABLE_LOCKMODE 配置参数将锁定方式设置为页或行。对于32位平台的最大锁的数量为: 8,000,000 + 100,000 * 99 而62位平台的最大锁的数量为: 500,000,000 + 1,000,000 * 99
2、虚拟部分
共享内存的虚拟部分可以由数据库服务器扩展并且可以由操作系统分页到磁盘。当数据库服务器执行时,它可以自动根据需要将附加的操作系统段连接到虚拟部分。由SHMVIRTSIZE配置参数指定虚拟共享内存的初始大小。由SHMADD或EXTSHMADD配置参数指定向虚拟共享内存中添加的段的大小。
2.1 将数据清仓到磁盘
将缓冲区写入磁盘称为缓冲区清仓。已经修改的缓冲区将会标识为脏。当将缓冲区清仓到磁盘时,缓冲区会标识为不脏。
数据库服务器将清仓以下缓冲区:缓冲池;物理日志缓冲区;逻辑日志缓冲区。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22565551/viewspace-1027692/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22565551/viewspace-1027692/