web-dev-qa-db-ja.com

Mysqlの高いメモリ使用量とスワップの使用

私は1.6GBのデータベースを持っており、毎月約200MBのサイズを追加しています。私は12GBのRAM(Apache、mysql、osと共有)を持っています。mysqlは常にスワップを使用します。スワップスペースの制限に達したら、サービスを再起動する必要があります。 mysqlプロセスの一般的なメモリ使用量は3.5GBで、Webサーバーに大量のアクティビティがあると4.5GBに増加します。

  1. Mysqlでswapを使用しないようにするにはどうすればよいですか?
  2. 1.6GBのデータベースサイズで3.5GBのmysqlプロセスのメモリ使用量は正常ですか?
  3. 私のmysql設定は次のようになります、私の設定は最適化されていますか?
[mysqld]
innodb_file_per_table
datadir=/var/lib/mysql
tmpdir=/var/lib/mysqltmp
socket=/var/lib/mysql/mysql.sock
skip-locking
skip-name-resolve
table_cache=3072
thread_cache_size=16
back_log=100
max_connect_errors=10000
open-files-limit=20000
interactive_timeout=30
wait_timeout=40
max_connections=100
skip-name-resolve
max_allowed_packet=16M
tmp_table_size=1768M
max_heap_table_size=1768M
query_cache_size=64M
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=8M
join_buffer_size=32M
key_buffer_size=64M
myisam_sort_buffer_size=64M
innodb_log_file_size=100M
innodb_buffer_pool_size=1512M
3
shinmac

最も可能性の高い原因は次の設定です。

tmp_table_size=1768M
max_heap_table_size=1768M

つまり、Webサイトでのクエリによって作成された個々の一時テーブルはすべて、最大1768メガバイト(1.7 GB)のメモリを消費する可能性があります。

これらを64Mに減らします。これによりメモリ使用量が減少しますが、MySQLがクエリの一時テーブルデータをディスクに書き込む可能性もあり、処理速度が低下します。

MySQLが一時テーブルにディスクを頻繁に使用する場合は、アプリケーションを分析して、大きな一時テーブルを生成するクエリがどこにあるかを見つけてから、大きな一時テーブルが不要になるようにコードをリファクタリングする必要があります。

1
Tero Kilkanen