Эта страница является оригинальной документацией PmaControl. Она сохраняет практичную структуру индекса для работ по оптимизации MySQL, не копируя сторонний контент и не завися от внешнего продукта.
Цель
Параметры MySQL управляют памятью, потоками, кэшами, долговечностью и I/O. Их нужно документировать по роли, а не менять как магический список.
Группы параметров
- Глобальная память:
innodb_buffer_pool_size,key_buffer_size, кэши таблиц. - Память на сессию:
sort_buffer_size,join_buffer_size,read_rnd_buffer_size,tmp_table_size. - I/O InnoDB: flush, redo log, page cleaners, потоки чтения и записи.
- Соединения:
max_connections, thread cache, лимиты файлов. - Историческая совместимость: query cache, MyISAM и устаревшие параметры.
Метод
Начинайте с SHOW VARIABLES и SHOW GLOBAL STATUS, затем сравнивайте значения с наблюдаемым поведением. Высокое значение может ухудшить общее потребление памяти, если оно выделяется на соединение.
См. также: Индекс параметров.
Проверьте действующие значения и область
Начните с идентификации и значений, реально используемых процессом. Файлы конфигурации могут не отражать параметры запуска, сохранённые значения и изменения во время работы. Глобальные значения по умолчанию отличаются от существующего сеанса. Зафиксируйте единицы, область, источник, возможность изменения без перезапуска и исходное значение. Перечень пропускает переменные, отсутствующие в установленной версии.
SELECT VERSION() AS server_version, @@version_comment AS distribution;
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
'innodb_buffer_pool_size', 'innodb_log_buffer_size',
'innodb_redo_log_capacity', 'innodb_log_file_size',
'innodb_flush_log_at_trx_commit', 'sync_binlog',
'max_connections', 'thread_cache_size', 'table_open_cache',
'sort_buffer_size', 'join_buffer_size', 'tmp_table_size',
'max_heap_table_size', 'internal_tmp_mem_storage_engine',
'temptable_max_ram', 'temptable_max_mmap'
);
SHOW SESSION VARIABLES WHERE Variable_name IN (
'sort_buffer_size', 'join_buffer_size', 'tmp_table_size',
'max_heap_table_size'
);
Свяжите каждую группу с измерениями
| Группа | Как подтвердить | Оцениваемый компромисс |
|---|---|---|
| Буферный пул | Рабочие данные, прирост чтений, RSS | Польза кеша против запаса памяти узла |
| Ёмкость redo | Скорость записи, ожидания redo, checkpoints | Дисковая ёмкость и восстановление |
| Буферы сеанса | Фактические сортировки, соединения и параллелизм | Выделение по потребности и несколько операторов |
| Лимиты соединений и таблиц | Отказы, создание потоков, открытие таблиц | Больший лимит повышает память и конкуренцию |
| Надёжность фиксации | Задержка фиксации и требования при сбоях | Производительность против риска потери подтверждённых данных |
Рассчитывайте память по фактическим выделениям
Не умножайте все буферы на max_connections, называя результат реальным потреблением RAM. Многие выделяются по потребности, а запрос может иметь несколько буферов соединения или временных таблиц. Разделяйте глобальную память, расходы подключённых сеансов и активных запросов; сохраняйте стресс-сценарий для оценки. Учтите ОС, другие службы и инструментацию, затем сравните модель с измеренным RSS и давлением памяти.
MySQL TempTable имеет общий бюджет RAM через temptable_max_ram; начиная с MySQL 8.0.28, tmp_table_size ограничивает и каждую внутреннюю таблицу TempTable. Для внутренних таблиц MEMORY применяется меньшее из tmp_table_size и max_heap_table_size. Правила зависят от движка и версии. Ёмкость redo относится к диску, а innodb_log_buffer_size — к RAM: не складывайте их как память.
Учитывайте версию и сохранение настроек
MySQL 8.0.30 ввёл innodb_redo_log_capacity; старые версии задают размеры файлов redo. Query cache относится к старому MySQL и удалён в MySQL 8. У MariaDB собственный жизненный цикл переменных, который нужно проверять по её документации. Не переносите конфигурацию с неизвестными или удалёнными переменными без проверки.
Для каждого изменения выясните влияние на существующие и новые сеансы и необходимость перезапуска. Глобальное изменение во время работы не обязательно сохраняется: MySQL SET PERSIST пишет отдельную конфигурацию. Согласуйте текущие и стартовые значения, задайте откат обоих и испытайте переподключение и перезапуск в контролируемой среде. Сравнивайте по одной гипотезе на одинаковой нагрузке и сохраняйте требуемую надёжность.
Продолжение диагностики
- Используйте калькулятор памяти для сценариев и указатель параметров для отдельных настроек.