안녕하세요.
postgresql-9.6 버전을 사용하는 고객사에서 유지보수를 하는 엔지니어입니다.
VACUUM FULL ANALYZE VERBOSE 테이블; 명령을 수행 했을 때 아래와 같이 메세지가 출력됩니다.
------------------------------------------------------------------
정보 : "public.테이블" 청소 중
오류 : uncommitted xmin 363232340 from before xid cutoff 369962276 needs to be frozen
-------------------------------------------------------------------
[질문사항]
질문1. 위 로그가 어떤 의미인가요?
uncommitted xmin 363232340 from before xid cutoff 369962276 needs to be frozen.
XID=363232340이 XID=369962276를 참조하기 위해선 XID=369962276을 FROZEN XID로 대체해야합니다. 라는 뜻인가요?
질문2. 해결방법은 VACUUM명령어인가요?
- 해당 문제를 해결하려면 이전버전 튜플의 XID를 Frozen XID로 대체해야하는 걸로 알고 있습니다.
- 트랜잭션 수가 43억개가 도달하고 나서 현재버전튜플이 이전버전 튜플을 참조하기 위해서는 이전버전의 XID를 Frozen XID로 대체하는 것인데 이것에 대한 해결책은 VACUUM명령어가 맞나요?
- VACUUM 명령어를 써야한다면 어떤 명령어를 써야하나요?
- VACUUM; VACUUM FREEZE; 차이가 뭔가요?
질문3. 이전버전튜플의 생성시점(XID=363232340), 이전버전 튜플이 삭제되거나 변경된 시점(XID 369962276) 맞나요?
현재버전의 xid가 363232340이고, 현재버전xid의 이전버전 xid가 369962276 이라는 뜻인가요?
- 제가 이해한건 아래와 같습니다. (맞는지 확인 좀 부탁드립니다.)
STEP ① xid=369962276 시점에 튜플이 생성됨
STEP ② DBMS의 트랜잭션 수가 43억개까지 도달함
STEP ③ DBMS에서 생성되는 트랜잭션 발번 수는 xid=3부터 시작됨
STEP ④ xid=369962276 시점에 생성되었던 튜플이 xid=363232340 시점에 UPDATE나 DELETE가 됨
|