Уменьшить нагрузку на mysql

#1 21 марта 2012 в 01:04
В избежании нагрузки на mySQL базу, необходимо выполнить оптимизацию запросов к базе.
Разовая работа, предлагайте сроки и стоимость.
С Уважением Дмитрий!
#2 21 марта 2012 в 01:08

В избежании нагрузки на mySQL базу, необходимо выполнить оптимизацию запросов к базе.
Разовая работа, предлагайте сроки и стоимость.
С Уважением Дмитрий!

blandind

Почитали бы пару топиков ранее добавленных
instantcms.ru/forum/thread10135-3.html#80561
#3 21 марта 2012 в 01:14
eoleg, топикстартер в своём посте предлагает сокращение запросов а не оптимизацию, это разные вещи.
#4 21 марта 2012 в 01:18
но нагрузка же на базу снизится, smile
или вы туда писать будете больше чем читать?
#5 21 марта 2012 в 01:20
Мне необходимо сделать ровно то, что мне необходимо, я вижу по мониторингу, то что нагрузка со стороны mySQL,
кеширование тоже необходимо но прежде важна оптимизация.
#6 21 марта 2012 в 01:37
blandind, уменьшение запросов к базе — это и есть их оптимизация. Меньше запросов — меньше нагрузка. Если же вы не хотите уменьшать количество запросов (сколько их у вас — 80-140 на страницу?), то как ни оптимизируй — при большой посещаемости база будет рушиться. Да и не все запросы можно оптимизировать, большинство и так уже предельно ускорены.

Проблема больше не в плохих запросах, а в их огромном количестве.
#7 21 марта 2012 в 01:40
Я просто как человек знающий, понимаю разницу между уменьшением запросов и их оптимизации, в том числе добавление необходимых индексов и т.п. Просто у Вас достаточно грубо написано, уменьшение, вы хотите сказать, что в InstantCMS — если пользователь — гость,
то посылаются ненужные запросы? Если да, то приведите хотябы пару, чтобы я понимал.
#8 21 марта 2012 в 01:51
blandind, могу предложить другой вариант. Вы как человек знающий может быть быстрее сами поймете — включите на сайте режим отладки. Но перед этим в index.php поставьте условие, чтобы логи запросов выводились только администратору. И посмотрите что получится.

Насчет индексов не вариант — не стоит думать, что разработчики криво их настроили.

вы хотите сказать, что в InstantCMS — если пользователь — гость, то посылаются ненужные запросы

Я бы сказал по-другому: если пользователь-гость, то нет нужды мучить базу данных сотней запросов, хватит и 5.

То, что вы хотите — это хак. Переписывание большого количества запросов только затруднит переход на следующую версию Инстанта, да и на самом деле там очень мало запросов, которые можно как-то ускорить. И это не решит проблему с нагрузкой на базу.
#9 21 марта 2012 в 07:23
Нагрузку на БД можно снизить применением индексов. Но в версии 1.9 индексы уже вроде бы везде есть. В этом плане всё уже проделано и навряд ли получится существенно уменьшить нагрузку. Всё же стоит просмотреть сторонние расширения и таблицы, создаваемые ими. Есть ли индексы.
Пересмотр и переписывание запросов — это тонкая оптимизация. Считайте равно тому, что переписывать по новой компоненты, модули… Возможно где-то придется менять весь алгоритм работы расширения. В последующем как будете обновляться?
Кеширование. Встроенное в смарти кеширование снижает нагрузку, но не в БД. Можно попробовать проверку в контроллере. Подключать шаблонизатор заранее, проверять есть ли кэш и если есть, то не выполнять алгоритм в контроллере. Вариант интересный. Если продумать, то может дать результат.
Кеширование в мускул. Тут надо всё тщательно протестить. И на шаред хостингах не прокатит, насколько я знаю.

Так мысли вслух… Навскидку. Ничего этого пока не делал. Но в будущем стоит подумать. Может кто-то уже попробует smile
#10 21 марта 2012 в 08:59

Я бы сказал по-другому: если пользователь-гость, то нет нужды мучить базу данных сотней запросов, хватит и 5.

SJen
ну хоть разбейся я не знаю, что на такое можно ответить… без конкретики, для меня это вырезание движка, cms это умная структура, где само по себе слово структура говорит о многом, запросы к базе формируются не от балды, а от надобности, запускается контроллер категорий меню, появляется запрос к базе с послед. выборкой и выводом, если посчитать там на главной странице 8 важнейших запроса к базе + скрытые запросы на проверку авторизированности пользователя, запрос на продление сессии… Каким образом вы до 5 хотите уменьшить? И что, у меня меню выводиться не будет?
#11 21 марта 2012 в 10:04
Они похоже сами не знают чего они хочут!
#12 21 марта 2012 в 12:05

ну хоть разбейся я не знаю, что на такое можно ответить… без конкретики

blandind, какой конкретики вы от меня хотели в два часа ночи?) Да и вы же сами написали. что разбираетесь в запросах — а даже беглый взгляд на лог запросов расскажет вам достаточно обо всех недостатках и минусах системы, а так же подскажет направление для оптимизации...

Попробую объяснить, но конкретные запросы не пишу. Представьте, что 30 человек(гостей) заходят на главную страницу в интервале 10 минут, что они должны увидеть? — логично, что одно и то же. Страница скорей всего не изменилась. Даже если появился новый комментарий или какое-то действие в Ленте активности, нет ничего страшного если гости увидят это с некоторым опозданием.

Так вот, все эти 30 человек нещадно дергают mysql, получается грубо порядка 3 тысяч запросов(100 на человека). Моя мысль заключается в том, что можно первому сформировать и открыть страницу, совершив 100 запросов, а остальным 9 посетителям показать то же самое, загрузив этот контент из файла. Поберечь тем самым наш сервер от необязательной нагрузки.

Если для гостей выдавать страницы с некоторой задержкой, то мы получим значительное ускорение. Весь вопрос в грамотной реализации.

У себя я еще сделал оптимизацию для юзеров — при каждом открытии страницы идут запросы на количество компонентов, модулей, плагинов, фильтров… Запросы, которые получают позиции модулей и проверяют права юзера для просмотра модуля. Учитывая, что такая информация (количество модулей, компонентов, плагинов) не так часто меняются на сайте — можно не мучить базу данных при каждом открытии страницы. А включить кэширование конкретно для результатов этих запросов.

Я сам готовлю движок для высоконагруженного проекта, очень-очень высоконагруженного glasses

ЗЫ и отвечу на это

И что, у меня меню выводиться не будет?

Если вы не меняете пункты меню ежеминутно, то есть смысл не пересчитывать его при каждом открытии, количество пунктов меню — эта статическая информация — раз в 10 минут обновляем и отдаем юзерам в готовом виде.
#13 22 марта 2012 в 23:23
Вот то о чём ты писал в начале поста верно, чтобы все базу не дёргали — нужно кешировать рез-ты, но грамотно, чтобы после изменения данных кеш обновлялся, а значит должны ведь и изменения в коде изменяющих модулей производить?

Короче говоря, как связаться с тобой, чтобы приступить к доработке?
Нужно учесть что в движке много изменений, поэтому варианты подмены конкретных файлов не покатит, нужно все файлы в которые ты
будешь вносить изменения пробивать вручную.
#14 23 марта 2012 в 15:05
blandind, ради интереса на будущее — можно узнать — параметры "оборудования", на котором сейчас находиться проект и среднее количество он-лайн за неделю пользователей?
#15 23 марта 2012 в 22:57
Madmax, для проекта на сервере выделен VDS с параметрами 1500 Mhz и память 3072/1024 Мб, сайт пока новый, до этого был на shared хостинге, как правило хостеры вынуждают уйти от них или повысить на дорогостоящий проект, здесь же есть возможность при надобности отконфигурировать сервер индивидуально под проект.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.