TTL 측정항목 및 모니터링

이 페이지에서는 Spanner TTL(수명) 측정항목을 설명합니다. 자세한 내용은 TTL 정보를 참조하세요.

측정항목

Spanner는 SQL 쿼리에서 읽을 수 있는 시스템 테이블에서 및 Cloud Monitoring을 통해 액세스하는 측정항목으로 TTL 활동에 대한 정보를 제공합니다.

시스템 테이블은 데이터베이스의 테이블당 TTL 정보를 보고하고 Cloud Monitoring은 데이터베이스 수준에서 측정항목을 보고합니다.

SQL 쿼리 사용

Spanner는 TTL과 관련된 정보를 추적하는 기본 제공 테이블을 제공합니다. 테이블 이름은 SPANNER_SYS.ROW_DELETION_POLICIES이며 다음 스키마를 갖습니다.

열 이름 유형 설명
TABLE_NAME STRING 이 TTL 정책이 포함된 테이블의 이름입니다.
PROCESSED_WATERMARK 타임스탬프 이 시간을 기준으로 테이블의 모든 행에 이 정책이 실행되었습니다. 일부 테이블 파티션이 최근에 처리되었을 수 있으므로 이 타임스탬프는 가장 최근에 처리된 파티션을 나타냅니다. 일반적으로 72시간 이내의 파티션입니다.
UNDELETABLE_ROWS INT64 TTL 정책에서 삭제할 수 없는 행 수입니다. 자세한 내용은 삭제할 수 없는 행을 참조하세요.
MIN_UNDELETABLE_TIMESTAMP 타임스탬프 마지막 처리 주기 동안 관찰된 삭제할 수 없는 행의 가장 오래된 타임스탬프입니다.

데이터베이스의 삭제 정책 정보는 테이블별로 반환됩니다.

다음과 유사한 SQL 쿼리를 사용하여 이 데이터를 쿼리할 수 있습니다.

SELECT TABLE_NAME, UNDELETABLE_ROWS
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE UNDELETABLE_ROWS > 0

SQL 인터페이스를 통해서만 SPANNER_SYS 테이블에 액세스할 수 있습니다. 예를 들면 다음과 같습니다.

  • Google Cloud 콘솔의 Spanner 스튜디오 페이지
  • gcloud spanner databases execute-sql 명령어
  • executeQuery API

Spanner가 제공하는 다른 단일 읽기 메서드는 SPANNER_SYS를 지원하지 않습니다.

Cloud Monitoring 사용

Spanner는 데이터베이스 수준에서 TTL 활동을 모니터링할 수 있도록 다음 측정항목을 제공합니다.

  • row_deletion_policy/deleted_rows는 TTL 정책에 의해 삭제된 행 수입니다.
  • row_deletion_policy/undeletable_rows은 행 삭제(GoogleSQL) 또는 TTL INTERVAL(PostgreSQL) 문과 일치하지만 삭제할 수 없는 행 수입니다. 이는 일반적으로 행에 하위 행이 너무 많아서 작업이 Spanner의 트랜잭션 한도를 초과하기 때문입니다.
  • row_deletion_policy/processed_watermark_age는 현재와 마지막 성공 주기에서 사용한 읽기 타임스탬프 사이의 시간입니다(삭제할 수 없는 행 유무와 관계없음).

이러한 측정항목은 Cloud MonitoringGoogle Cloud Console을 통해 제공됩니다.

모니터링

다른 TTL 활동을 모니터링할 수도 있습니다.

마지막으로 성공한 스캔 찾기

Spanner가 만료된 행을 찾는 테이블 스캔을 완료한 마지막 스냅샷 시간을 확인할 수 있습니다. SQL 쿼리로 이 작업을 수행하는 방법은 다음과 같습니다.

SELECT PROCESSED_WATERMARK
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE TABLE_NAME = $name

row_deletion_policy/process_watermark_age 측정항목 역시 유사한 정보를 표시하지만 현재 시간과 마지막 스캔 시간 간의 차이로 표현됩니다. 이 측정항목은 테이블별로 분류되지 않지만 데이터베이스에서 TTL이 사용 설정된 테이블 중 가장 오래된 스캔 시간을 나타냅니다.

TTL 정책과 일치하는 행은 일반적으로 만료일로부터 72시간 이내에 삭제됩니다. 72시간을 초과하면 알림을 받도록 processed_watermark_age알림을 설정할 수 있습니다.

processed_watermark_age가 72시간보다 오래된 경우 우선순위가 높은 태스크가 TTL 실행을 방해하는 것일 수 있습니다. 이 경우 CPU 사용률을 확인하고 필요한 경우 컴퓨팅 용량을 더 추가하는 것이 좋습니다. CPU 사용률이 권장 범위 내에 있는 경우 Key Visualizer를 사용하여 부하 집중을 확인합니다.

삭제된 행 모니터링

테이블에서 TTL 활동을 모니터링하려면 row_deletion_policy/deleted_rows 측정항목을 그래프로 표시합니다. 이 측정항목은 시간 경과에 따라 삭제된 행 수를 표시합니다.

만료된 데이터가 없으면 이 측정항목은 비어 있습니다.

삭제할 수 없는 행 모니터링

TTL에서 행을 삭제할 수 없으면 Spanner가 자동으로 재시도합니다. 재시도 시 TTL 작업을 처리할 수 없으면 Spanner는 행을 건너뛰고 row_deletion_policy/undeletable_rows_count 측정항목으로 보고합니다.

0이 아닌 수에 대한 알림을 받도록 row_deletion_policy/undeletable_rows_count에서 알림을 설정할 수 있습니다.

0이 아닌 수가 발견되면 테이블별로 개수를 세분화하는 쿼리를 만들 수 있습니다.

SELECT TABLE_NAME, UNDELETABLE_ROWS, MIN_UNDELETABLE_TIMESTAMP
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE UNDELETABLE_ROWS > 0

삭제할 수 없는 행의 콘텐츠를 조회하려면 다음을 실행합니다.

SELECT *
FROM $TABLE_NAME
WHERE $EXPIRE_COL >= $MIN_UNDELETABLE_TIMESTAMP

대부분의 경우 행 삭제 실패는 결과 트랜잭션 크기가 Spanner의 변형 제한 초과와 같은 인터리브 처리된 테이블 및 색인에 대한 연쇄적 업데이트로 인해 발생합니다. 별도의 인터리브 처리된 테이블에 TTL 정책을 추가하도록 스키마를 업데이트하여 이 문제를 해결할 수 있습니다.