У нас есть проблема с сервером, который иногда работает особенно медленно, но процессор никогда не загружается очень высоко. Системный администратор изучил это и сказал, что в любой момент времени существует огромное количество подключений из порта MySQL сервера A, который работает нормально, и сервера B, сервера с проблемами. Основными симптомами, наблюдаемыми на сервере B, являются очень медленное время загрузки страницы, проявляющееся главным образом в начальном зависании до того, как страница что-либо сделает, и медленное соединение с оболочкой. Стоит отметить, что это не зависит от веб-сайта / приложения - не вызвано Javascript или чем-то в этом роде, поскольку у нас есть одно и то же приложение, работающее на 3 или 4 других серверах с той же спецификацией, без каких-либо проблем.
Что я хочу сделать, так это попытаться отследить точную природу этих MySQL-соединений между двумя серверами. Итак, каков источник, какова цель, какова цель. Следует ли мне включить (в настоящее время отключенный) общий журнал? Есть еще что-нибудь, что я могу попробовать? Оба сервера работают под управлением CentOS (один на 4.8 и один на 5.5) и оба на последних сборках WHM / cPanel с последними стабильными версиями PHP / Apache.
Спасибо.
вы также можете попробовать менее навязчивый подход [без включения журналов, которые приводят к снижению производительности]. сниффать трафик с помощью tcpdump [это можно делать с любой стороны соединения или посередине - на каком-то маршрутизаторе или управляемом коммутаторе с зеркалированием портов].
tcpdump -s 1600 -w dump.cap -i eth0 host 10.1.2.3 and port 3306
проанализировать dump.cap - сначала с WireShark [на этом этапе вы сможете определить, много ли параллельных подключений или нет], и при необходимости посмотрите на мк-запрос-дайджест который может дать вам хорошее представление о запросах, поступающих либо из журналов mysql, либо из трафика tcpdump.
Если у вас есть два подключенных сервера, и у вас медленные «соединения», но как только поток подключается, все происходит быстро, я подозреваю, что разрешение DNS на удаленном хосте может вызвать проблему.
skip-name-resolve
в вашем /etc/mysql/my.cnf (или аналогичном файле) в разделе [mysqld] предотвратит эти поиски DNS.
Убедитесь, что ваши гранты выполняются с использованием IP-адресов, а не имен хостов.
Включение журнала - хорошая идея, вы также можете использовать клиент администратора MySQL, чтобы просмотреть открытые соединения и увидеть, что они делают, когда вы столкнетесь с проблемой.
Хотя из вашего описания я могу придумать одну очень распространенную проблему, которая у меня в голове, это проблема с DNS, которая заставляет MySQL ждать тайм-аута DNS перед обработкой входящего соединения. Обычно это проявляется в том, что вы описываете, в ситуациях, когда приложение открывает новое соединение MySQL для каждого запроса (вместо использования постоянного пула соединений).
Подробнее об этом читайте здесь: http://dev.mysql.com/doc/refman/5.0/en/dns.html
(skip_name_resolve в my.cnf - это опция IIRC)