вопрос
1. За что отвечает разъем?
2. Что такое длинное соединение? Что такое короткая ссылка?
3. Что такое пул потоков соединений?
4. Как вы можете оптимизировать количество подключений в своей повседневной работе?
установить соединение
Коннекторы отвечают за установление соединений с клиентами, получение разрешений, поддержание соединений и управление ими.
Как правило, мы будем получать доступ к базе данных в следующих формах. Этот путьTCP/IP 方式
.
mysql -h$ip -P$port -u$user -p
Конечно, если клиент и база данных находятся на одной машине, вы можете использоватьUnix Sockets方式
mysql -uroot
После установления соединения коннектор проверит имеющиеся у вас разрешения в таблице разрешений. После этого логика оценки разрешения в этом соединении будет зависеть от разрешения, прочитанного в это время. После того, как пользователь успешно установит соединение, даже если вы используете учетную запись администратора для изменения разрешений пользователя, это не повлияет на разрешения существующего соединения. После завершения модификации только вновь созданные подключения будут использовать новые настройки разрешений.
Когда отключать?
По времени отключения подключение делится на:长连接
а также短连接
- Длинное соединение: после подключения вы можете отправлять несколько запросов, пока клиент не отключится вручную. Если поток находился в спящем состоянии после соединения (это означает, что запрос не обрабатывается), то после
wait_timeout
Соединение будет автоматически разорвано по истечении времени, по умолчанию 8 часов. - Короткое соединение: После установления соединения соединение разрывается после отправки запроса. Следующий запрос к базе данных должен быть переподключен.
Короткие соединения будут часто создавать соединения, а в загруженной системе может привести к исчерпанию счетчика системных портов, что сделает невозможным соединение.
Хотя длительное соединение позволяет избежать частого создания соединения, пространство памяти, запрошенное в процессе соединения, должно быть освобождено до тех пор, пока соединение не будет закрыто. Поэтому, если длительное время соединения слишком велико, это может привести к резкому увеличению объема памяти базы данных.
Возьмите PHP в качестве примера:
- Когда мы используем PHP в качестве веб-службы, запрос может обращаться к базе данных несколько раз, запрашивать или изменять данные. В обычных условиях (без специальных настроек) используйте
长连接
способ доступа. Когда запрос завершается, интерфейс возвращает ответ. Это долгое соединение отключено. Вы можете просмотреть все текущие соединения с помощью show processlist. - Если резидентный скрипт написан на PHP, а доступ к базе данных осуществляется в скрипте, то это длинное соединение может существовать всегда (его следует по возможности избегать).
Я столкнулся с ситуацией в проекте, когда я написал скрипт, подписался на очередь сообщений, потреблял сообщения из очереди, а затем читал и записывал в базу данных на основе содержимого сообщения. Однако из-за недостаточного объема бизнеса на ранней стадии в очереди сообщений может отсутствовать потребление сообщений в течение длительного времени, а соединение автоматически отключается по прошествии более 8 часов. Для таких резидентных сценариев рекомендуется вручную отключать базу данных и повторно подключать ее через регулярные промежутки времени. Или после выполнения некоторых сложных запросов к базе данных отключите и снова подключитесь к следующему запросу.
Что такое пул потоков соединений?
Обычно каждое соединение соответствует одному потоку.MySQL连接管理器线程
Отвечает за обработку клиентских запросов на подключение к сетевому интерфейсу, который прослушивает сервер.
Как только приходит запрос на подключение新建线程
обрабатывать. Но стоимость создания нового потока относительно высока, поэтому Mysql использует线程池
Чтобы кэшировать незанятые потоки для последующего использования соединения.
Поток управления соединением обрабатывает процесс запроса на соединение клиента следующим образом:
1. Проверьте, содержит ли пул потоков простаивающие потоки, и если да, извлеките поток и отправьте его клиенту для подключения к запросу.
2. Если простаивающих потоков нет, проверьте, не превышает ли количество существующих соединений最大连接数
, если нет, создайте новый поток для обработки клиентских запросов на подключение.
Как оптимизировать соединения
Во-первых, есть важный параметр, называемыйmax_connections,
Это относится к максимальному количеству подключений к Mysql.Например, если установлено значение 5, то одновременно могут подключаться только 5 клиентов. Конечно, Mysql делает особый подход к пользователю root: когда количество подключений исчерпано, пользователь root по-прежнему может подключаться к предыдущему пользователю. Другими словами, максимум может фактически разрешить max_connections + 1 корневое соединение.
Просмотр максимального количества подключений
show variables like '%max_connections%';
Установите максимальное количество подключений, и перезапуск службы завершится ошибкой. Если вы хотите сделать его постоянным, вы можете изменить файл .cnf.
set GLOBAL max_connections = 200;
Мы можем просмотреть максимальное количество подключений в прошлом, чтобы получить максимальное количество подключений в прошлом.
show global status like 'max_used_connections';
Затем, чтобы оставить место для сервера, рекомендуется, чтобы max_used_connections/max_connections = 0,8
Проверьте ситуацию с потоком
show status like 'Threads%'
- Threads_cached определяет количество незанятых потоков, которые кэшируются.
- Threads_connected указывает количество потоков в подключенном состоянии.
- Threads_running указывает количество потоков, выполняющих запросы, передающих данные и т. д.
может контролироватьсяthread_cache_size
для управления размером пула потоков кэша. В случае повышенного параллелизма увеличение этого значения может повысить производительность системы.
Посмотрите, сколько подключений можно кэшировать
show global variables like 'thread_cache_size';
Суммировать
- Соединение Mysql делится на
长连接
а также短连接
- Количество подключений контролируется параметром max_connections, установленным в разумных пределах.
max_connections
а такжеthread_cache_size
Производительность системы может быть улучшена.