Назад | Перейти на главную страницу

Как ускорить Drupal 7 с удаленной БД (без разрешения DNS)

у нас есть Drupal 7 на виртуальной машине Ubuntu LTS (VMWare) с сервером MySQL 5.1 на том же физическом сервере, но на другой виртуальной машине.

Веб-сайт Drupal в настоящее время находится в разработке, поэтому трафика практически нет, однако, несмотря на молниеносную скорость ping и доступ к оболочке, сайт Drupal работает очень медленно (> 5 секунд для загрузки любой страницы). После исследований здесь и в других местах я понял, что проблема заключается в том, что доступ к SQL осуществляется через сетевой интерфейс, что, по-видимому, делает Drupal очень плохо.

Я проверил разрешение DNS, и его не должно быть ни со стороны Drupal (хост db задается ip, есть запись dns в файле / etc / hosts), ни со стороны MySQL (skip-name-resolve включено, клиент drupal предоставлен доступ по IP-адресу).

В журнале запросов Drupal devel говорится:

Выполнено 336 запросов за 5993,89 мс. Выделяются запросы, превышающие 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.

Поскольку на этот вопрос до сих пор есть ответы, я отвечу на него сам, так как тогда я вроде как его решил.

По сути, как только я перенес Mysql на ту же виртуальную машину, что и Drupal, все стало молниеносно. Таким образом, проблема заключалась в том, что Drupal отправлял огромное количество sql-запросов для каждой загрузки страницы = плохая архитектура.

Я подозреваю, что для работы PHP недостаточно памяти. Проверить memory_limit в файле PHP.INI. Измените его на -1 (неограниченная память), чтобы увидеть, улучшится ли производительность. Если этого не произойдет, то вам предстоит долгий путь. Вот ссылки на мои опубликованные статьи об улучшении производительности Drupal.

  1. Настройка стека LAMP для повышения производительности Drupal
  2. Повышение производительности сайтов Drupal

У меня возникла такая же проблема, и я использовал Google Chrome PageSpeed ​​и YSlow, чтобы выяснить свои проблемы.

В основном я делал следующие шаги:

Попробуйте установить PHP APCустановите размер APC shm равным 256 МБ (для этого есть много руководств). Тогда убедитесь KeepAlive включен для Apache, а также активируйте сжатие Apache (через Apache mod_deflate).

Я думаю, есть две области, в которых вы можете оптимизировать свой сайт:

  1. Уменьшите количество индивидуальных запросов, настроив базу данных MySQL. Я бы начал с mysqltuner.pl, который покажет вам очевидные проблемы с вашей установкой и предоставит советы по настройке.
  2. Уменьшите количество запросов. Я знаю одну большую установку Drupal, где это было сделано с использованием кэша памяти на хосте веб-сервера.

Ты проверил Управление производительностью сайта на drupal.org?