Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
THREAD_POOL_SATURATION Linux / DevOps

Настройка пула потоков Percona Thread Pool для высоконагруженных серверов СУБД

Обновлено: 21.08.2026
  • Резкая деградация производительности 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 = 60

3. Перезапуск СУБД и проверка статуса

systemctl restart mysqld
SHOW STATUS LIKE 'Threadpool%';

Ключевые метрики для анализа:

  • Threadpool_threads: текущее количество потоков в пуле;
  • Threadpool_idle_threads: число простаивающих потоков;
  • Threadpool_stalls: количество ситуаций, когда поток застрял и потребовалось создание нового рабочего потока (должно стремиться к 0).
Практический опыт инженера: Никогда не устанавливайте thread_pool_size значительно больше, чем число физических ядер процессора — это нивелирует весь эффект масштабирования за счет повторного возникновения конкуренции за ядра CPU.

Частые вопросы (FAQ)

Чем модель 'pool-of-threads' отличается от стандартной 'one-thread-per-connection'?

В стандартной модели каждое клиентское подключение создает отдельный поток ОС, что при 2000+ соединениях перегружает планировщик CPU переключениями контекста. Пул потоков мультиплексирует тысячи клиентских соединений на ограниченный набор рабочих потоков ядра.

Что делать, если растет счетчик Threadpool_stalls?

Это признак того, что запросы выполняются слишком долго из-за блокировок строк или медленного I/O. Оптимизируйте медленные запросы или увеличьте thread_pool_stall_limit.