BUFFERPOOL 配置参数

使用 BUFFERPOOL 配置参数来配置在共享内存中高速缓存的数据页数,在检查点之间以何种频率将那些页清空到磁盘。对于许多系统而言,BUFFERPOOL 配置参数的缺省值足够。然而,您可更改这些值来调整系统性能。

onconfig.std 值
2 KB 缺省页大小的操作系统:
BUFFERPOOL default,buffers=10000,lrus=8,lru_min_dirty=50.00,
lru_max_dirty=60.50
BUFFERPOOL size=2k,buffers=50000,lrus=8,lru_min_dirty=50,
lru_max_dirty=60
4 KB 缺省页大小的操作系统:
BUFFERPOOL default,buffers=10000,lrus=8,lru_min_dirty=50.00,
lru_max_dirty=60.50
BUFFERPOOL size=4k,buffers=10000,lrus=8,lru_min_dirty=50,
lru_max_dirty=60
如果您在安装期间创建了服务器,则缺省值
BUFFERPOOL default,memory='auto'
BUFFERPOOL size=page_size,memory=memory_size
page_size 值是缺省页大小。缓冲池的最初大小是 32 MB。作为 automemory_size 值,指定 memory 域的值作为大小的最大值,这依赖于 AUTO_TUNE_SERVER_SIZE 配置参数的值。
请参阅“用法”部分。
分隔符
用逗号分隔域。
生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onparams -b 命令在 onconfig 文件中动态地添加一个条目时。
当您通过运行 onspaces -c -d 命令通过添加一个页大小不同的 dbspace 来动态地添加一个条目时。
通过运行带有 add bufferpool 参数的 SQL 管理 API task()admin() 函数,在 onconfig 文件中动态地添加一个条目之后。

用法

高速缓存数据页保存在缓冲区中。缓冲区包含在缓冲池中。用作存储空间的每个页大小需要一个缓冲池。当数据库服务器需要将新数据页移入共享内存时,最近最少使用的数据页移出内存。 BUFFERPOOL 配置参数控制缓冲池的大小和数据页清空到磁盘的频率。

如果您在安装期间创建了一个服务器,则在 onconfig.std 文件或 onconfig 文件中,BUFFERPOOL 配置参数有两个条目:

包括 size 域的 BUFFERPOOL 配置参数条目优先于包含 default 域的条目。

BUFFERPOOL 配置参数有两种格式:

您可使用其中一种格式来在需要提高性能时使得数据库服务器能扩充缓冲池的大小。

限制: 您不可在 onconfig 文件中组合使用两种格式。onconfig 文件中的所有 BUFFERPOOL 配置参数条目都必须有相同的格式。否则数据库服务器不启动并显示下列错误:
ERROR: Cannot mix buffer arguments with memory arguments.  (BUFFERPOOL)

BUFFERPOOL 条目中的域不是大小写敏感的,且这些域会按任何顺序罗列。

内存域的语法
缓冲区域的语法
可扩展的选项
表 1. BUFFERPOOL 配置参数值的选项.

buffers 缺省是 1000。

number_buffers 值是一个大于等于 1000 的整数,指定共享内存缓冲区的最大数目。允许的缓冲区最大数目依赖于操作系统,位大小和页大小:

  • UNIX™,32-bit,2 KB 页大小:1000 - 1843200
  • UNIX,32-bit,4 KB 页大小:1000 - 921600
  • Windows™ ,32-bit:100 - 524288
  • 64-bit:100 - (231-1)。请参阅 machine notes,了解您的64-bit 平台的实际值。例如,在 Solaris 平台上的缓冲区最大数目是 536,870,912。

每个用户 buffers 域的值设置为最少四个缓冲区。如果您的系统要处理超过 500 个并发用户,则至少指定 2000 个缓冲区。

每个缓冲区是操作系统页的大小。因此,数据库服务器需要的缓冲区数目依赖于物理内存的数量以及应用程序使用多少内存。例如,如果 90% 的时间数据库服务器访问 15% 的应用程序数据,则分配保持 15% 数据的充足缓冲区。提高缓冲区数目可提高系统性能。缓冲区数目可显著影响性能并使用大百分比的物理内存。

要了解更多信息,请参阅 BUFFERPOOL 配置参数与内存利用

cache_hit_ratio 缺省是 90。

ratio 值是一个 0 - 100 的整数,表示缓冲池可以在之下扩展的阈值。当平均读高速缓存命中率保持在 ratio 之下大约五分钟时,数据库服务器扩展缓冲池。

只有设置 extendable=1时,cache_hit_ratio 域才有效。

extendable 如果设置 memory 域,则缺省是 1。

如果设置 buffers 域,则缺省是 0。

数据库服务器能否扩展缓冲池的大小:

  • 0 = 禁用。缓冲池不可增长。
  • 1 = 启用。缓冲池可增长。
lru_max_dirty 缺省是 60.00。

max_percentage 是一个 0 - 100.00 的十进制数,设置在 LRU 队列中当被修改页达到多少百分比时清除队列。

如果启用 AUTO_LRU_TUNING 配置参数,则这个值根据需要动态地更新。

lru_min_dirty 缺省是 50.00。

min_percentage 值是一个 0 - 100.00 的十进制数,设置在 LRU 队列中当被修改的页达到多少百分比时不再强制清除页。

在有些环境下,页清除程序可以在超过特定百分比时继续清除。

如果启用 AUTO_LRU_TUNING 环境变量,则这个值根据需要自动地更新。

lrus 缺省是 8。如果启用 MULTIPROCESSOR 配置参数,则缺省大于 8 或 CPU VP 的数目。

number_lrus 值是一个正整数,指定缓冲池中 LRU(最近最少使用)队列的数目。

取值范围依赖于操作系统的位大小:

  • 32-bit 平台:8 - 128
  • 64-bit 平台:8 - 512

指定 LRU 队列越多,就有越多页清除程序并行工作。然而,设置 lrus 域的值过高,可能导致过度的页清除程序活动。

lrus 域的值与 lru_min_dirty lru_max_dirty 域组合在一起,控制共享内存缓冲区清空到磁盘的频率。

要了解更多信息,请参阅 BUFFERPOOL 及其对页清除的影响

max_extend 缺省是 8。

extends 表示数据库服务器可扩展缓冲池的最大次数。extends 的值时从 0 到段的最大数目,依赖于操作系统和位大小:

  • 32 bit = 16
  • UNIX 64 bit = 24
  • Windows 64 bit = 8

只有设置 buffersextendable=1max_extend 域才有效。

memory 缺省是 auto

max_size 表示缓冲池大小的最大值。max_size 取值范围是:

  • 一个表示 32 MB - 4 TB 的整数。您可指定 KB、MB 或 GB 的大小单位。如果您不指定单位,则缺省单位是 KB。
  • auto = 数据库服务器决定分配给缓冲池的共享内存的最大数量。如果设置,AUTO_TUNE_SERVER_SIZE 配置参数的值控制缓冲池大小的最大值。
next_extend 缺省是 1000。

number_buffers 值是一个大于等于 1000 的整数,指定数据库服务器用于扩展缓冲池的共享内存缓冲区数目。number_buffers 的最大值受虚拟共享内存数量的限制。

每四次扩展,number_buffers 值翻倍。

只有设置 buffersextendable=1next_extend 域才有效。

size page_size 值指定缓冲区的页大小,以 KB 为单位。页大小必须是 2 - 16 KB 且必须是缺省页大小的倍数。例如,如果缺省页大小是 2 KB,则页大小可是 2、4、6、8、10、12、14 或 16。如果缺省页大小是 4 KB,则页大小可是 4、8、12 或 16。缺省值依赖于系统缺省页大小:
  • 2 KB 缺省页大小:size=2k
  • 4 KB 缺省页大小:size=4k

k 是可选的。

start_memory 缺省是 32 MB。

start_size 值表示当数据库服务器启动时缓冲池的初始大小:

  • 一个表示 32 MB 直到可用共享内存的最大数量的整数。您可指定大小单位 KB、MB 或 GB。如果不指定单位,则缺省单位是 KB。缓冲池的初始大小可以大于 start_size 的值,因为该大小必须是共享内存段大小的倍数。
  • auto = 数据库服务器决定分配给缓冲池的共享内存的初始数量。

如果您不设置 start_memory 域,则缓冲池的初始大小等于 memory 域的值。

只有设置 memory 域,start_memory 域才有效。

内存格式的缓冲池的大小

如果您使用内存格式,则缺省状态下,缓冲池大小根据需要增长。当平均高速缓存读命中率低于阈值时,共享内存段添加到缓冲池。您可设置缓冲池的初始大小和大小的最大值,或允许数据库服务器最优的大小。

如果 extendable 域设置为零,则缓冲池不增长。如果设置,则大小等于 start_memory 域的值,否则,等于 memory 域的值。

当您重启服务器时,缓冲池的大小重置为 start_memory 域的值。

缓冲区格式的缓冲池大小

如果您使用 buffers 格式,则缺省情况下,缓冲池大小不增长。大小等于 buffers 域的值。

如果您设置 extendable 域为 1,则当平均高速缓存读命中率低于阈值时,共享内存段添加到缓冲池。您必须在 buffers 域中设置缓冲区的初始数目。您可选择通过设置缓冲区的数目来扩展缓冲池,以及缓冲池可扩展的最大次数,以及高速缓存命中率。每四次扩展,添加到缓冲池的缓冲区数目翻倍。

示例:添加一个带 memory 域的 BUFFERPOOL 条目

下列条目创建一个有 10 KB 页大小的缓冲池:

BUFFERPOOL size=10k,start_memory=auto,memory=4gb

缓冲池可扩展到 4 GB。数据库服务器决定缓冲池的初始大小和扩展到缓冲池的大小。

示例:添加一个带有 buffers 域的 BUFFERPOOL 条目

下列条目创建一个有 2 KB 页大小的缓冲池:

BUFFERPOOL size=2k,extendable=1,buffers=1000,next_buffers=2000,max_extends=8

缓冲池可扩展八次。缓冲池启动时有 1000 个缓冲区。最初三个缓冲池扩展添加 2000 个缓冲区。第四次到第七次扩展添加 4000 个缓冲区。第八次扩展添加 8000 个缓冲区。

示例:通过添加一个带有不同页大小的 dbspace 来添加一个 BUFFERPOOL 条目

当您用 onspaces 实用程序添加一个带有不同页大小的 dbspace 时,或者当您用 onparams 实用程序添加一个缓冲池时,在 onconfig 文件中添加一个 BUFFERPOOL 配置参数条目。下列示例显示一个第三条目:

BUFFERPOOL default,buffers=10000,lrus=8,lru_min_dirty=50.00,lru_max_dirty=60.50
          BUFFERPOOL size=2k,buffers=10000,lrus=8,lru_min_dirty=50,lru_max_dirty=60
          BUFFERPOOL size=6k

当您创建一个非缺省页大小的 dbspace 时,如果现有的 BUFFERPOOL 条目存在,则数据库服务器使用那个条目的页大小。否则,数据库服务器使用来自 BUFFERPOOL 缺省行的值。