어느날 개발DB에서 DB가 read only가 되는 상태가 되어 있는것을 발견
아래 이미지 처럼 to prevent wraparound 가 나타나며 autovacuum을 하고 있는 상태 였다.
to prevent wraparound 는 transaction id가 2억개 넘으면 시작이 된다. 보통은 autovacuum으로 처리가 되는데
아 근데 이게 데이터 들어 오는 속도 보다 autovacuum이 느리게 진행되어 데드라인인 20억건까지 밀리게 되어
결과적으로 DB가 read only상태로 변경이 되었다.
read only상태는 그냥 운영 환경처럼 처리할수가 없다.(vacuum freeze가 아예 안먹고 single mode로 접속하라고 메시지가 나옵니다. )
작업한 순서를 정리해 보면
1. pg_ctl stop => DB down
2. postgresql --single -D test_db => single 모드로 db를 기동시킴
3. vacuum freeze verbose => DB전체 vacuum freeze 수행 (9TB 정도) 3시간 정도 수행이 되었다.
4. pg_ctl start => 작업 완료후 single모드에서 빠져나와 DB start
정상적으로 사용할수 있었습니다. ㅜㅜ
책에서 보던 transaction id wraparound 를 보다니..
Postgresql의 mvcc 특징과 vacuum에 대해서 매우 잘 알게된 계기가 되었다 (본의 아니게 ㅜㅜ)
'Database > Postgresql' 카테고리의 다른 글
[Postgresql]Full Backup & Resotore (0) | 2023.03.28 |
---|