Настройка пула потоков Percona Thread Pool для высоконагруженных серверов СУБД
- Резкая деградация производительности MySQL (падение QPS) при росте одновременных клиентских подключений (Conns > 1000).
- Высокий показатель переключения контекстов CPU (Context Switches) в утилите
vmstatилиpidstat. - Потребление огромного объема оперативной памяти под стеки потоков
thread_stack.
1. Проверка поддержки Thread Pool
SHOW VARIABLES LIKE 'thread_handling';2. Конфигурация пула потоков в my.cnf
Добавьте параметры оптимизации пула потоков в файл конфигурации /etc/mysql/my.cnf:
[mysqld]
thread_handling = pool-of-threads
# Количество групп потоков (рекомендуется равным количеству физических ядер CPU)
thread_pool_size = 16
# Допустимое количество активных потоков в одной группе перед постановкой в очередь
thread_pool_oversubscribe = 3
# Максимальное время ожидания выполнения запроса в очереди потока (мс)
thread_pool_stall_limit = 500
# Максимальное количество создаваемых потоков в пуле
thread_pool_max_threads = 2000
# Таймаут ожидания освобождения потока (секунды)
thread_pool_idle_timeout = 603. Перезапуск СУБД и проверка статуса
systemctl restart mysqldSHOW STATUS LIKE 'Threadpool%';Ключевые метрики для анализа:
Threadpool_threads: текущее количество потоков в пуле;Threadpool_idle_threads: число простаивающих потоков;Threadpool_stalls: количество ситуаций, когда поток застрял и потребовалось создание нового рабочего потока (должно стремиться к 0).
Частые вопросы (FAQ)
Чем модель 'pool-of-threads' отличается от стандартной 'one-thread-per-connection'?
В стандартной модели каждое клиентское подключение создает отдельный поток ОС, что при 2000+ соединениях перегружает планировщик CPU переключениями контекста. Пул потоков мультиплексирует тысячи клиентских соединений на ограниченный набор рабочих потоков ядра.
Что делать, если растет счетчик Threadpool_stalls?
Это признак того, что запросы выполняются слишком долго из-за блокировок строк или медленного I/O. Оптимизируйте медленные запросы или увеличьте thread_pool_stall_limit.