0 Пользователей и 1 Гость просматривают эту тему.
  • 7 Ответов
  • 555 Просмотров
*

Shushpan4ik

  • Новичок
  • 4
  • 0 / 0
Имеется сайт, за несколько лет уже накопилось более 30 тыс статей. Из них есть две категории около 10 тыс в каждой новостей.
В последнее время при добавлении материала или обновлении новостей в базе стали висеть запросы по 20-30 секунд в количестве около 100 штук (заняты все php-fpm процессы).

Запросы примерно такого вида:
Спойлер
[свернуть]

Методом исключения пришли к выводу, что такие запросы делает модуль mod_articles_latest (Последние новости), который на главной странице показывает ленту. Лимит в запросе как раз совпадает с числом новостей в ленте. Сразу скажу ACL выключать прорбовал (a.access в запросе) - разницы нет. Запрос появляется именно в момент выкладки, при обычном просмотре такие запросы есть, но пролетают меньше чем за секунду. При выключении данного мордуля запросов нет, но без него нельзя.

Куда копать или что делать? Может кто сталкивался с таким?

Ресурсов на сервере достаточно, 100% загрузки в этот момент нет. Общий обьем базы MySQL около 500Мб. Увеличить число процессов php-fpm не вариант, он так же забиваются этим запросом.
*

NewUsers

  • Живу я здесь
  • 2307
  • 214 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
У каждого запроса есть стек вызовов. Найди запрос который больше всего повторяются и найди от куда идет вызов. Да и к тому же сам модуль mod_articles_latest, не может создавать столько запросов, а значит это делает что то другое...
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

Shushpan4ik

  • Новичок
  • 4
  • 0 / 0
У каждого запроса есть стек вызовов. Найди запрос который больше всего повторяются и найди от куда идет вызов. Да и к тому же сам модуль mod_articles_latest, не может создавать столько запросов, а значит это делает что то другое...
Это необходимо включать режим отладки Joomla? Не скажется на производительности сайта он?
*

NewUsers

  • Живу я здесь
  • 2307
  • 214 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Это необходимо включать режим отладки Joomla?
Да
Не скажется на производительности сайта он?
Не надо включить отладку на долго, достаточно выяснить что надо и выключить.
Если посещаемость сайт есть, но лучше включить отладку только для админа...
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

Shushpan4ik

  • Новичок
  • 4
  • 0 / 0
Если посещаемость сайт есть, но лучше включить отладку только для админа...
Сайт живой да. Не подскажите как включить только для админа? Сайт без регистрации, кроме админов и редакторов никто не логинится в нем. Стандартная отладка не будет выводить сообщения для анонимов?
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Найдите системный плагин debug и в его настройках укажите необходимую группу.
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Конкретно по вашей проблеме: Это происходит по той причине, что когда Вы добавляете материал в базу, он должен перестроить всю таблицу и индексы. Пока этот процесс происходит, все обновляемые таблицы блокируются и любые запросы к ним ждут завершения операции.
Из вариантов решения, это оптимизация запросов и структуры базы данных.
Либо можно создать вторую базу данных, из которой будут только считываться данные. Не уверен, как это в Joomla будет просто реализовать, но можете поискать в сторону репликации базы данных.
*

Shushpan4ik

  • Новичок
  • 4
  • 0 / 0
Конкретно по вашей проблеме: Это происходит по той причине, что когда Вы добавляете материал в базу, он должен перестроить всю таблицу и индексы. Пока этот процесс происходит, все обновляемые таблицы блокируются и любые запросы к ним ждут завершения операции.
Из вариантов решения, это оптимизация запросов и структуры базы данных.
Либо можно создать вторую базу данных, из которой будут только считываться данные. Не уверен, как это в Joomla будет просто реализовать, но можете поискать в сторону репликации базы данных.
Реплику то поднять не вопрос. Но переписывать Joomla ради этого не хочется. Да и собственно в базе много слотов еще для подключений.

Меня еще  больше смущает что 100 дочерних php-fpm процессов заняты только этими запросами. Было бы идеально чтобы Joomla не использовал все доступные ресурсы только на добавление статей, задержка в пару минут при публикации новости тут не критична. Была идея поднять реплику самого вебсервера (это виртуальный сервер, база на другом), типа админ заблокировал себе php-fpm на одном, а юзеры заходят на второй сервер где php-fpm свободен. Но тут вопрос в синхронизации кода и ресурсов images/media..

Отладку пока не включал, вечером попробую когда мало запросов пользователей и никому не помешаю.
« Последнее редактирование: 26.03.2020, 16:54:30 от Shushpan4ik »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод даты материала в списке тегов

Автор androv77

Ответов: 2
Просмотров: 876
Последний ответ 09.11.2023, 16:33:08
от denxio
Вывод дополнительного поля материала в модуле

Автор timofe

Ответов: 10
Просмотров: 1479
Последний ответ 06.10.2023, 14:02:24
от Mitriy
Как сделать отображение времени создания материала?

Автор Pzhigalov

Ответов: 0
Просмотров: 310
Последний ответ 27.09.2023, 22:45:29
от Pzhigalov
[Решено] Получить список тегов каждого материала в блоге категории

Автор goga_pgasovav

Ответов: 1
Просмотров: 393
Последний ответ 02.03.2023, 14:20:21
от goga_pgasovav
ajax загрузка компонента на странице материала К2

Автор Divn

Ответов: 0
Просмотров: 520
Последний ответ 13.01.2023, 15:05:52
от Divn