Уважаемые пользователи!
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.2.x? Получите помощь здесь!
Внимание: с 7 ноября 2020 года phpBB Group завершено дальнейшее развитие phpBB версии 3.2, а с 1 августа 2024 года будет прекращена её поддержка.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.

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

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

Производительность

Сообщение istepan »

На форуме более 4-х мл. сообщений.
Разбил таблицу posts на партиции по 1 мл. Дышать стало легче.

Однако была одна тема, где сообщений больше 150 т., там запрос выполнялся более 30 сек.

Конкретно этот:

Код: Выделить всё

SELECT p.post_id
	FROM phpbb_posts p
	WHERE p.topic_id = 50479
		AND p.post_visibility = 1		
	ORDER BY p.post_time DESC, p.post_id DESC
 LIMIT 13;
Проблема в том, что база не может использовать индексы при сортировки, и вынуждена сортировать более 150 т. строк самым медленным алгоритмом.

Саму тему закрыл, сказав чтоб открывали новую. Однако осадочек остался. Как-то хотелось бы оптимизировать форум под большие объемы данных.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16358
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1741 раз

Re: Производительность

Сообщение rxu »

Индексы в таблице постов все на месте?
Изображение
istepan
phpBB 1.4.0
Сообщения: 34
Стаж: 7 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Производительность

Сообщение istepan »

rxu писал(а): 10.05.2017 12:15Индексы в таблице постов все на месте?
Да. Более того добавил "post_time".
По спецификации mysql, индексы в таком запросе не будут задействованы.
http://www.mysql.ru/docs/man/ORDER_BY_optimisation.html
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16358
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1741 раз

Re: Производительность

Сообщение rxu »

istepan писал(а): 10.05.2017 12:19Более того добавил "post_time".
Он там есть по умолчанию.

Отправлено спустя 1 минуту 23 секунды:
istepan писал(а): 10.05.2017 12:19По спецификации mysql, индексы в таком запросе не будут задействованы.
Там такого не сказано. Почему конкретно?
Изображение
istepan
phpBB 1.4.0
Сообщения: 34
Стаж: 7 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Производительность

Сообщение istepan »

rxu писал(а): 10.05.2017 12:36Почему конкретно?
Ниже приведены некоторые случаи, когда MySQL не может использовать индексы, чтобы выполнить ORDER BY (обратите внимание, что MySQL тем не менее будет использовать индексы, чтобы найти строки, соответствующие выражению WHERE):


Сортировка ORDER BY делается по нескольким ключам: SELECT * FROM t1 ORDER BY key1,key2

Сортировка ORDER BY делается, при использовании непоследовательных частей ключа: SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2
Смешиваются ASC и DESC. SELECT * FROM t1 ORDER BY key_part1 DESC,key_part2 ASC
Для выборки строк и для сортировки ORDER BY используются разные ключи: SELECT * FROM t1 WHERE key2=constant ORDER BY key1
Связываются несколько таблиц, и столбцы, по которым делается сортировка ORDER BY, относятся не только к первой неконстантной (const) таблице, используемой для выборки строк (это первая таблица в выводе EXPLAIN, в которой не используется константный, const, метод выборки строк).
Имеются различные выражения ORDER BY и GROUP BY.
Используемый индекс таблицы имеет такой тип, который не обеспечивает сортированного хранения строк (как индекс HASH в таблицах HEAP).
Столбцы индекса могут содержать значения NULL, и используется ORDER BY ... DESC. Это объясняется тем, что в SQL значения NULL всегда сортируются в первую очередь, независимо от того, используется DESC или нет.
rxu писал(а): 10.05.2017 12:36Он там есть по умолчанию.
У меня не было. Мигрировал со второй на 3.1, потом на 3.2.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16358
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1741 раз

Re: Производительность

Сообщение rxu »

Я умею читать.
istepan писал(а): 10.05.2017 12:41Сортировка ORDER BY делается по нескольким ключам
Это? Какие предложения? :)
Изображение
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5278
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 790 раз

Re: Производительность

Сообщение Siava »

Я бы убрал p.post_time DESC из этой строчки

Код: Выделить всё

ORDER BY p.post_time DESC, p.post_id DESC
:roll:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16358
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1741 раз

Re: Производительность

Сообщение rxu »

Siava писал(а): 10.05.2017 12:45Я бы убрал p.post_time
так в phpBB посты выводятся как раз по времени, а не по id, нет?

Отправлено спустя 4 минуты 34 секунды:
И потом, это вряд ли поможет, так как внутри WHERE имеются другие поля, что также помешает использованию индекса.
Изображение
istepan
phpBB 1.4.0
Сообщения: 34
Стаж: 7 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Производительность

Сообщение istepan »

А если сделать подзапросы?
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2208
Стаж: 16 лет 4 месяца
Откуда: Павлодар
Благодарил (а): 5 раз
Поблагодарили: 153 раза

Re: Производительность

Сообщение nissin »

IMHO только если делать сложный индекс по всем полям запроса:

Код: Выделить всё

topic_id
post_visibility
post_time
post_id
Тогда MySQL сможет использовать этот индекс для поиска и сортировки.
Всё повторяется. nurlan.info
kak2z
phpBB 1.4.1
Сообщения: 47
Стаж: 14 лет
Благодарил (а): 2 раза

Re: Производительность

Сообщение kak2z »

Код: Выделить всё

SELECT p.post_id
	FROM phpbb_posts p
	WHERE p.topic_id = 50479
		AND p.post_visibility = 1		
	ORDER BY p.post_time DESC, p.post_id DESC
 LIMIT 13;
непонятно зачем тут сортировка по ID если есть сортировка по времени..
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16358
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1741 раз

Re: Производительность

Сообщение rxu »

Затем, что на загруженных форумах на один штамп времени могут прийтись несколько постов.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16358
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1741 раз

Re: Производительность

Сообщение rxu »

nissin писал(а): 10.05.2017 14:21IMHO только если делать сложный индекс по всем полям запроса
Проблема в том, что запрос формируется динамически. В зависимости от поля сортировки, там могут оказаться и username_clean, и post_time, и post_subject.
Тогда в этот индекс с десяток полей надо добавлять.
Изображение
Аватара пользователя
Sumanai
phpBB 3.0.0 RC5
Сообщения: 1668
Стаж: 9 лет 5 месяцев
Благодарил (а): 257 раз
Поблагодарили: 195 раз

Re: Производительность

Сообщение Sumanai »

rxu писал(а): 11.05.2017 20:17Проблема в том, что запрос формируется динамически
Большинство использует стандартное отображение.
istepan
phpBB 1.4.0
Сообщения: 34
Стаж: 7 лет 3 месяца
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Производительность

Сообщение istepan »

rxu писал(а): 10.05.2017 21:02что на загруженных форумах на один штамп времени могут прийтись несколько постов.
Да, но у них post_id будет все равно уникальный. Там же primary key с авто инкриментом.
В таком случае данную проблем можно решить добавив общий индекс для topic_id и post_visibility, и из ORDER BY убрать post_time.

Попробую.

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