数据库管理器未能分配共享内存,因为已达到操作系统内核内存限制

Cha*_*hna 6 db2 memory

我已经安装了 IBM DB2 10.5.5,我想在那里创建一个新数据库。

当我输入命令时

db2 create database test1
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息

SQL1084C  The database manager failed to allocate shared memory because an 
operating system kernel memory limit has been reached.  SQLSTATE=57019
Run Code Online (Sandbox Code Playgroud)

以下是我运行“ipcs -l”时得到的输出

 ------ Shared Memory Limits --------
max number of segments = 10000
max seg size (kbytes) = 4882812
max total shared memory (kbytes) = 33554432
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 4096
max semaphores per array = 250
max semaphores system wide = 1024000
max ops per semop call = 32
semaphore max value = 32767

------ Messages Limits --------
max queues system wide = 16384
max size of message (bytes) = 65536
default max size of queue (bytes) = 16384
Run Code Online (Sandbox Code Playgroud)

这是什么原因?我该如何解决?我在具有 8GB 物理内存的 Ubuntu 14.04 上运行。

小智 5

我刚刚遇到了同样的问题!就我而言,问题只是 DB2 实例的内存

在 Windows 类型中:

db2 get dbm cfg | findstr MEMORY
Run Code Online (Sandbox Code Playgroud)

在Linux中:

db2 get dbm cfg | grep MEMORY
Run Code Online (Sandbox Code Playgroud)

你会得到这样的东西:

Global instance memory (4KB)          (INSTANCE_MEMORY) = 500000
Run Code Online (Sandbox Code Playgroud)

在我的情况下,解决方案只是设置相同的阈值,但通过激活自动模式:

db2 update dbm cfg using INSTANCE_MEMORY 100000 automatic immediate
Run Code Online (Sandbox Code Playgroud)

命令“立即立即应用设置,无需重新启动实例。所以如果你再次得到设置将有:

Global instance memory (4KB)          (INSTANCE_MEMORY) = AUTOMATIC(5000000)
Run Code Online (Sandbox Code Playgroud)

现在尝试再次连接到您的数据库。我相信会再次正常连接。

根据 DB2 文档:

如果您使用具有内存使用限制的 DB2® 数据库产品或将其设置为特定值,则此参数指定可为数据库分区分配的最大内存量。否则,AUTOMATIC 设置允许实例内存根据需要增长。

字体:IBM 知识中心


小智 -1

首先检查输出中的内存限制

ulimit -a
Run Code Online (Sandbox Code Playgroud)

作为实例所有者并在必要时增加它们。

然后只需检查输出

free
Run Code Online (Sandbox Code Playgroud)

我可以看到您有足够的物理内存,但没有证据表明有足够的可用内存供 db2 完成其工作。

最一般的、几乎 rtfm 但不可避免的提示是阅读什么

db2 '?' SQL1084C
Run Code Online (Sandbox Code Playgroud)

通常在这一分钟,人们会拍打自己的额头,然后听到自言自语的声音。