Обсуждение RDS периодически приводит к множеству ожиданий Lock:relation для сессий создания GIN-индекса

Мы периодически наблюдаем, что создание GIN-индекса на post_search_data приводит к множеству блокировок Lock:relations в Performance Insight. Завершение сессии, создающей этот индекс, освобождает все заблокированные сессии. Примечательно, что индекс создается с использованием ключевого слова “concurrently”, которое, по идее, не должно блокировать операции. Также интересно, почему к имени индекса добавляется префикс temp.

CREATE INDEX CONCURRENTLY temp_idx_recent_regular_post_search_data  ON post_search_data USING GIN(search_data) WHERE NOT private_message AND post_id >= 12431619

Я также пытался уменьшить значение idle_in_transaction_session_timeout до 10 минут (изначально оно было установлено на 1 день), но это не дало никакого эффекта. У кого-нибудь было подобная проблема? Если да, то как вы с ней справились?

Наша версия Discourse 2.7.0, версия Postgres — 13.8. Приложение и база данных не работают в Docker, а размещены отдельно (EC2, RDS).

Я не смогу помочь вам с конкретным вопросом, который вы поднимаете, но есть ли причина, по которой вы используете такую старую версию Discourse? Чем дольше вы ждёте, тем выше вероятность столкнуться с проблемами при обновлении. В идеале всегда нужно использовать последнюю версию. Кроме того, обновления иногда включают исправления уязвимостей безопасности.

Я управляю сайтом на ECS с RDS и не заметил никаких проблем, но у меня установлена актуальная версия. Без дополнительных деталей о вашей конфигурации сложно предположить, в чём может быть проблема.

В целом, если у кого-то возникают проблемы с очень старой версией, первое решение — обновить её.

Справедливо. Спасибо за ваш отзыв.