5.1.11.1 Интерфейсы подключений
В этом разделе описываются аспекты управления подключением клиентов к серверу MySQL.
Сетевые интерфейсы и потоки менеджера подключений
Сервер может прослушивать подключения клиентов на нескольких сетевых интерфейсах. Потоки менеджера подключений обрабатывают запросы на подключение клиентов по сетевым интерфейсам, на которых сервер прослушивает:
На всех платформах один поток менеджера обрабатывает запросы подключений TCP/IP.
В Unix тот же поток менеджера также обрабатывает запросы подключений по сокетам Unix.
В Windows один поток менеджера обрабатывает запросы подключений через общую память, а другой — запросы подключений через именованные каналы.
Сервер не создаёт потоки для обработки интерфейсов, на которые он не прослушивает. Например, сервер Windows, у которого не включена поддержка подключений через именованные каналы, не создаёт поток для их обработки.
Отдельные плагины или компоненты сервера могут реализовывать свои собственные интерфейсы подключений:
Плагин X позволяет MySQL Server общаться с клиентами, используя протокол X. См. Раздел 19.4, “Плагин X”.
Управление потоками подключений клиентов
Потоки менеджера подключений связывают каждое подключение клиента с потоком, предназначенным для него, который обрабатывает аутентификацию и обработку запросов для этого подключения. Потоки менеджера создают новый поток при необходимости, но сначала пытаются использовать поток из кэша потоков, чтобы узнать, не может ли он быть использован для подключения. Когда подключение завершается, его поток возвращается в кэш потоков, если кэш не заполнен.
В этой модели потоков подключений существует столько потоков, сколько сейчас подключено клиентов, что имеет некоторые недостатки, когда рабочая нагрузка сервера должна масштабироваться для обработки большого количества подключений. Например, создание и удаление потоков становится дорогостоящим. Кроме того, каждый поток требует ресурсов сервера и ядра, таких как место в стеке. Чтобы вместить большое количество одновременных подключений, размер стека на поток должен быть небольшим, что приводит к ситуации, когда он либо слишком мал, либо сервер потребляет большое количество памяти. Может также произойти исчерпание других ресурсов, и накладные расходы на планирование могут стать значительными.
MySQL Enterprise Edition включает плагин пула потоков, который предоставляет альтернативную модель обработки потоков, предназначенную для сокращения накладных расходов и повышения производительности. Он реализует пул потоков, который повышает производительность сервера, эффективно управляя потоками выполнения запросов для большого числа подключений клиентов. См. Раздел 5.5.3, “Пул потоков MySQL Enterprise”.
Для управления и мониторинга того, как сервер управляет потоками, обрабатывающими подключения клиентов, есть несколько системных и статусных переменных. (См. Раздел 5.1.7, “Системные переменные сервера” и Раздел 5.1.9, “Статусные переменные сервера”.)
Системная переменная
thread_cache_sizeопределяет размер кэша потоков. По умолчанию сервер автоматически устанавливает значение при запуске, но его можно явно установить, чтобы переопределить это значение по умолчанию. Значение 0 отключает кэширование, что приводит к созданию потока для каждого нового подключения и его удалению при завершении подключения. Чтобы включитьNкэширование неактивных потоков подключений, установитеthread_cache_sizeвNпри запуске сервера или во время работы. Поток подключения становится неактивным, когда завершается подключение клиента, с которым он был связан.Чтобы отслеживать количество потоков в кэше и сколько потоков было создано из-за того, что поток не был взят из кэша, проверьте статусные переменные
Threads_cachedиThreads_created.Когда стек потока слишком мал, это ограничивает сложность SQL-запросов, которые может обработать сервер, глубину рекурсии хранимых процедур и другие действия, потребляющие много памяти. Чтобы установить размер стека в
Nбайт для каждого потока, запустите сервер сthread_stack, установленным вN.
Управление объёмом подключений
Для управления максимальным числом клиентов, которые сервер разрешает подключаться одновременно, установите системную переменную max_connections при запуске сервера или во время работы. Может потребоваться увеличить max_connections, если больше клиентов пытаются подключиться одновременно, чем сервер настроен обработать (см. Раздел B.3.2.5, “Слишком много подключений”).
mysqld фактически разрешает max_connections + 1 подключение клиента. Дополнительное подключение зарезервировано для использования учётными записями, у которых есть привилегия SUPER. Предоставляя привилегию администраторам, а не обычным пользователям (которым это не нужно), администратор, у которого также есть привилегия PROCESS, может подключиться к серверу и использовать SHOW
PROCESSLIST для диагностики проблем, даже если максимальное число непривилегированных клиентов подключено. См. Раздел 13.7.5.29, “Отображение списка процессов”.
Если сервер отклоняет подключение из-за достижения предела max_connections, он увеличивает статусную переменную Connection_errors_max_connections.
Максимальное число подключений, которые поддерживает MySQL (то есть максимальное значение, до которого можно установить max_connections), зависит от нескольких факторов:
Качество библиотеки потоков на данной платформе.
Количество доступной оперативной памяти.
Количество оперативной памяти, используемой для каждого подключения.
Рабочая нагрузка от каждого подключения.
Желаемое время отклика.
Количество доступных дескрипторов файлов.
Linux или Solaris обычно должны поддерживать как минимум 500–1000 одновременных подключений и до 10 000 подключений, если у вас есть много гигабайт оперативной памяти, и рабочая нагрузка каждого низкая или целевое время отклика невысокое.
Увеличение значения max_connections увеличивает количество дескрипторов файлов, которые требует mysqld. Если необходимое количество дескрипторов недоступно, сервер уменьшает значение max_connections. Комментарии к ограничениям на дескрипторы файлов см. в Разделе 8.4.3.1, “Как MySQL открывает и закрывает таблицы”.
Возможно, потребуется увеличить системную переменную open_files_limit, что также может потребовать повышения системного ограничения на количество дескрипторов файлов, которые может использовать MySQL. Обратитесь к документации вашей операционной системы, чтобы узнать, можно ли увеличить это ограничение и как это сделать. См. также Раздел B.3.2.16, “Ошибка «Файл не найден» и аналогичные ошибки”.
© 2025 Oracle
Licensed under the GPLv2 License.