세션모니터링 확인시
autovacuum 테이블명 (to prevent wraparound) 이 수행되고 있다면 해당 테이블의 xid가 재사용 가능하도록 회수가 되나요?
테이블 age가 2억이 넘어서 발생하는 것 같은데요...
테이블 xid 회수되는 vacuum 종류가 아래 4가지인가요?
autovacuum
vacuum 테이블명
vacuum freeze 테이블명
vacuum full 테이블명
모든 사용자가 실행하는 vacuum은 해당 테이블의 나이가 vacuum_freeze_table_age(기본값 1억5천) 값 이상이 되면 prevent wraparound 작업을 합니다.
autovacuum 도 마찬가지인데, insert only 테이블인 경우는 그 테이블의 나이가 그 이상이 되어도 autovacuum 작업 대상이 되지 않기 때문에,
autovacuum_freeze_max_age(기본값 2억) 값 이상 되는 테이블에 대해서는 강제로 모든 테이블에 대해서 트랜잭션ID 겹침 방지 작업을 합니다.
즉, update, delete 작업이 있는 테이블인데, 1억 5천이 넘었고, autovacuum worker가 그 테이블 청소 작업을 하게 된다면,
트랜잭션ID 겹침 방지 작업을 하게됩니다.
그렇지 않고, insert 전용 테이블이었다면, 그 테이블은 2억이 넘어야 방지 작업을 하겠죠.
최신 버전에서 insert 전용 테이블에 대해서도 autovacuum_vacuum_insert_scale_factor 값 만큼(기본값 20%) 자료가 추가 되면, autovacuum이 실행되고,
이 때 테이블 나이가 vacuum_freeze_table_age 이상이라면 트랜잭션ID 겹침 방지 작업을 합니다.