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