Рассчитайте сценарий памяти InnoDB и сервера по действующим настройкам. Примеры значений описывают сервер с 16 GiB; это не рекомендации.
Двоичные единицы: 1 GiB = 1024 MiB. Допустимы байты или K/M/G/T: 268435456, 256M, 8G. Все расчёты выполняются в браузере.
Включите JavaScript для калькулятора. Пояснения и запросы доступны ниже.
Результаты сценария
- Память InnoDB
- Сценарий нагрузки
- Нагрузка при max_connections
- Запас сценария
- Глобальные выделения и резервы
- Базовая память подключений
- Буферы активных запросов
- Временные таблицы и локальные блоки
- Бюджет сервера базы данных
- Измеренная инструментами память InnoDB
- Текущий RSS процесса
Оценка, а не гарантированный максимум
Нагрузка, настройки сессий и неотслеживаемые выделения могут превышать модель. Стресс сохраняет количество операций, активируя все подключения. Проверьте RSS, лимиты cgroup, swap и пики под типичной нагрузкой. Файлы redo/undo и innodb_redo_log_capacity — дисковое пространство, а не равный объём RAM.
Формулы и допущения
C = подключения; A = активные запросы; T = временные таблицы на запрос. Резервы учитываются один раз.
InnoDB = innodb_buffer_pool_size × (1 + overhead / 100) + innodb_log_buffer_size + dictionary + locks + transactions + adaptive_hash + compression + InnoDB_extra
G = InnoDB + key_buffer_size + aria_pagecache_buffer_size (MariaDB) + query_cache_size (MariaDB / MySQL 5.7) + other_global
B = thread_stack + 2 × net_buffer_length + max_digest_length + session_extra
Q = sort_buffer_size × sorts + join_buffer_size × joins + read_buffer_size × scans + read_rnd_buffer_size × random_reads + query_extra
Total = G + C × B + A × Q + Temp
Stress: C = A = max_connections
Точная оценка памяти InnoDB
Память InnoDB не ограничивается innodb_buffer_pool_size. Калькулятор учитывает буферный пул, настраиваемый резерв для его структур, глобальный innodb_log_buffer_size и указанные дополнительные выделения InnoDB. В документации MySQL описано около 10% дополнительной памяти для структур пула; реальный резерв зависит от сборки и нагрузки, особенно в MariaDB. Используйте действующее значение работающего сервера: после округления размера пула оно может отличаться от конфигурации.
Словарь, adaptive hash, блокировки, структуры транзакций и сжатие могут требовать дополнительной памяти. Учитывайте только выделения, отсутствующие в пуле и резерве. Ёмкость redo, файлы redo и пространства undo — дисковые ресурсы, а не равные выделения RAM. Сумма InnoDB не включает другие движки, Performance Schema, буферы подключений и запросов, а также ОС.
Получите действующие настройки
Запросы ниже только читают данные. Неподдерживаемые переменные пропускаются в SHOW ... WHERE. Threads_running включает измерительный запрос и отражает один момент; используйте типичный параллелизм и записанные пики. Max_used_connections — пик подключений, а не активных запросов. Проверяйте настройки сессий приложения: текущая сессия не описывает все сессии.
SELECT VERSION();
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
'innodb_buffer_pool_size', 'innodb_log_buffer_size', 'innodb_page_size',
'key_buffer_size', 'aria_pagecache_buffer_size', 'query_cache_size',
'max_connections', 'thread_handling', 'thread_stack', 'net_buffer_length',
'max_digest_length', 'max_allowed_packet', 'sort_buffer_size',
'join_buffer_size', 'read_buffer_size', 'read_rnd_buffer_size',
'tmp_table_size', 'max_heap_table_size', 'internal_tmp_mem_storage_engine',
'temptable_max_ram', 'temptable_max_mmap', 'temptable_use_mmap'
);
SHOW GLOBAL STATUS WHERE Variable_name IN (
'Threads_connected', 'Threads_running', 'Max_used_connections',
'Created_tmp_tables', 'Created_tmp_disk_tables',
'Innodb_buffer_pool_pages_total', 'Innodb_buffer_pool_pages_data',
'Innodb_buffer_pool_pages_free'
);
SHOW SESSION VARIABLES WHERE Variable_name IN (
'sort_buffer_size', 'join_buffer_size', 'read_buffer_size',
'read_rnd_buffer_size', 'tmp_table_size', 'max_heap_table_size',
'internal_tmp_mem_storage_engine', 'max_allowed_packet'
);
SHOW ENGINE INNODB STATUS;
Измерьте память InnoDB и процесса
Если версия предоставляет эту таблицу памяти Performance Schema и инструменты InnoDB активны, изучите текущие выделения. Охват зависит от версии; позднее включение счётчиков не восстанавливает все прошлые выделения. Отсутствие строк или нулевые значения не доказывают отсутствие памяти. Не складывайте максимумы отдельных инструментов для оценки одновременного пика. Укажите текущую сумму в необязательном измерении InnoDB; она остаётся отдельно от модели.
SELECT EVENT_NAME,
ROUND(CURRENT_NUMBER_OF_BYTES_USED / 1048576, 2) AS current_mib,
ROUND(HIGH_NUMBER_OF_BYTES_USED / 1048576, 2) AS high_mib
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/innodb/%'
ORDER BY CURRENT_NUMBER_OF_BYTES_USED DESC;
SELECT ROUND(SUM(CURRENT_NUMBER_OF_BYTES_USED) / 1048576, 2)
AS instrumented_innodb_mib
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/innodb/%';
В Linux RSS ниже указан в KiB: используйте суффикс K или делите на 1024 для MiB. RSS относится ко всему процессу. Учитывайте лимиты cgroup, системный кэш, удержание памяти аллокатором и другие службы.
ps -C mariadbd,mysqld -o pid=,rss=,comm=
Временные таблицы и ограничения
В MariaDB и MySQL с MEMORY меньшая из величин tmp_table_size и max_heap_table_size ограничивает каждую внутреннюю временную таблицу. В одном запросе могут сосуществовать несколько таблиц и буферов соединений. Модель применяет выбранное количество операций к активным запросам, а не к простаивающим подключениям.
В MySQL TempTable лимит temptable_max_ram общий для сессий. Начиная с 8.0.28 tmp_table_size также ограничивает отдельную таблицу; более ранний профиль использует только общий лимит. Локальные блоки не входят в лимит RAM. Модель резервирует блок для каждого подключения, поскольку он может сохраняться до завершения потока и превышать пример в 1 MiB. Файлы mmap могут добавлять резидентные страницы; предел размера файла не равен выделенной RAM.
Стресс активирует все подключения max_connections с той же формой запроса. Это не гарантированная верхняя граница. Добавьте резервы для пользовательских MEMORY-таблиц, сетевого роста, SQL/BLOB, binlog, репликации, подготовленных запросов, кэша потоков и других выделений. Сравните модель с пиками процесса под типичной нагрузкой. Оценка и цель настройки не обеспечивают принудительный лимит памяти.
Источники и проверка
Проверено 13 октября 2026 года. Оригинальные пояснения основаны на Releem и документации серверов. Пример Releem задаёт 200 подключений и лимиты 32 MiB, но умножает на 16 MB. Согласованный результат для одной таблицы на подключение: 6400 MiB = 6,25 GiB. Правила конкретного движка важнее общей формулы.