Отправка занимает несколько секунд

У нас 5 млн постов, и поиск работает очень быстро. Хостинг размещён на 6 общих ядрах процессора Xeon E5-2680 с частотой 2,8 ГГц, с 16 ГБ ОЗУ и SSD-накопителем. Однако у меня нет данных о том, сколько одновременных постов инициируют наши пользователи — возможны проблемы с блокировками.

Отправка же постов, напротив, часто занимает довольно много времени. Публикация поста может занимать 6–7 секунд. Но поскольку Discourse работает в неблокирующем режиме, это не портит пользовательский опыт.

Это… не нормально.

Я думаю, что это, скорее всего, так для любой темы с сотнями или тысячами сообщений. В коротких темах такого быть не должно.

Я помню, что на форуме @Wingtip есть множество очень длинных тем.

Да, безусловно.

Специфичны ли времена отправки постов 6–7 секунд именно для мега-тем? Если вы отвечаете на тему с 100 сообщениями, это тоже занимает 6–7 секунд?

Сейчас мне не удалось воспроизвести проблему — медленная отправка происходит периодически. Похоже, это не связано с количеством постов в теме. Возможно, это проблема блокировки, когда кто-то другой публикует сообщение одновременно, или что-то в этом роде.

7 постов = очень быстро, примерно так же, как здесь на meta
500 постов = возможно, немного медленнее, но не критично. Может, 1,5 секунды?
16 тыс. постов = кажется, примерно так же, как с 500 постами

И я считаю, что производительность также страдает, если множество людей обращаются к мега-теме, что замедляет работу всего сервера PG из-за очереди запросов.

Это логично — расставлять приоритеты в пользу опыта множества людей, просматривающих тред, а не одного-двух, пытающихся опубликовать сообщение.

Как вы себя чувствуете — достаточно смелы? Не возражаете, если на время включим mini_profiler? Это покажет время выполнения запросов сбоку, и мы сможем определить, какой именно запрос у вас работает некорректно!

Мой пост здесь занял 576 мс

Самый медленный запрос:

А @riking работает над PR, который исправит эту проблему :confetti_ball:

Насколько сильно включение этой функции влияет на общую производительность? И можно ли её включить без пересборки сайта? Мне не удаётся успешно выполнить пересборку после перехода на PostgreSQL 12, даже при настройке на использование pg10.

Вам нужно указать адрес электронной почты разработчика в файле app.yml. Вы можете применить изменения без пересборки, удалив и перезапустив контейнер. Если вы вносили изменения в контейнер, обновляя его с помощью discourse docker, они будут утеряны.

Вы также можете отредактировать файл config/discourse.conf внутри контейнера, а затем выполнить:

  sv restart unicorn

Учитывая, что пересборки не удаются, я беспокоюсь, что, уничтожив контейнер, окажусь в тупике. Вчера при попытке обновления до PostgreSQL 12 возникло столько ошибок, что я не чувствую себя комфортно, внося изменения, пока не буду уверен, что не выведу сайт из строя на длительный срок.

Что ж, бесплатные советы стоят ровно столько, сколько вы за них заплатили, но вполне безопасно выполнить:

cd /var/discourse
./launcher enter app
vi config/discourse.conf
# в vi отредактируйте строку developer_emails, указав свой адрес электронной почты, и выйдите из vi
sv unicorn restart
# паникуйте в течение 30–90 секунд, пока веб-сервер перезапускается и начинает отдавать страницы

Тем не менее, вы всё ещё можете что-то сломать таким образом. Я думаю, что можно так испортить файл конфигурации, что Discourse не запустится.

sv restart unicorn сработало, sv unicorn restart — нет.

Я ошибаюсь в обратном порядке примерно в 1/3 случаев. :wink:

Хотя это уже улучшение, ведь раньше я ошибался в половине случаев.

Это то, что вам нужно? Это пост в теме с 16 тысячами сообщений. Время публикации казалось обычным, не особенно медленным.

Вот полный вывод:
https://paste.mozilla.org/f5nJrPag

Это запрос длительностью 2 секунды, поступающий из app/models/user_stat.rb:159:in `update_topic_reply_count’.

Таким образом, это именно то, над чем работает @riking.

Отлично! Любые существенные улучшения времени публикации действительно порадуют наших пользователей — это сейчас самая частая жалоба. Хотя я не сомневаюсь, что вскоре они найдут что-то ещё, на что можно пожаловаться.

Если это хоть немного вас утешит, я тоже жаловался на этот запрос, потому что у меня здесь на Meta так много прочитанных сообщений. Мы тратим время на подсчёт всего при каждом ответе…

При нашем тестовом импорте из другого программного обеспечения у нас была тема с чуть более 200 000 сообщений, и я мог писать в неё без проблем. Вероятно, дело не в размере темы, а в пользователе, который публикует сообщения.