Сайт MySQL / PHP работает очень медленно после обновления сервера — проблемы с версией PHP?

Мы только что обновили наш выделенный веб-сервер через нашу хостинговую компанию с 3-летнего двухъядерного компьютера Plesk 8 ГБ с PHP 5.1 и MySQL 5.1.

Новый сервер 6-ядерный, 8 ГБ cPanel / WHM-сервер под управлением PHP 5.4 и MySQL 5.5

Я извиняюсь, потому что я НЕ умный программист, но, поскольку мы небольшая компания, я весь ИТ-отдел!

Наш сайт электронной коммерции (код на основе шаблонов электронной торговли) теперь работает крайне медленно, и хостинговая компания может только сказать, что проблемы заключаются в нашем коде PHP / MySQL. Они говорят мне, что для выполнения практически каждого запроса требуется 2 секунды или более.

База данных насчитывает около 20 000 товаров и 60 таблиц. 400 Мб в размере.

Я ценю, что наш код может быть немного устаревшим, но действительно ли может потребоваться 20 секунд, чтобы загрузить страницу, которая раньше загружалась менее чем за 2 секунды, только потому, что PHP / MySQL «улучшился»?

Вот пример использования EXPLAIN через MySQLAdmin:

ОБЪЯСНИТЕ ВЫБЕРИТЕ СЧЕТЧИК (DISTINCT products.pId) AS bar ИЗ продуктов ВЕРНУТЬСЯ ПРИСОЕДИНИТЬСЯ К МНОГОСЕКЦИЯМ НА products.pId = multisections.pId ГДЕ pDisplay <> 0 И (
products.pSection IN (274) ИЛИ multisections.pSection IN (274))

1 ПРОСТЫЕ продукты ВСЕ НУЛЬ НУЛ НУЛ НУЛ 20728 Использование где

1 ПРОСТОЙ многосекционный ref ПЕРВИЧНЫЙ ПЕРВИЧНЫЙ 130 homesupply.products.pID 31 Использование где; Используя индекс

Я не очень глубоко здесь беспокоюсь о MyISAM против InnoDB, проблемах сортировки и так далее.

На данный момент я могу только вернуться к нашему старому серверу, пока мы не сможем перекодировать наш веб-сайт, и у меня возникнет желание выяснить, что это простая настройка, вызывающая проблему.

Спасибо

3

Решение

Это не будет проблемой в новом PHP, что маловероятно. Скорее всего проблема в MYSQL. Я бы предложил сделать следующее:

1) перестроить все индексы. Неправильное обновление до более новой версии MySQL может оставить
некоторые старые индексы в файле, вы можете безопасно восстановить все, просто восстановить все таблицы:

mysqlcheck -p -A -r

2) проверь какие запросы медленные. Выполните следующую инструкцию MySQL, чтобы увидеть:

SHOW FULL PROCESSLIST;

Вам может потребоваться запустить EXPLAIN для всех ваших запросов, которые очень длинные в очереди, проверьте, правильно ли он использует индексы, где это необходимо. Иногда более новая версия mysql может не использовать тот же индекс для того же запроса, что и предыдущая версия. Возможно, вам придется добавить FORCE INDEX в ваши запросы, где mysql не может использовать правильные индексы.

3) проверьте файл журнала. MySQL имеет файл журнала, в котором он сообщает о возможных проблемах. Его расположение зависит от вашей настройки, на моих серверах он находится в каталоге данных mysql.

4) отключить поиск DNS в MySQL, он может быть включен по умолчанию в новой версии. Возможно, вам придется настроить skip-name-resolv в конфигурационном файле mysql. На самом деле, сравнение ваших старых и новых файлов конфигурации может дать некоторые советы, которые отличаются.

2

Другие решения

Я столкнулся с этим вопросом на этой неделе.

Это был IPv6

Попробуйте полностью отключить IPv6. Вполне возможно, что некоторые локальные сервисы / плагины пытаются подключиться к IPv6 (google api и т. Д.), Для которых требуется тайм-аут, прежде чем они вернутся к v4.

У меня был доступ к адресному пространству IPv6, поэтому я включил его и настроил хост для его правильного использования.

1