Как ускорить работу Drupal 7 с удаленной БД (без разрешения DNS)
У нас есть Drupal 7 на виртуальной машине Ubuntu LTS (VMWare) с сервером MySQL 5.1 на том же физическом сервере, но на другой виртуальной машине.
Сайт Drupal в настоящее время находится в стадии разработки, поэтому трафика практически нет, однако, несмотря на молниеносный пинг и доступ к оболочке, сайт Drupal работает очень медленно (>5 секунд для загрузки любой страницы). После исследования здесь и в других местах я понимаю, что проблема заключается в том, что к SQL обращаются через сетевой интерфейс, что, по-видимому, делает Drupal очень плохо.
Я проверил разрешение DNS и не должно быть ни со стороны Drupal (хост db указан ip, в файле /etc/hosts есть запись dns), ни со стороны MySQL (skip-name-resolution включено, клиент drupal есть предоставлен доступ по IP-адресу).
В журнале запросов Drupal devel говорится:
За 5993,89 мс выполнено 336 запросов. Запросы, превышающие 5 мс, подсвечиваются. Время выполнения страницы составило 7015,35 мс. Используемая память: devel_boot()=5,53 МБ, devel_shutdown()=93,35 МБ, пиковое значение PHP =94 МБ.
Самое странное, что при загрузке одной страницы около 2/3 запросов выполняются быстро, другие - чрезвычайно медленно:
1.765 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
575.825 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
13.585 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
466.9914 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache WHERE cid IN (:cids_0)
default
1.841 drupal_lookup_pathP A E
SELECT source FROM url_alias WHERE alias = :alias AND language IN (:language, :language_none) ORDER BY language ASC, pid DESC
default
Ситуация исправлена для анон доступа, включив кеш Drupal. Однако весь интерфейс администратора все еще работает медленно.
В соответствии с текущей политикой компании сервер БД устанавливается отдельно. Могут ли быть другие варианты для ускорения работы Drupal?
Конфигурация базы данных по умолчанию гласит, что драйвер "mysql", может, мне стоит сменить его на "mysqli" или "pdo_mysql"? Однако, если я изменю его на mysqli, то database.inc будет жаловаться на то, что соответствующего драйвера не существует - что-либо для установки там специально для drupal, так как mysqli и pdo включены в самом PHP.
5 ответов
Поскольку этот вопрос по-прежнему привлекает ответы, я отвечу на него сам, так как я тогда решил его.
В основном, как только я перевел Mysql на тот же виртуальный компьютер, что и Drupal, все стало молниеносно. Таким образом, проблема заключалась в том, что Drupal выдавал огромное количество SQL-запросов для каждой загрузки страницы = плохая архитектура.
Есть множество вещей, которые вы можете сделать:
- Твик производительности
mysqld
с/etc/my.cnf
: - Включить кеширование:
Попробуйте также изучить следующее:
Я думаю, что есть две области, где вы можете оптимизировать свой сайт:
- Сократите отдельные запросы, настроив базу данных MySQL. Я бы начал с http://mysqltuner.pl/, который покажет вам очевидные проблемы с вашей установкой и предоставит подсказки по настройке.
- Уменьшите количество запросов. Я знаю одну большую установку Drupal, где это было сделано с использованием memcache на хосте веб-сервера.
Вы проверяли Управление работой сайта на drupal.org?
У меня возникла та же проблема, и я использовал Google Chrome PageSpeed и YSlow, чтобы выяснить свои проблемы.
В основном, я делал эти шаги ниже:
Попробуйте установить PHP APC, установите размер APC shm равным 256Mb (для этого есть много рекомендаций). Затем убедитесь, что KeepAlive включен для Apache, а также активируйте сжатие Apache (через Apache mod_deflate).
Я подозреваю, что для запуска PHP недостаточно памяти. Проверить memory_limit
в файле PHP.INI. Измените его на -1 (неограниченная память), чтобы увидеть, улучшается ли производительность. Если этого не произойдет, то вас ждет долгое время. Вот ссылки на мои опубликованные статьи по улучшению производительности Drupal