調べる
apache 2.2 - Mysql using high VIRT memory and RES is compartively - Server Fault
FreeBSD 10.1
mysqltuner ... [--] Total buffers: 200.0M global + 1.1M per thread (51 max threads) [OK] Maximum possible memory usage: 257.4M (12% of installed RAM) top ... 57248 mysql 23 20 0 689M 446M uwait 0:02 0.00% mysqld
257.4M なのに SIZE 689M (RES 446M)
table_definition_cacheが原因の1つ
table_definition_cache の値が大きくなってしまっているようです。(912とか1400とか)
データベースを一つしか使っていないのであれば今までの400もあれば十分なので以下のように変更しますshow variables like 'table_definition_cache'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | table_definition_cache | 1400 | +------------------------+-------+ vim /etc/my.cnf ----------------- table_definition_cache=400 ----------------- service mysqld restart
メモOFF: MySQL5.6がメモリを沢山お召し上がりになる件
MySQL maximum memory usage - Stack Overflow
5.6.9以降はデフォルト1400、5.5はデフォルト400
https://dev.mysql.com/doc/refman/5.6/ja/server-default-changes.html
https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html
通常のテーブルキャッシュとは違い、ファイルディスクリプタを使わずにテーブル定義だけをキャッシュするのでスペースもとらず、テーブルが多いほどに有効です。デフォルトは、MySQL5.6.8までは400です。
数値は、400 + (table_open_cache / 2) が良いとされています。今回はこの値の変更をしてみます。https://blog.ybbo.net/2015/12/26/change-table_definition_cache-on-mysql/
ver | table_open_cache | table_definition_cache |
---|---|---|
5.5 | 400 | 400 |
5.6.9以降 | 2000 | 1400 |
https://www.percona.com/blog/mysql-5-5-and-mysql-5-6-default-variable-values-differences/
table_definition_cache
...
最小値は 400 です。 デフォルト値は次の式に基づき、2000 までに制限されています。MIN(400 + table_open_cache / 2, 2000)https://dev.mysql.com/doc/refman/8.0/ja/server-system-variables.html