数据库服务器共享内存的常驻部分存储了下列数据结构,这些数据结构的大小在数据库服 务器运行时不会更改: l 共享内存头 l 缓冲池 l 逻辑日志缓冲区 l 物理日志缓冲区 l 锁表 共享内存头 共享内存头包含有关共享内存中所有其他结构的描述,包括内部表和缓冲池。 共享内存头还包含指向这些结构的位置的指针。当虚拟处理器首次连接到共享内存时,它 会读取共享内存头中的地址信息以便引导到所有其他结构。 共享内存头的大小大约有 200 KB,但该大小会根据计算机平台而发生变化。您不能调整 该头大小。 共享内存缓冲池 共享内存常驻部分中的缓冲池包含存储从磁盘读取的数据库空间页的缓冲区。缓冲池包含 对共享内存的常驻部分的最大分配。 下图说明了共享内存头和缓冲池。 图: 共享内存缓冲池 使用 BUFFERPOOL 配置参数可指定有关缓冲池的信息,包括缓冲池中缓冲区的数量。 要分配适当的缓冲区数,对于每个用户至少要启动 4 个缓冲区。对于 500 个以上的用 户,最少要求 2000 个缓冲区。缓冲区数目过少会严重影响性能,因此必须监视数据库服 GBase 8s 管理员指南 南大通用数据技术股份有限公司 - 115 - 务器并调节缓冲区数的值以确定可接受的值。如果非缺省页大小的缓冲池不存在,那么数 据库服务器将自动创建大页缓冲区。 如果您正在创建非缺省页大小的数据库空间,那么该数据库空间必须具有对应的缓冲池。 例如,如果创建页大小为 6 KB 的数据库空间,那么必须创建大小为 6 KB 的缓冲池。 自动 LRU(最近最少使用)调节可影响所有缓冲池并调整 BUFFERPOOL 配置参数中的 lru_min_dirty 和 lru_max_dirty 值。 有关设置 BUFFERPOOL 配置参数的更多信息,请参阅《GBase 8s 管理员参考》。 缓冲区状态通过缓冲区表跟踪。在共享内存中,缓冲区将组织到 FIFO/LRU 缓冲区队列 中。缓冲区获取是通过使用锁存器(称为互斥)和锁访问信息来管理的。 缓冲区溢出至虚拟部分 由于 64 位寻址中的最大缓冲区数可以大到 231-1,所以共享内存的常驻部分可能不能在 一个大的缓冲池中容纳所有这些缓冲区。在此情况下,数据库服务器共享内存的虚拟部分 可能会容纳这些缓冲区中的一些。 缓冲区大小 每个缓冲区就是一个数据库服务器页的大小。 通常,数据库服务器以整页单位(缓冲区大小)来执行 I/O。从大缓冲区、BLOB 空间缓 冲区或轻量级 I/O 缓冲区执行的 I/O 是例外。(请参阅大缓冲区和创建 BLOB 页缓冲 区) onstat -b 命令将显示有关缓冲区的信息。有关 onstat 的信息,请参阅《GBase 8s 管理员 参考》。 逻辑日志缓冲区 数据库服务器将使用逻辑日志来存储自上次数据库空间备份以来对数据库服务器所作更改 的记录。 逻辑日志存储代表数据库服务器工作的逻辑单元的记录。逻辑日志包含以下五 种类型日志记录(此外还有很多其他类型): l 用于所有数据库的 SQL 数据定义语句 l 用于通过日志记录创建的数据库的 SQL 数据操作语句 l 对数据库的日志记录状态所作更改的记录 l 检查点记录 l 对配置所作更改的记录 数据库服务器一次只使用逻辑日志缓冲区中的一个。此缓冲区是当前的逻辑日志缓冲区。 在数据库服务器将当前的逻辑日志缓冲区清空到磁盘之前,它将使第二个逻辑日志缓冲区 成为当前的缓冲区以便其可以在第一个缓冲区清空时继续写入。如果第二个逻辑日志缓冲 GBase 8s 管理员指南 南大通用数据技术股份有限公司 - 116 - 区在第一个缓冲区完成清空前充满,那么第三个逻辑日志缓冲区将成为当前的缓冲区。下 图说明了此过程。 图: 逻辑日志缓冲区及其与磁盘上的逻辑日志文件的关系 有关数据库服务器如何清空逻辑日志缓冲区的描述,请参阅清空逻辑日志缓冲区。 LOGBUFF 配置参数指定逻辑日志缓冲区的大小。如果存储的记录大于缓冲区的大小(例 如,数据库空间中的 TEXT 或 BYTE 数据),那么小缓冲区可能会产生问题。逻辑日志 缓冲区大小的推荐值是 64 KB。无论何时该设置小于推荐值,数据库服务器都将在服务器 启动时建议另一个值。有关可指定给此配置参数的可能的值,请参阅《GBase 8s 管理员 参考》。 有关 TEXT 和 BYTE 数据对共享内存缓冲区的影响的信息,请参阅缓冲区大对象数据。 物理日志缓冲区 数据库服务器使用物理日志缓冲区来容纳一些经过修改的数据库空间页的前映像。物理日 志和逻辑日志记录中的前映像使数据库服务器能够在系统故障后将一致性复原到其数据 库。 物理日志缓冲区实际上是两个缓冲区。双缓冲允许数据库服务器进程在其他缓冲区正清空 到磁盘上的物理日志时写入活动物理日志缓冲区。有关数据库服务器如何清空物理日志缓 冲区的描述,请参阅清空物理日志缓冲区。有关监视物理日志文件的信息,请参阅监视物 理和逻辑日志记录活动。 onconfig 文件中的 PHYSBUFF 参数指定物理日志缓冲区的大小。一次写入物理日志缓冲 区正好写满一页。如果物理日志缓冲区的指定大小不能按页大小均匀分隔,数据库服务器 会将该大小向下四舍五入到可按页大小平均分隔的最近的值。虽然有些操作要求缓冲区即 刻清空,但通常数据库服务器将在缓冲区充满时才将缓冲区清空到磁盘上的物理日志文 件。因此,缓冲区的大小将确定数据库服务器必须每隔多少时间将缓冲区清空到磁盘一 次。 GBase 8s 管理员指南 南大通用数据技术股份有限公司 - 117 - 物理日志缓冲区大小的缺省值为 512 KB。如果您决定使用更小的值,数据库服务器将显 示一条消息,指示这样可能会无法达到最佳性能。使用小于 512 KB 的物理日志缓冲区只 会影响性能,而不会影响事务完整性。 有关此配置参数的更多信息,请参阅《GBase 8s 管理员参考》。 高可用性数据复制缓冲区 数据复制要求两个数据库服务器实例(一个主实例和一个辅助实例)分别运行在两个计算 机上。如果为数据库服务器实现数据复制,那么主数据库服务器首先将逻辑日志记录保存 在数据复制缓冲区中,然后再将这些记录发送到辅助数据库服务器。数据复制缓冲区的大 小总是和逻辑日志缓冲区的大小相同。有关逻辑日志缓冲区的大小的信息,请参阅上一主 题逻辑日志缓冲区。有关如何使用数据复制缓冲区的更多信息,请参阅数据复制的工作原 理。 锁表 锁将在用户线程在锁表中写入条目时创建。锁表是可用锁的池。单个事务可以拥有多个 锁。有关锁定和与锁定相关联的 SQL 语句的说明,请参阅《GBase 8s SQL 指南:教 程》。 存储在锁表中的以下信息描述锁: • 拥有定的事务的地址 • 锁定的类型(互斥、更新、共享、字节或意向) • 已锁定的页或行标识 • 放置锁定的表空间 • 有关已锁定字节(智能大对象的字节范围)的信息: o 智能大对象标识 o 智能大对象中已锁定字节开始处的偏移量 o 已锁定的字节数(从偏移处开始) 要指定锁定表的初始大小,请设置 LOCKS 配置参数。 如果会话分配的锁定数超过 LOCKS 配置参数中指定的值,那么数据库服务器会将锁定表 的大小加倍,最多可达 15 倍。数据库服务器通过尝试在每次增加时使锁定表翻倍来增加 锁定表的大小。但是,每次增加期间增加的量不得超过最大值。对于 32 位平台,每次最 大可增加 100,000 个锁定。因此,32 位平台允许的最大锁定总数为 8,000,000(启动锁定 的最大数目)+ 99(动态锁定表扩展的最大数目)x 100,000(每个锁定表扩展添加的最大 锁定数目)。对于 64 位平台,每次最大可增加 1,000,000 个锁定。因此,允许的最大锁 定总数为 500,000,000(启动锁定的最大数目)+ 99(动态锁定表扩展的最大数目)x 1,000,000(每个锁定表扩展添加的最大锁定数目)。 可使用 DEF_TABLE_LOCKMODE 配置参数为新表的页或行设置锁定方式。 这些锁定能够使会话在已落实或回滚了并发事务之后再读取数据。对于使用事务日志记录 创建的数据库,可使用 onconfig 文件中的 USELASTCOMMITTED 配置参数来指定数据 GBase 8s 管理员指南 南大通用数据技术股份有限公司 - 118 - 库服务器是否使用上次落实的数据版本。上次落实的数据版本是任何更新发生之前存在的 数据版本。使用 USELASTCOMMITTED 配置参数设置的值会覆盖在 SQL 语句 SET ISOLATION TO COMMITTED READ 中指定的隔离级别。有关使用 USELASTCOMMITTED 配置参数的更多信息,请参阅《GBase 8s 管理员参考》中有关配 置参数的主题。