Я использую MySQLTuner для оптимизации своей базы данных, и единственная проблема, с которой я столкнулся:
[!!] Максимально возможное использование памяти: 14,8 ГБ (126% установленной оперативной памяти)
Я не уверен, что мне следует изменить, чтобы уменьшить объем моей 12 ГБ оперативной памяти. У меня есть база данных со 110 таблицами, 10 000 000 строк (довольно быстро растет) и в среднем 250 пользователей в сети. Мой my.cnf выглядит так:
query_cache_limit = 1 млн
query_cache_size = 128 МБ
query_cache_type = 1
max_user_connections = 2000
max_connections = 2000
Interactive_timeout = 100
wait_timeout = 100
connect_timeout = 100
thread_cache_size = 128
key_buffer = 16M
join_buffer = 1 млн
max_allowed_packet = 16 млн
table_cache = 15360
record_buffer = 1 млн
sort_buffer_size = 4M
read_buffer_size = 2 млн
max_connect_errors = 10
thread_concurrency = 8
myisam_sort_buffer_size = 64 МБ
идентификатор сервера = 1
уменьшите max_connections до 200 и wait_timeout до 10
Использование памяти MySQL довольно сложно предсказать. Я бы порекомендовал взглянуть на http://www.mysqlperformanceblog.com/2006/05/17/mysql-server-memory-usage/ который дает представление о том, что использует память в вашей установке. Но подведем итог:
«Фактически, типичный сервер с 8 ГБ памяти часто работает с максимальным теоретическим использованием памяти 100 ГБ или более».
Или, другими словами, не беспокойтесь о максимально возможном использовании памяти, если только вы не заметите свопинг сервера.
Когда дело доходит до настройки базы данных, ваши среднестатистические «пользователи в сети» не представляют особого интереса. Вам необходимо учитывать пиковые запросы. В зависимости от ваших реальных потребностей вы можете отбросить любое максимальное количество подключений, размер буфера сортировки, буфер чтения или кеш запросов. Тогда всегда есть решение «бросить на это больше памяти».
max_user_connections=2000
max_connections=2000
Их можно значительно уменьшить, чтобы настроить MySQL.