共享内存段的所有页都是固定在物理 RAM 中的。如果在RAM 中没有足够的空闲页可用,
或者没有足够的可以被 OS 为满足数据库段而调出的其他页,那么启动数据库的请求就会
遭到失败。
下面的例子展示了会导致问题的不恰当配置。
例 1 考虑如下配置: (所有页的大小都为 4K)
服务器:
服务器上的物理 RAM 16GB
shmsys:shminfo_shmmax = 2097152 (2GB)
数据库:
IBMDEFAULTBP 400,000 页
UTILHEAP 17,500 页
DBHEAP 30,000 页
LOCKLIST 1000 页
PCKCACHE 5000 页
CATALOGCACHE 2500 页
限制: DB2 发出的任何创建大于 shmmax 值(这里是 2GB)的数据库共享内存集的请求
都将失败,并返回一个 out of memory type 错误。
计算:
数据库共享内存 = (456,000 页 x 4KB/页) x 1.1 = ~2.0GB
问题: 可能仍然可以激活数据库或者连接到数据库。但是,尝试运行一个应用程序时可能
返回如下错误消息:
SQL1224N A database agent could not be started to service request, or was terminated as a result
of a database system shutdown or a force command. SQLSTATE=55032
这是 DB2 经常返回的一个错误。不过,如果不是在 AIX 服务器上,而是在 UNIX 服务器
上,那么这就很可能与内存资源问题有关。 特别地,可能是内核参数没有进行适当的调优。
为解决这个问题,可以适当地配置内核参数。设置:
shmsys:shminfo_shmmax = 15099494 (~90% of 16GB)
例 2 考虑如下配置: (所有页的大小都为 4K)
服务器上的物理 RAM 是 1 GB。