Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

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.

Полезные материалы
Рекомендуем