У меня нет высокой нагрузки на процессор, нет медленных запросов (очевидно, они просто не попадают в slow.log), но при этом форум еле ворочается. Даже панель администрирования открывается ощутимо дольше, чем на 3.2.8.
Высокая нагрузка от phpBB 3.3
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение

-
- phpBB 1.2.0
- Сообщения: 14
- Стаж: 5 лет 6 месяцев
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Re: Высокая нагрузка от phpBB 3.3
-
- phpBB 1.2.0
- Сообщения: 14
- Стаж: 5 лет 6 месяцев
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Re: Высокая нагрузка от phpBB 3.3
Похоже, что это совпадение и проблема была где-то вне сервера с phpbb. Видимо, доступность сервера для cloudflare была нарушена или btrfs на NAS индексировал новые файлы, из-за чего всё тупило. Ничего не трогал пару часов и всё пришло в норму.
-
- phpBB 1.0.0
- Сообщения: 3
- Стаж: 5 лет 1 месяц
Re: Высокая нагрузка от phpBB 3.3
Пагинация с 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
Самый простой вариант, отказаться от 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;
-
- phpBB Guru
- Сообщения: 16947
- Стаж: 18 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 549 раз
- Поблагодарили: 1700 раз
Re: Высокая нагрузка от phpBB 3.3
Это нерабочий вариант (часть причин сами же и указали). Позиция поста в топике - величина непостоянная. Топик может быть разделен, объединен с другим, туда могут быть перенесены посты из другой темы, удалены (причем софтово или безвозвратно), да и вообще позиция поста в топике может поменяться в зависимости от типа сортировки.
Не говоря уже о том, что цитируемый "тяжелый" запрос как раз и представляет из себя выборку по primary index, которым и является post_id, аналогичная которой как раз и приводится в качестве подзапроса по ссылкам на "решение" данной "проблемы".
Другие предложения есть?
-
- phpBB 1.0.0
- Сообщения: 3
- Стаж: 5 лет 1 месяц
Re: Высокая нагрузка от phpBB 3.3
Информация по ссылкам не только проблему индексов затрагивает, но и большие offset также.rxu писал(а): 21.03.2020 19:22 Не говоря уже о том, что цитируемый "тяжелый" запрос как раз и представляет из себя выборку по primary index, которым и является post_id, аналогичная которой как раз и приводится в качестве подзапроса по ссылкам на "решение" данной "проблемы".
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, но это всё костыли ещё большие

-
- phpBB 1.0.0
- Сообщения: 3
- Стаж: 5 лет 1 месяц
Re: Высокая нагрузка от phpBB 3.3
Без изменения структуры БД можно самые простые оптимизации делать
Как это имплеметировано у «конкурентов» например https://github.com/SimpleMachines/SMF2. ... y.php#L866
Как это имплеметировано у «конкурентов» например https://github.com/SimpleMachines/SMF2. ... y.php#L866
- Определение наиболее выгодного смещения, сначала или с хвоста
- Использование сессий для хранения стейта пагинации юзера
- Снижение больших оффсетов кешированием и использование индекса