内核参数要求 (Linux)

数据库管理器使用公式来自动调整内核参数设置,从而不再需要手动更新这些设置。

进程间通信内核参数

启动实例时,如果进程间通信 (IPC) 内核参数小于最小强制值,那么数据库管理器会将其更新为最小强制值。 当启动 Db2® 实例时, IPC 内核参数值会更改。
注意: 在启动 Db2 实例时更改的 IPC 内核参数值在重新引导系统时不会持久存储。 重新启动后,内核设置可能低于强制值,直到 Db2 实例启动为止。 通过调整任何内核参数设置,数据库可以防止发生不必要的资源错误。
表 1. Linux 进程间通信内核参数的强制最低设置
IPC 内核参数 最小强制设置
kernel.shmmni (SHMMNI) 256 * <size of RAM in GB>
kernel.shmmax (SHMMAX) <size of RAM in bytes>1
kernel.shmall (SHMALL) 2 * <size of RAM in the default system page size>2
kernel.sem (SEMMNI) 256 * <size of RAM in GB>
kernel.sem (SEMMSL) 250
kernel.sem (SEMMNS) 256 000
kernel.sem (SEMOPM) 32
kernel.msgmni (MSGMNI) 1 024 * <size of RAM in GB>
kernel.msgmax (MSGMAX) 65 536
kernel.msgmnb (MSGMNB) 65 536 3
  1. 在 32 位 Linux® 操作系统上, SHMMAX 的强制最小设置限制为 4 294 967 295 字节
  2. SHMALL 限制在系统上可分配的虚拟共享内存总量。 每个 Db2 数据服务器高效地管理其使用的系统内存量,也称为已落实的内存量。 Db2 数据服务器分配的虚拟内存比它落实的虚拟内存更多,以支持内存预分配和动态内存管理。 内存预分配可提高性能。 动态内存管理是增加或减少单独虚拟共享内存区域中的真实内存使用的过程。 为了有效地支持内存预分配和动态内存管理,数据服务器常常必须在系统上分配大于物理 RAM 量的虚拟共享内存。 内核需要此值作为页数。
  3. 负载性能可从较大的消息队列大小(由 MSGMNB 指定,以字节计)限制获益。 您可以通过运行 ipcs -q 命令来查看消息队列使用情况。 如果在装入操作期间,消息队列达到或接近容量,请考虑增大消息队列大小限制的字节数。

实施的最小内核参数设置

启动实例时,如果内核参数低于强制最小值,那么数据库管理器会将其更新为强制最小值。 启动 Db2 实例时,内核参数值会更改。
注意: 启动 Db2 实例时更改的内核参数值不会在系统重新引导时持久存储。 重新引导后,内核设置可能低于强制实施的值,直到 Db2实例启动为止。 通过调整内核参数设置,数据库管理器可以防止发生不必要的资源错误。
表 2. 内核参数的强制最小值
内核参数 实施的最小值
fs.file-max 16384
vm.max_map_count <size of RAM in bytes> / 4096
kernel.panic_on_oops 51
  1. 仅在 pureScale 配置中更改此参数

其他建议内核参数设置

下表列示了其他建议内核参数设置。
表 3. 配置其他 Linux 内核参数
建议内核参数设置 Db2 数据服务器配置内核参数
vm.swappiness=5 此参数定义内核交换出物理随机存取存储器 (RAM) 中的应用程序的倾向性。 缺省设置为 vm.swappiness=60。 建议的内核参数设置 vm.swappiness=5 将优先使用 RAM 找到应用程序内存,而不是分配更多内存用于文件高速缓存。
vm.overcommit_memory=0 此参数影响内核允许分配的虚拟内存量。 缺省设置为 vm.overcommit_memory=0。 此设置意味着所分配的虚拟内存不受限制。 具有无限虚拟内存对于 Db2 数据服务器很重要,这些服务器保留额外的未使用虚拟内存分配用于动态内存管理。 Linux 系统上的 RAM 或调页空间不支持未引用的已分配内存。 应避免设置 vm.overcommit_memory=2,因为此设置会限制可分配的总虚拟内存量,这会导致意外错误。
ipcmni_extend

建议在较新的 Linux Red Hat 内核上使用此参数,因为这些内核可能会将某些参数 (例如 SHMMNISEMMNIMSGMNI ) 限制为 32768。 如果用户具有超过 128GB 的 RAM ,那么除非设置了 ipcmni_extend 参数,否则建议将不起作用。

有关更多信息,请参阅 db2start 失败,因为在较新的 Linux Kernels上实施了最大信号量阵列。