Асинхронное заполнение буферпула для NUMA¶
Современные процессоры имеют непосредственное подключение к оперативной памяти. Обращение к памяти другого процессора вызывает дополнительные задержки из-за архитектуры NUMA (Non-Uniform Memory Architecture).
- Заполнение памяти происходит постепенно, часто при отсутствии полной загрузки всех процессорных ядер.
- Ядро Linux аллоцирует физическую память того же процессора, который выполняет код базы данных.
- После полного заполнение узла NUMA ядро Linux проводит выравнивание использования памяти между разными процессорами
- Эта балансировка вызывает использование подкачки (swapping). Swap insanity
MySQL позволяет избежать проблемы подкачки с NUMA за счёт использования режима innodb_numa_interleave. К сожалению, если память не заполнить сразу после аллокации, она не будет аллоцирована равномерно. Percona Server проводит заполнение оперативной памяти сразу при старте, что решает проблему подкачки, но существенно замедляет время старта сервера на серверах с 100+ GB оперативной памяти.
MyDB реализует асинхронное заполнение пустых страниц буферпула при старте сервера, что позволяет:
- Иметь одинаковое время от старта до готовности исполнять запросы для любого количества оперативной памяти
- Обеспечивать сбалансированное распределение памяти по NUMA узлам
- Решить проблему NUMA Swap insanity.
Последнее обновление:
2025-07-01