TTL(수명) 개요

TTL(수명)을 사용하면 Spanner 테이블에서 주기적으로 데이터를 삭제하는 정책을 설정할 수 있습니다. 불필요한 데이터 삭제:

  • 저장용량 및 백업 비용을 절감합니다.
  • 데이터베이스가 쿼리를 위해 스캔해야 하는 행의 수를 줄여 쿼리 성능이 향상될 수 있습니다.
  • 특정 데이터 유형에서 보관 기간을 제한하는 규제나 업계 기준을 준수하는 데 도움이 됩니다.

TTL은 정기적인 정리 활동에 적합합니다. 백그라운드에서 계속 실행되며 적격한 데이터를 주기적으로 일괄 삭제합니다. 데이터는 일반적으로 만료일로부터 72시간 이내에 삭제됩니다. TTL은 삭제 대상이 되어도 데이터를 즉시 무효화하거나 쿼리에서 숨기지 않습니다. 또한 TTL은 삽입되는 동안에도 데이터를 확인하지 않으므로, 만료된 타임스탬프가 있는 행을 삽입하는 것을 차단하지 않습니다.

TTL은 다른 데이터베이스 활동에 미치는 영향이 최소화되도록 설계되었습니다. 최종 사용자 쿼리보다 작업을 보다 효율적으로 병렬화하고 엔드 투 엔드 정리를 보장하는 재시도 로직을 포함합니다.

또 다른 백그라운드 압축 프로세스는 일반적으로 7일 이내에 삭제된 행에서 스토리지를 재확보합니다.

TTL 작동 방식

데이터베이스 스키마에서 행 삭제 정책을 정의하여 Spanner 테이블에 Spanner에서 불필요한 데이터를 주기적으로 삭제할 수 있게 해주는 TTL을 설정할 수 있습니다. 각 테이블에는 자체 정책이 있을 수 있습니다. 테이블당 TTL 정책 하나만 지정할 수 있습니다. GoogleSQL 언어 데이터베이스 및 PostgreSQL 언어 데이터베이스에 서로 다른 TTL을 설정합니다.

GoogleSQL을 사용하는 TTL

GoogleSQL을 사용하는 경우 타임스탬프간격을 지정하여 행 삭제 정책을 정의해 행을 삭제할 수 있는 시점(예: 최종 업데이트 날짜 + 30일)을 결정합니다.

백그라운드 시스템 프로세스는 매일 적격한 행을 확인합니다. 내부에서 데이터가 저장되는 위치에 가깝게 실행되는 배치의 실제 삭제를 병렬 처리합니다. 각 배치는 일관된 타임스탬프에서 자체 트랜잭션으로 실행됩니다. 따라서 색인 및 인터리브 처리된 하위 요소와 함께 지정된 특정 배치의 행은 원자적으로 삭제됩니다. 그러나 일괄 삭제는 서로 다른 트랜잭션에서 수행됩니다.

이는 비동기 백그라운드 프로세스이므로 자격 요건과 삭제 시점 사이에 지연이 발생합니다. 일반적으로 지연 시간은 72시간 미만입니다. 따라서 TTL이 만료된 후 최대 3일 동안 행이 테이블에 유지될 수 있습니다. 예를 들어 4일보다 오래된 행을 삭제하는 행 삭제 정책이 있는 테이블에는 최대 7일 전 행과 삭제 불가능한 행이 포함될 수 있습니다.

GoogleSQL 행 삭제 정책을 만드는 방법에 대한 단계별 안내는 TTL 정책 만들기를 참조하세요.

PostgreSQL에서 TTL

PostgreSQL을 사용하는 경우 데이터베이스 소유자는 CREATE TABLE 또는 ALTER TABLE 문의 TTL INTERVAL 절을 사용하여 행 삭제 정책을 정의할 수 있습니다.

PostgreSQL 테이블에 행 삭제 정책을 설정하려면 테이블에 데이터 유형이 TIMESTAMPTZ인 열이 있어야 합니다. TTL INTERVAL 절은 이 열을 사용하여 행을 삭제할 수 있는 간격 사양을 설정합니다.

절은 일 단위로 평가되어야 합니다. 예를 들어 '3 DAYS'는 허용되며 '4 DAYS 2 MINUTES - 2 MINUTES'도 허용되지만 '4 DAYS 3 MINUTES'는 허용되지 않으며 오류가 반환됩니다. 음수를 사용할 수 없습니다.

TTL 가비지 컬렉션은 계속해서 삭제 가능한 행을 백그라운드에서 삭제합니다. 이는 비동기 백그라운드 프로세스이므로 자격 요건과 삭제 시점 사이에 지연이 발생합니다. 이 테이블에는 TTL 삭제에 적합하지만 아직 TTL이 완료되지 않은 행이 포함될 수 있습니다. 일반적으로 지연 시간은 72시간 미만입니다.

PostgreSQL 행 삭제 정책을 만드는 방법은 TTL 정책 만들기를 참조하세요.

백업 및 TTL

백업 복원

백업에서 데이터베이스를 복원하면 소스 데이터베이스에 구성되었던 행 삭제 정책이 자동으로 삭제됩니다. 이렇게 하면 백업이 복원되는 즉시 Spanner가 만료된 데이터를 삭제하지 않습니다. 따라서 TTL을 수동으로 재구성해야 합니다.

데이터 일관성

백업은 특정 시점(version_time)의 일관된 데이터 스냅샷입니다. 백업에는 TTL을 삭제할 수 있지만 TTL이 아직 완료되지 않은 행이 포함될 수 있습니다. 마찬가지로 Dataflow 내보내기 작업은 고정된 타임스탬프에서 전체 테이블을 읽습니다.

감사

TTL에서는 변경 내역을 통해 삭제를 감사할 수 있습니다. 데이터베이스의 TTL 변경사항을 추적하는 변경 내역 데이터 레코드는 transaction_tag 필드를 RowDeletionPolicy로 설정하고 is_system_transaction 필드를 true로 설정합니다. 그러면 변경 내역 리더가 사용 사례에 따라 모든 TTL 레코드 또는 TTL 레코드를 제외한 모든 레코드를 필터링할 수 있습니다. Beam을 사용하여 트랜잭션 태그별로 필터링에 대한 예시를 참조하세요.