Мы пытаемся масштабировать наши установки Drupal и выбрали несколько специализированных модулей MySQL. К сожалению, мы сталкиваемся с крайней медлительностью, когда пытаемся использовать удаленную БД - время загрузки страницы увеличивается с ~ 200 миллисекунд до 5-10 секунд.
Задержка между серверами минимальная - десятые или две миллисекунды.
PING 10.37.66.175 (10.37.66.175) 56(84) bytes of data.
64 bytes from 10.37.66.175: icmp_seq=1 ttl=64 time=0.145 ms
64 bytes from 10.37.66.175: icmp_seq=2 ttl=64 time=0.157 ms
64 bytes from 10.37.66.175: icmp_seq=3 ttl=64 time=0.157 ms
64 bytes from 10.37.66.175: icmp_seq=4 ttl=64 time=0.144 ms
64 bytes from 10.37.66.175: icmp_seq=5 ttl=64 time=0.121 ms
64 bytes from 10.37.66.175: icmp_seq=6 ttl=64 time=0.122 ms
64 bytes from 10.37.66.175: icmp_seq=7 ttl=64 time=0.163 ms
64 bytes from 10.37.66.175: icmp_seq=8 ttl=64 time=0.115 ms
64 bytes from 10.37.66.175: icmp_seq=9 ttl=64 time=0.484 ms
64 bytes from 10.37.66.175: icmp_seq=10 ttl=64 time=0.156 ms
--- 10.37.66.175 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8998ms
rtt min/avg/max/mdev = 0.115/0.176/0.484/0.104 ms
Drupal's devel.module
таймеры показывают, что запросы к базе данных не выполняются медленнее на удаленной БД - около 150 микросекунд, будь то локальный или удаленный сервер. Профилирование с помощью XHProf показывает исправное время выполнения PHP.
Количество запросов, похоже, не имеет значения - у нас одинаковая задержка в 5-10 секунд, независимо от того, содержит ли страница 12 запросов или 250.
Любые предложения о том, где мне следует начать устранение неполадок здесь? Я очень запутался.
Кажется, что ваши подключения к БД медленные по какой-то другой причине. Насколько быстро выполняется простое соединение из командной строки? (т. е. не PHP)
Мой главный подозреваемый будет неудачно (= истекло время) при поиске DNS на удаленном или локальном сервере; как прямой, так и обратный поиск.
Из эта страница: запустить mysqld с - пропустить имя-разрешение
Если это не поможет, я бы начал анализировать TCP-соединения (tcpdump / wirehark), чтобы изолировать проблему. (в верхней части моей головы: локальные поиски DNS, проблемы с брандмауэром (где-то перегружен блок NAT?), потеря пакетов на ссылке где-то, ..)
Когда эта проблема будет решена, вы, вероятно, также захотите убедиться, что у вас есть постоянные соединения с БД в PHP.
Причиной могут быть добавленные задержки при использовании разрешения имен на сервере MySQL. Для каждого соединения mysql проверяет DNS-имя клиента, что значительно увеличивает задержку.
Вы можете проверить, так ли это у вас, если у вас есть линия skip-name-resolve
в вашем my.cnf. Если его там нет, добавьте эту строку, перезапустите сервер и попробуйте еще раз.