2015.08.19
MySQL
MySQL5.6 メモリ使用量を抑える
今回はMySQL5.6がメモリを450Mbyteも消費していたのでメモリ消費量を改善する方法です。
# ps alx | grep mysql | awk '{printf ("%d\t%s\n", $8,$13)}' 1488 /bin/sh 454036 /usr/sbin/mysqld 912 grep
調べてみるとバグらしいです。
とりあえず、現状はどうなっているのか確認します。
mysql> show variables like 'table_definition_cache'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | table_definition_cache | 1400 | +------------------------+-------+ 1 row in set (0.00 sec)
この’table_definition_cache’とはメモリ上に
テーブル構造、カラムの型、インデックスなどのテーブル定義のみキャッシュするとの事で、
データベースを1~2つ程度しか使用していない場合、Valueは400あたりで良いらしいです。
/etc/my.cnfを開き、[mysqld]下あたりに以下の1行を追加します。
[mysqld]
table_definition_cache=400
# service mysql restart
mysql再起動後、再度確認します。
mysql> show variables like 'table_definition_cache'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | table_definition_cache | 400 | +------------------------+-------+ 1 row in set (0.00 sec)
メモリも確認したところ、約97Mまで減っています。
# ps alx | grep mysql | awk '{printf ("%d\t%s\n", $8,$13)}' 1488 /bin/sh 97056 /usr/sbin/mysqld 912 grep
全体のメモリも確認します。
# free -h total used free shared buffers cached Mem: 996M 569M 426M 32M 122M 196M -/+ buffers/cache: 250M 745M Swap: 2.0G 3.1M 2.0G
だいぶ余裕ができたので
ついでにSwap領域もクリアします。
swapoff -a && swapon -a
Swapのusedが0になっています。
# free -h total used free shared buffers cached Mem: 996M 573M 423M 35M 122M 199M -/+ buffers/cache: 250M 745M Swap: 2.0G 0B 2.0G