이제 "트랜잭션 ID 랩 어라운드"에 대한 문서를 읽었지만 실제로 이해하지 못하는 것이 있습니다. 문서는 다음 URL입니다. http://www.postgresql.org/docs/9.0/static/routine-vacuuming .html # VACUUM-FOR-WRAPAROUND
23.1.4. 트랜잭션 ID 랩 어라운드 실패 방지
PostgreSQL의 MVCC 트랜잭션 시맨틱은 트랜잭션 ID (XID) 번호를 비교할 수 있는지에 달려 있습니다. 현재 트랜잭션의 XID보다 큰 삽입 XID를 가진 행 버전은 "미래에 있으며"현재 트랜잭션에 표시되지 않아야합니다. 그러나 트랜잭션 ID의 크기 (32 비트)가 제한되어 있기 때문에 (40 억 건 이상의 트랜잭션) 오랫동안 실행되는 클러스터는 트랜잭션 ID 랩 어라운드를 겪을 수 있습니다. XID 카운터는 0으로 줄어 듭니다. 과거는 미래에있는 것으로 보입니다. 즉, 결과가 보이지 않습니다. 요컨대, 치명적인 데이터 손실. (실제로 데이터는 여전히 존재하지만 데이터를 얻을 수 없으면 냉정한 편입니다.)이를 피하려면 적어도 20 억 건의 트랜잭션마다 모든 데이터베이스의 모든 테이블을 진공 청소기로 청소해야합니다.
"트랜잭션 ID 랩 어라운드가 발생할 수 있습니다. XID 카운터가 0으로 줄어 듭니다. 과거에 발생한 모든 갑작스런 트랜잭션은 미래에있는 것으로 보입니다. 즉, 결과가 보이지 않습니다."
누군가 이것을 설명 할 수 있습니까? 데이터베이스가 트랜잭션 ID를 겪은 후에 왜 과거에 있던 트랜잭션이 미래에 나타나는 것처럼 보입니까? 요컨대, postgreSQL이 autovacuum에 의한 트랜잭션 ID 랩핑 후 "데이터 손실"상황에 있는지 알고 싶습니다.
개인적인 견해로는 출력이 64 비트이고 순환되지 않는 txid_current () 함수를 사용하여 현재 트랜잭션 ID를 얻을 수 있습니다. 따라서 xmin으로 알려진 튜플의 삽입 트랜잭션 ID는 얻는 xid보다 신경이 더 큽니다. txid_current () 함수에 의해. PostgreSQL 서버를 종료 한 후 pg_resetxlog 재설정 재설정 트랜잭션 ID를 사용한다는 점을 제외하고. 내가 맞아? 감사