InnoDB Purge History의 정의 및 역할
InnoDB Purge History는 멀티버전 동시성 제어(MVCC) 구현에서 더 이상 활성 트랜잭션이 필요로 하지 않는 구 행 버전을 언두 로그에서 물리적으로 제거하는 가비지 컬렉션 메커니즘입니다. DELETE 또는 UPDATE 작업 수행 시 즉시 행을 삭제하지 않고, 커밋된 트랜잭션의 언두 레코드가 히스토리 리스트에 누적된 후 퍼지 프로세스에 의해 정리됩니다.
퍼지 작동 원리
DELETE 또는 UPDATE 연산은 구 행 버전을 언두 로그에 기록하고 클러스터드 인덱스 레코드를 삭제로 표시합니다. 각 행 버전은 트랜잭션 ID(trx_id)를 포함하며, 퍼지 코디네이터 스레드는 활성 트랜잭션의 최소 읽기 뷰(purge_sys->view)를 추적합니다. 활성 트랜잭션의 trx_id가 구 버전의 trx_id보다 모두 클 때 퍼지 스레드는 해당 버전을 안전하게 제거할 수 있습니다.
성능 최적화 및 실무 주의점
기본 퍼지 스레드 수는 4개이며, 배치 크기(innodb_purge_batch_size)는 300입니다. 히스토리 리스트 길이가 높으면(수천 이상) 퍼지가 뒤처지고 있음을 나타내므로, 장시간 실행되는 트랜잭션을 반드시 종료해야 합니다. innodb_max_purge_lag를 설정하면 히스토리 크기 초과 시 INSERT/UPDATE/DELETE 작업을 자동으로 지연시켜 퍼지가 따라잡을 수 있게 합니다.