Spanner는 테이블 열에 대한 읽기, 쿼리, 쓰기 작업 통계를 기록하는 기본 제공 테이블을 제공합니다. 열 작업 통계로 다음을 수행할 수 있습니다.
예기치 않은 읽기, 쿼리, 쓰기 트래픽이 있는 열을 식별합니다.
많이 사용되는 열을 식별합니다.
열에 쿼리하거나 쓰는 경우 액세스된 행 수에 관계없이 해당 열의 작업 수가 1씩 증가합니다.
시스템 통계 차트에서 초당 작업 수, API 메서드별 초당 작업 수, 기타 관련 측정항목을 측정하는 측정항목을 사용하여 데이터베이스의 전반적인 사용량을 모니터링할 수 있습니다.
열 작업 통계 액세스
Spanner는 SPANNER_SYS
스키마에서 열 작업 통계를 제공합니다. 다음을 사용하여 SPANNER_SYS
데이터에 액세스할 수 있습니다.
Google Cloud 콘솔에 있는 데이터베이스의 Spanner Studio 페이지
executeSql
또는executeStreamingSql
메서드
Spanner가 제공하는 다음 단일 읽기 메서드는 SPANNER_SYS
를 지원하지 않습니다.
- 테이블의 단일 행 또는 여러 행에서 강력 읽기 수행
- 테이블의 단일 행 또는 여러 행에서 비활성 읽기 수행
- 보조 색인의 단일 행 또는 여러 행에서 읽기
자세한 내용은 단일 읽기 메서드를 참고하세요.
열 작업 통계
다음 표는 특정 기간 동안 열의 읽기, 쿼리, 쓰기 통계를 추적합니다.
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE
: 1분 간격 동안의 작업SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE
: 10분 간격 동안의 작업SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR
: 1시간 간격 동안의 작업
이러한 테이블에는 다음과 같은 속성이 있습니다.
각 테이블에는 테이블 이름에 지정된 길이의 겹치지 않는 시간 간격에 대한 데이터가 포함되어 있습니다.
1분 간격은 매분 정각에 시작하고, 10분 간격은 매시 정각에 시작해서 10분 간격으로 시작하며, 1시간 간격은 매시 정각에 시작합니다.
예를 들어 오전 11시 59분 30초에 SQL 쿼리는 다음 가장 최근 간격에 액세스할 수 있습니다.
- 1분: 오전 11:58:00–11:58:59
- 10분: 오전 11:40:00–11:49:59
- 1시간: 오전 10:00:00~10:59:59
모든 열 작업 통계 테이블의 스키마
열 이름 | 유형 | 설명 |
---|---|---|
INTERVAL_END |
TIMESTAMP |
열 사용 통계가 수집된 시간 간격의 종료 시간입니다. |
TABLE_NAME |
STRING |
테이블 또는 색인의 이름입니다. |
COLUMN_NAME |
STRING |
열 이름입니다. |
READ_COUNT |
INT64 |
열에서 읽은 횟수입니다. |
QUERY_COUNT |
INT64 |
열에서 읽는 쿼리 수입니다. |
WRITE_COUNT |
INT64 |
테이블에 쓰는 쿼리 수입니다. |
IS_QUERY_CACHE_MEMORY_CAPPED |
BOOL |
메모리 부족으로 인해 통계 수집이 제한되었는지 여부입니다. |
변형을 사용하여 데이터베이스에 데이터를 삽입하면 Spanner는 삽입 문으로 액세스되는 테이블마다 WRITE_COUNT
를 1씩 증가시킵니다. 또한 기본 테이블을 스캔하지 않고 색인에 액세스하는 쿼리는 색인에서 QUERY_COUNT
만 증가합니다.
데이터 보관
Spanner는 각 테이블의 데이터를 최소한 다음 기간 동안 보관합니다.
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE
: 이전 6시간을 포함하는 간격SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE
: 지난 4일을 포함하는 간격SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR
: 지난 30일을 포함하는 간격
쿼리 예
이 섹션에는 집계 열 작업 통계를 검색하는 SQL 문의 몇 가지 예시가 포함되어 있습니다. 클라이언트 라이브러리 또는 Google Cloud CLI를 사용하여 이러한 SQL 문을 실행할 수 있습니다.
가장 최근 간격 동안 쓰기 작업이 가장 많은 테이블 열 쿼리
GoogleSQL
SELECT interval_end, table_name, column_name, write_count FROM spanner_sys.column_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.column_operations_stats_minute) ORDER BY write_count DESC;
PostgreSQL
SELECT interval_end, table_name, column_name, write_count FROM spanner_sys.column_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.column_operations_stats_minute) ORDER BY write_count DESC;
가장 최근 간격 동안 쿼리 작업이 가장 많은 열 쿼리
GoogleSQL
SELECT interval_end, table_name, column_name, query_count FROM spanner_sys.column_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.column_operations_stats_minute) ORDER BY query_count DESC;
PostgreSQL
SELECT interval_end, table_name, column_name, query_count FROM spanner_sys.column_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.column_operations_stats_minute) ORDER BY query_count DESC;
지난 6시간 동안의 열 사용량 쿼리
GoogleSQL
SELECT interval_end, read_count, query_count, write_count FROM spanner_sys.column_operations_stats_minute WHERE table_name = "table_name" AND column_name = "column_name" ORDER BY interval_end DESC;
각 항목의 의미는 다음과 같습니다.
table_name
은 데이터베이스의 기존 테이블 또는 색인이어야 합니다.column_name
은 테이블의 기존 열이어야 합니다.
PostgreSQL
SELECT interval_end, read_count, query_count, write_count FROM spanner_sys.column_operations_stats_minute WHERE table_name = 'table_name' AND column_name = 'column_name' ORDER BY interval_end DESC;
각 항목의 의미는 다음과 같습니다.
table_name
은 데이터베이스의 기존 테이블 또는 색인이어야 합니다.column_name
은 테이블의 기존 열이어야 합니다.
지난 14일 동안의 열 사용량 쿼리
GoogleSQL
SELECT interval_end, read_count, query_count, write_count FROM spanner_sys.column_operations_stats_hour WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -14 DAY) AND table_name = "table_name" AND column_name = "column_name" ORDER BY interval_end DESC;
다음을 바꿉니다.
table_name
: 데이터베이스의 테이블 또는 색인 이름입니다.column_name
: 테이블의 열 이름입니다.
PostgreSQL
SELECT interval_end, read_count, query_count, write_count FROM spanner_sys.column_operations_stats_hour WHERE interval_end > spanner.timestamptz_subtract(now(), '14 DAY') AND table_name = 'table_name' AND column_name = 'column_name' ORDER BY interval_end DESC;
다음을 바꿉니다.
table_name
: 데이터베이스의 테이블 또는 색인 이름입니다.column_name
: 테이블의 열 이름입니다.
다음 단계
다른 기본 제공 통계 테이블에 대해 알아봅니다.
Spanner 관련 SQL 권장사항에 대해 자세히 알아보기