根据sql错误码,提示去检查系统设置内存是否过大或者shmmax过小(内核内存)
如果是由于内存参数设置过大导致,也可以通过以下方法解决:
#可以通过调整以下参数进行限制整个系统的内存使用情况,单位为4k
db2set DB2_OVERRIDE_BPF=16
IBM官方解释: DB2_OVERRIDE_BPF • 操作系统:所有操作系统 • 缺省值 = 未设置,值:正数页数或 <entry>[;<entry>…],其中 <entry>=<buffer pool ID>,<number of pages> • 此变量以页为单位指定在激活数据库、前滚恢复或崩溃恢复时要创建的缓冲池大小。如果内存约束导致在激活数据库、前滚恢复或崩溃恢复时出现故障,那么此选项很有用。出现内存不足可能是因为实内存短缺(这种情况很少发生);或者因为数据库管理器试图在没有精确配置的缓冲池的情况下分配大的缓冲池。例如,如果数据库管理器连 16 页的最小缓冲池都无法建立,那么尝试使用此环境变量来指定一个更小的页数。为此变量提供的值将覆盖当前的缓冲池大小。 还可以使用 <entry>[;<entry>…](其中 <entry>=<buffer pool ID>,<number of pages>)来临时更改所有缓冲池或部分缓冲池的大小以使它们可以启动。 |
另外一种情况是shmmax过小,那么需要通过root用户进行调整两个参数.
SHMMAX:最大共享内存段尺寸(字节)
SHMALL :可用共享内存的总数量(字节或者页面)
linux和unix可以通过 /etc/sysctl.conf进行查看
而mac需要通过命令sysctl查看:
~root# sysctl -a |grep -i shmmax
或者通过以下方法查看
~root# sysctl kern.sysv.shmmax
按官方建议,shmmax设置物理内存的90%,同时建议设置shmall为shmmax/4K的值
我的pc是10g内存,那么设置shmmax值为:10 * 1024 * 1024 * 1024 * 0.9 =9663676416
shmall值为:9663676416 / 4096 = 2359296
设置值:
~root# sysctl -w kern.sysv.shmmax=9663676416
~root# sysctl -w kern.sysv.shmall=2359296
=====================================================
以上的设置是按sysctl for mac 命令参数进行修改,但是经我测试,发现重启后,以上两个参数仍然没有更新。
其实还有另外一个方法:
在/etc/目录下,新建一个sysctl.conf文件(需要root用户):
$vi /etc/sysctl.conf:
贴下以下参数项kern.sysv.shmmax=9663676416
kern.sysv.shmall=2359296
:wq保存后,再次进行重启即可生效!
ps:sysctl.conf除开可以输入以上两个参数外,还可以加入其他参数,比如maxfiles,maxproc等