私は1.6GBのデータベースを持っており、毎月約200MBのサイズを追加しています。私は12GBのRAM(Apache、mysql、osと共有)を持っています。mysqlは常にスワップを使用します。スワップスペースの制限に達したら、サービスを再起動する必要があります。 mysqlプロセスの一般的なメモリ使用量は3.5GBで、Webサーバーに大量のアクティビティがあると4.5GBに増加します。
[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
最も可能性の高い原因は次の設定です。
tmp_table_size=1768M
max_heap_table_size=1768M
つまり、Webサイトでのクエリによって作成された個々の一時テーブルはすべて、最大1768メガバイト(1.7 GB)のメモリを消費する可能性があります。
これらを64Mに減らします。これによりメモリ使用量が減少しますが、MySQLがクエリの一時テーブルデータをディスクに書き込む可能性もあり、処理速度が低下します。
MySQLが一時テーブルにディスクを頻繁に使用する場合は、アプリケーションを分析して、大きな一時テーブルを生成するクエリがどこにあるかを見つけてから、大きな一時テーブルが不要になるようにコードをリファクタリングする必要があります。