정기적으로 post_search_data에 GIN 인덱스를 생성할 때 성능 인사이트에서 Lock:relations가 대량으로 발생하는 것을 확인했습니다. 해당 인덱스를 생성 중인 세션을 종료하면 모든 차단된 세션이 해제됩니다. 흥미로운 점은 이 인덱스가 “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입니다. 앱과 DB는 도커가 아닌 개별 호스팅(ec2, rds) 환경에서 실행되고 있습니다.