Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Высокая нагрузка от phpBB 3.3

Проблемы с установкой или работой phpBB 3.3.x? Получите помощь здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
digitalfarseer
phpBB 1.2.0
Сообщения: 14
Стаж: 4 года 6 месяцев
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Высокая нагрузка от phpBB 3.3

Сообщение digitalfarseer »

Craftsman писал(а): 10.03.2020 17:29 digitalfarseer,
Вам, как и мне, наверное показалось, потому что
rxu писал(а): 07.02.2020 19:21 phpBB не при делах
У меня нет высокой нагрузки на процессор, нет медленных запросов (очевидно, они просто не попадают в slow.log), но при этом форум еле ворочается. Даже панель администрирования открывается ощутимо дольше, чем на 3.2.8.
digitalfarseer
phpBB 1.2.0
Сообщения: 14
Стаж: 4 года 6 месяцев
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Высокая нагрузка от phpBB 3.3

Сообщение digitalfarseer »

Похоже, что это совпадение и проблема была где-то вне сервера с phpbb. Видимо, доступность сервера для cloudflare была нарушена или btrfs на NAS индексировал новые файлы, из-за чего всё тупило. Ничего не трогал пару часов и всё пришло в норму.
pico
phpBB 1.0.0
Сообщения: 3
Стаж: 4 года 1 месяц

Re: Высокая нагрузка от phpBB 3.3

Сообщение pico »

Пагинация с limit offset для больших таблиц известная и насущная проблема, начиная ещё с phpBB 2.x, решений кучу можно найти, той или иной степени костыльности.
Самый простой вариант, отказаться от offset, добавить поле c позицией поста в топике, и делать выборки оператором сравнения, минусы - нужно перестраивать позиции при изменении/удалении постов в топике начиная с последнего изменённого, что в принципе не так уж страшно, и большого оверхеда не вызывает, т.к. изменяются посты в основном на последних страницах топика, плюсы - увеличение производительности на порядок.

https://www.eversql.com/faster-paginati ... t-is-slow/
https://habr.com/ru/post/44608/
https://dba.stackexchange.com/questions ... iting-them
Craftsman писал(а): 07.02.2020 14:50 SET timestamp=1581073377;
SELECT p.post_id
FROM phpbb_posts p
WHERE p.topic_id = 638997
AND ((p.post_visibility = 1))
ORDER BY p.post_time ASC, p.post_id ASC
LIMIT 28650, 30;
Craftsman писал(а): 07.02.2020 18:47 Там выборка идет так: начиная с 28620 показать 30 записей.
Татьяна5 писал(а): 07.02.2020 21:23 Подобные запросы не должны вешать базу данных. Они лёгкие
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16370
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1745 раз

Re: Высокая нагрузка от phpBB 3.3

Сообщение rxu »

pico писал(а): 21.03.2020 18:55 добавить поле c позицией поста в топике
Это нерабочий вариант (часть причин сами же и указали). Позиция поста в топике - величина непостоянная. Топик может быть разделен, объединен с другим, туда могут быть перенесены посты из другой темы, удалены (причем софтово или безвозвратно), да и вообще позиция поста в топике может поменяться в зависимости от типа сортировки.
Не говоря уже о том, что цитируемый "тяжелый" запрос как раз и представляет из себя выборку по primary index, которым и является post_id, аналогичная которой как раз и приводится в качестве подзапроса по ссылкам на "решение" данной "проблемы".
Другие предложения есть?
Изображение
pico
phpBB 1.0.0
Сообщения: 3
Стаж: 4 года 1 месяц

Re: Высокая нагрузка от phpBB 3.3

Сообщение pico »

rxu писал(а): 21.03.2020 19:22 Не говоря уже о том, что цитируемый "тяжелый" запрос как раз и представляет из себя выборку по primary index, которым и является post_id, аналогичная которой как раз и приводится в качестве подзапроса по ссылкам на "решение" данной "проблемы".
Информация по ссылкам не только проблему индексов затрагивает, но и большие offset также.

SELECT **id** FROM **table** LIMIT 100 OFFSET 2500000
Если вы используете LIMIT и OFFSET следующим образом, MySQL обрабатывает запрос так, как если бы вы сказали (в данном случае) LIMIT 250100, а затем просто отбрасывает (то есть не возвращает Вам) первые 2500000 строк. Это не эффективный способ.

Чудес не бывает, software architecture это всегда trade-off, нужно чем-то жертвовать, в данном случае размениваем performance на flexibility.

Вообще пересчёт позиции можно прозрачно для веб-приложения реализовывать, той-же триггерной процедурой при изменении данных в СУБД.
https://postgrespro.ru/docs/postgresql/ ... ql-trigger

Хорошего варианта имплементации классической пагинации без offset для больших таблиц с дырами с возможностью запроса любой страницы я увы предложить нем могу, есть алгоритмы без механизма offset, но это всё костыли ещё большие :(
pico
phpBB 1.0.0
Сообщения: 3
Стаж: 4 года 1 месяц

Re: Высокая нагрузка от phpBB 3.3

Сообщение pico »

Без изменения структуры БД можно самые простые оптимизации делать
Как это имплеметировано у «конкурентов» например https://github.com/SimpleMachines/SMF2. ... y.php#L866
  1. Определение наиболее выгодного смещения, сначала или с хвоста
  2. Использование сессий для хранения стейта пагинации юзера
  3. Снижение больших оффсетов кешированием и использование индекса
https://ruhighload.com/%d0%9f%d0%be%d1% ... 0%b2+mysql

Вернуться в «Поддержка phpBB 3.3.x»