Снижение нагрузки на сервер. Оптимизация VitrueMart.


В рамках цикла заметок по вычислению и снижению нагрузки на сервер было бы не правильно не опубликовать логическое завершение «разборок» с VirtueMart, как одним из виновников в жёстском ступоре сервера, выявленном по создаваемым нагрузкам на MySQL — подробнее в предыдущей заметке Вычисление нагрузки на сервер. Part 1 — MySQL Так же стоит заметить — торможение MySQL цепляет за собой и нагрузку на память в виде ожидающего данных веб-сервера (на данный момент у меня это сильно сжирающий память индеец).

Итак:

  • изначально о слишком большой нагрузке узнал в реальном режиме просматривая top
  • далее захотелось узнать кто же конретно грузит — с этой задачей справилась утилита mtop
  • конкретные «тормозные» SQL запрос смотрим в логах, предварительно включив нужную опцию

Виновник вычислен, скрипт известен — что же дальше ?

Ну а дальше самый важный шаг — оптитизация приложения.

Грамотно реализованное приложение будет работать быстрее аналогичного по задачам на обычном VDS против супер-навороченного выделенного сервера — это факт !

Ладно — хватит лирики .. .По нашей задаче — далее всеми мыслимыми и немыслимыми способами ищем программный код, генерирующий вычисленный запрос — гуглим, разбираемся в Joomla, VitueMart, ищем по «select distinct», включаем интуицию, метод «научного тыка» — в общем все эти «пляски с бубном» лично мне помогли вычислить файл — shop_browse_queries.php

Далее анализируем и оптимизируем сам запрос — вычисляем неиспользуемые и ненужные поля — убираем их, проверям заново (всё это можно делать отдельно от приложения — например, в чистом MySQL.

Далее дело за малым — правим наш shop_browse_queries.php в соответствие с нашим запросом.

Всё ! В результате проделанных махинаций запрос стал отрабатывать раз в 10 быстрее, в лог «тормозов» не попадает — сервер вздохнул свободно (по крайней мере падений пока не наблюдалось).

Кому интересно, вот подробности:

Мой файлик после корректировки

Вычисленный запрос

Запрос после модификации (внимание — подобное вырезание, конечно же вырезает и функционал, я просто многое не использую — поэтому порезал. так что «7 раз отмерь 1 отреж»)

Статистика до (товаров в базе около 5k)

Статистика «после»

P.S. Следующим шагом будет полный отказ от Apache — переход на связку nginx+php as fastcgi

Что по идее должно сильно разгрузить память (если получится — можно на мускул будет побольше выделить).


17 комментариев на «“Снижение нагрузки на сервер. Оптимизация VitrueMart.”»

  1. Как говорится скупой платит дважды.
    Virtuemart писали школьники, так что ничего тут удивительного нет.
    IMHO лучше сделать небольшое вложение как и в любом бизнесе и спасти свой мозг как минимум.
    Но и выбирая платный продукт нужно быть осторожным(та же разработка «отечественных программистов» — phpshop — тупая поделка ясельной группы)
    Ну а тем кто пожалел на вложение в инет-магазин, статья очень поможет (верней тем кто занимается разработкой для них).
    Есть еще «Хак ускоряющий виртумарт как минимум в 10 раз».

  2. Danik — ну посоветовал бы уже платный продукт.
    Ссылочку на хак так же не помешало бы запостить.

  3. Спасибо. Сам как раз юзать начал виртмарт. Кстати, никто не знает, где можно приобрести псевдо магазины на виртмарте? Долларов за 15-20?

  4. Во всем есть свои плюсы и минусы, «Следующим шагом будет полный отказ от Apache — переход на связку nginx+php as fastcgi» мне вот немного сомнительна успешность таких заявлений. У вас есть положительные примеры такого перехода?

  5. Всегда напрягала тугость этого компонента… (та и сама джумла — не спринтер). Может ваш рецепт улучшит ситуацию. Опробую. Спасибо!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *