Давайте немного поэкспериментируем с Микро-VPS. Из коробки MySQL сконфигурирован для автоматической подстройки под окружение, но на совсем ограниченных ресурсах я стабильно ловлю OOM-Killer и мне это не нравится, а переплачивать за этот недопроект не хочется и давайте тюнить.
Для минимизации потребления памяти MySQL на микро‑VPS нужно скорректировать ключевые параметры в конфигурационном файле, сейчас в Ubuntu они находятся в файле /etc/mysql/mysql.conf.d/mysqld.cnf, в других дистрибутивах +/- там-же и искать.
Для минимизации потребления памяти MySQL на микро‑VPS нужно скорректировать ключевые параметры в конфигурационном файле (my.cnf или my.ini). Ниже — основные настройки.
Основные параметры для оптимизации
Здесь конечно все на вкус и цвет, но будем рассматривать для VPS-минималок.
[mysqld]
# Ограничение соединений
max_connections = 50
# Буферы и кэши
key_buffer_size = 16M
tmp_table_size = 16M
max_heap_table_size = 16M
query_cache_size = 0 # Отключить кэш запросов в новых версиях MySQL
query_cache_type = 0
# InnoDB
innodb_buffer_pool_size = 64M # Для микро‑VPS с 512–1024 МБ RAM
innodb_log_file_size = 16M
innodb_buffer_pool_instances = 1
# Кэширование таблиц
table_open_cache = 64
table_definition_cache = 128
# Сетевые настройки
net_buffer_length = 16K
read_buffer_size = 16K
read_rnd_buffer_size = 8K
sort_buffer_size = 16K
join_buffer_size = 8K
# Логирование
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
# Другие оптимизации
thread_cache_size = 4
skip-name-resolve
Обратите внимание на параметры (они могут не поддерживаться):
query_cache_size = 0 # Отключить кэш запросов в новых версиях MySQL
query_cache_type = 0
Остальное дорабатывается и адаптируется под имеющиеся ресурсы.
Адаптация под объём RAM
| Объём RAM | innodb_buffer_pool_size | max_connections |
|---|---|---|
| 512 МБ | 64–128 МБ | 20–30 |
| 1 ГБ | 128–256 МБ | 30–50 |
| 2 ГБ | 256–512 МБ | 50–100 |
Дополнительные рекомендации
- Выбор движка: если не нужны транзакции и сложные запросы, рассмотрите
MyISAMвместоInnoDB(меньше потребляет памяти, но менее надёжен). - Отключение ненужных компонентов:
skip-networking # Если доступ только локальный
skip-external-locking
- Мониторинг использования памяти:
# Проверить текущее потребление памяти MySQL
ps aux | grep mysql
# Мониторинг запросов
tail -f /var/log/mysql/mysql-slow.log
- Оптимизация запросов: проанализируйте медленные запросы через лог slow_query_log, добавьте индексы, упростите сложные JOIN.
- Настройка swap: убедитесь, что swap настроен, чтобы избежать OOM‑убийства процесса MySQL при нехватке RAM.
Пример полной конфигурации для 512 МБ RAM
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Безопасность
skip-networking
skip-external-locking
# Производительность
max_connections = 20
key_buffer_size = 16M
tmp_table_size = 16M
max_heap_table_size = 16M
query_cache_size = 0
query_cache_type = 0
# InnoDB
innodb_buffer_pool_size = 64M
innodb_log_file_size = 16M
innodb_buffer_pool_instances = 1
# Кэширование
table_open_cache = 32
table_definition_cache = 64
# Сетевые
net_buffer_length = 16K
read_buffer_size = 16K
read_rnd_buffer_size = 8K
sort_buffer_size = 16K
join_buffer_size = 8K
# Логирование
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
# Потоки
thread_cache_size = 4
# Безопасность
skip-name-resolve
Важные замечания
- Тестируйте изменения постепенно: вносите правки по одной, перезапускайте MySQL и отслеживайте потребление памяти.
- Мониторинг: используйте top, htop, free -h для отслеживания нагрузки.
- Резервные копии: перед изменениями сделайте бэкап конфигурации и данных.
- Обновления: в новых версиях MySQL некоторые параметры могут быть устаревшими — сверяйтесь с официальной документацией.
После внесения изменений перезапустите MySQL:
# systemctl restart mysql




