В попытке обновить наш форум я провел чистую установку VPS и восстановление данных в выходные.
Это должно было решить сразу несколько наших проблем:
- Обновить устаревший Ubuntu
- Обновить Discourse
- Перейти на Postgres 15
В целом всё прошло гладко, но после этого я заметил проблемы: процессы Postgres начали бесконтрольно потреблять 100% одного ядра. Количество процессов при этом варьировалось. Я попробовал несколько решений: от полной пересборки до перезапусков. Сейчас запускаю rake db:validate_indexes, который уже работает несколько часов без какой-либо отдачи. Не уверен, делал ли я это раньше и должно ли это выполняться быстрее.
Работа на форуме в целом возможна, но заметно замедлилась. Некоторые длительные задачи, например, загрузка профилей пользователей из наиболее активных, занимают значительно больше времени, чем обычно.
Я почти уверен, что проблемы связаны с базой данных, но мне трудно понять, какие именно.
Скажу сразу: наша база данных довольно огромна — после восстановления и создания индексов её размер составляет около 150 ГБ. Судя по мониторингу процесса восстановления, ошибок не было, и создание индексов, насколько я могу судить, прошло успешно.
Есть ли у кого-то идеи, как с этим справиться? Сейчас запущено 3 процесса Postgres; до перезагрузки, которую я сделал несколько часов назад, их было 6. После восстановления я уже наблюдал использование всех 16 ядер.
РЕДАКТИРОВАНИЕ: Только что заметил, что 3 процесса Sidekiq заняты задачей «indexing categories for search». Не связано ли всё это с перестроением поискового индекса? Если да, можно ли решить это другим способом? При восстановлении на рабочей системе это станет серьёзной проблемой, если производительность будет снижаться в течение нескольких часов или даже дней.


