web-dev-qa-db-ja.com

64ビットシステムのMySQLに8 GBのメモリを割り当てる

仕様-

MySQL 5.0.x  ,  Redhat 5.9  ,  Physical memory - 16GB

Innodbバッファープールサイズを8GBに設定しようとしています(innodb_buffer_pool_size = 8G)。私が実行してmysqlを起動すると、次のエラーが発生します-

InnoDB: Error: cannot allocate 8589950976 bytes of
InnoDB: memory with malloc! Total allocated memory
InnoDB: by InnoDB 37679104 bytes. Operating system errno: 12
InnoDB: Check if you should increase the swap file or
InnoDB: ulimits of your operating system.

これはfree -m-の出力です

             total       used       free     shared    buffers     cached
Mem:         15922      15269        653          0        248       4275
-/+ buffers/cache:      10744       5178
Swap:         2047          0       2047

これはulimit -a-の出力です

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127352
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 127352
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

「/etc/security/limits.conf」ファイルを確認しました。そこには何もありません。すべての行がコメント化されます(#で始まります)。空のディレクトリ '/etc/security/limits.d/'を確認しました。

MySQLへの4GBを超えるメモリの割り当てが妨げられています。わからない.

何か案は?

ダンケ。

4
Quest Monger

memlockが問題でした。結局のところ、memlock設定はデフォルト(上記を参照)であり、これがmysqlへの4 GB以上のメモリの割り当てを妨げている可能性があります。

'/etc/security/limits.conf'のmemlock設定を変更し、8GBに制限しました。次に、7GBをmysqlバッファープールに割り当てました。働いた。 mysqlはログにエラーをスローせずに開始および停止するようになりました。

ここで注意すべき点がいくつかあります-

  1. 私がオンラインで読んだものから、mysqlに割り当てられたメモリの量は、バッファプールの設定よりもわずかに多くなっています。たとえば、プールに7GBを割り当てた場合、mysqlに割り当てられた実際のメモリは8GBに近くなります(これは例であり、実際の数値ではありません)。

  2. mysqlサービスのオン/オフは非常に注意深く行う必要があります。 mysqld-startを実行した後、すぐにmysqld-stopを実行すると、mysqlが[FAILED]で応答することに気づきました。ログには、7GBの割り当てに失敗したと記載されています。

3
Quest Monger