Назад | Перейти на главную страницу

Использование большой памяти mysql и использование подкачки

У меня есть база данных размером 1,6 ГБ, которая добавляет около 200 МБ каждый месяц. У меня 12 ГБ ОЗУ (используется совместно с apache, mysql и os), mysql всегда использует подкачку, и мне нужно перезапустить службу, как только она достигнет предела пространства подкачки. Типичное использование памяти процессом mysql составляет 3,5 ГБ и увеличивается до 4,5 ГБ при большой активности на моем веб-сервере.

  1. Как я могу избежать использования mysql с помощью swap?
  2. Является ли использование памяти процесса MySQL 3,5 ГБ для размера базы данных 1,6 ГБ нормальным?
  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

Скорее всего виноваты такие настройки:

tmp_table_size=1768M
max_heap_table_size=1768M

Это означает, что каждая отдельная временная таблица, созданная запросом на вашем веб-сайте, может занимать до 1768 мегабайт памяти или 1,7 ГБ.

Я бы уменьшил их до 64M. Это уменьшит использование памяти, но также может привести к тому, что MySQL будет записывать данные временной таблицы для запросов на диск, что замедлит работу.

Если MySQL много использует диск для временных таблиц, вам необходимо проанализировать свое приложение и выяснить, где находятся запросы, которые генерируют большие временные таблицы, а затем провести рефакторинг кода, чтобы не требовать больших временных таблиц.