액세스 패턴 분석

Google Cloud console의 액세스 패턴 페이지를 사용하여 애플리케이션이 Bigtable에서 데이터를 읽고 쓰는 방식을 시각적으로 분석하거나 Cloud Monitoring API를 프로그래매틱 방식으로 호출하여 기본 액세스 패턴 측정항목을 쿼리할 수 있습니다.

이 문서를 읽기 전에 읽기, 쓰기, 모니터링을 검토하세요.

개요

Bigtable은 수신 데이터 요청을 Cloud Monitoring의 쿼리 유형으로 자동 분류합니다. 워크로드 액세스 패턴은 다양한 쿼리 유형의 조합입니다. 예를 들어 워크로드 액세스 패턴은 포인트 읽기, 짧은 스캔, 포인트 쓰기 쿼리 유형으로 구성될 수 있습니다. Bigtable은 10가지 고유한 쿼리 유형을 정의합니다.

시스템 통계 페이지에는 전체 리소스 사용률이 표시되고 Key Visualizer에는 Bigtable이 row key 범위에 트래픽을 분산하는 방식이 표시되지만 액세스 패턴 페이지에는 클러스터, 테이블, 앱 프로필 수준에서 워크로드를 쿼리 중심으로 분류하여 보여줍니다. 액세스 패턴 페이지를 사용하여 다음 작업을 수행할 수 있습니다.

  • 워크로드 이해: 각 클러스터의 읽기, 쓰기, 읽기-쓰기 쿼리 유형의 비율과 속도를 확인하고 테이블 또는 앱 프로필별로 측정항목을 그룹화합니다.
  • 비효율적인 쿼리 패턴 감지 및 지연 시간 문제 해결:
    • 선택적 필터 또는 가비지 컬렉션을 기다리는 수집되지 않은 셀로 인해 Bigtable이 반환하는 것보다 훨씬 더 많은 행 또는 셀을 스캔하는 희소 읽기 식별
    • 정방향 스캔보다 효율성이 떨어지는 역방향 스캔 모니터링
    • 서버 측 지연 시간 백분위수를 스캔한 행, 반환된 행, 표시된 셀과 비교하여 지연 시간 급증의 원인이 되는 액세스 패턴을 정확히 파악합니다.
  • 기능 채택을 위한 워크로드 식별:
    • Enterprise Plus 버전의 인메모리 등급을 활용할 수 있는 포인트 읽기 양이 많은 테이블 또는 앱 프로필 식별
    • Data Boost 서버리스 컴퓨팅을 사용하여 서빙 트래픽에서 격리할 수 있는 대규모 스캔 또는 일괄 읽기 워크로드 식별

제한사항

Bigtable은 Bigtable용 GoogleSQL 쿼리를 액세스 패턴으로 분류하지 않으며 이러한 쿼리를 행, 셀 또는 바이트 액세스 패턴 측정항목에 포함하지 않습니다. QPS 분포, QPS, 지연 시간 차트에서 SQL 쿼리 및 기타 분류되지 않은 요청은 QUERY_TYPE_UNKNOWN로 표시됩니다.

필요한 역할

Google Cloud 콘솔에서 액세스 패턴 페이지를 보는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 Google Cloud 콘솔에서 액세스 패턴 페이지를 보는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

Google Cloud 콘솔에서 액세스 패턴 페이지를 보려면 다음 권한이 필요합니다.

  • 인스턴스 세부정보 보기: bigtable.instances.get
  • 클러스터, 앱 프로필, 테이블을 나열합니다. bigtable.clusters.list, bigtable.appProfiles.list, bigtable.tables.list
  • 쿼리 모니터링 측정항목: monitoring.timeSeries.list

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

액세스 패턴

애플리케이션에서 Bigtable 클라이언트 라이브러리를 사용하는 경우 클라이언트 라이브러리는 메서드 호출을 Bigtable Data API 요청으로 변환합니다.

Bigtable은 클라이언트 라이브러리 메서드 이름뿐만 아니라 다음 요소를 기반으로 완료된 후 서버에서 들어오는 각 Data API 요청을 분류합니다.

  • 요청 매개변수: 요청이 단일 row key, 여러 row key 또는 행 범위를 타겟팅하는지 여부, 요청이 reversed를 설정하는지 여부, 적용되는 필터
  • 실행 통계: 스캔 및 반환된 행 및 셀 수, 바이트 페이로드

예를 들어 readRow와 같은 단일 행 읽기 메서드를 호출하거나 단일 row key로 readRows를 호출하면 Bigtable은 일반적으로 요청을 포인트 읽기로 분류하며, 이는 인메모리 등급에 적합합니다. 하지만 단일 행 읽기에서 복잡한 필터를 사용하거나 많은 수의 셀을 스캔하는 경우 Bigtable은 이를 희소 읽기, 일괄 읽기 또는 기타 읽기로 분류할 수 있습니다. 반대로 readRows를 호출하여 여러 row key를 읽거나 행 범위를 스캔하는 경우 Bigtable은 요청을 일괄 읽기 또는 스캔으로 분류하며, 이는 인메모리 등급에 적합하지 않습니다.

읽기 평가 순서

단일 ReadRows Data API 요청이 두 개 이상의 카테고리 특성과 일치할 수 있으므로 Bigtable은 다음 순서로 읽기 요청을 평가하고 일치하는 첫 번째 액세스 패턴을 할당합니다.

  1. 포인트 읽기
  2. 짧은 스캔(정방향 스캔) 또는 역방향 짧은 스캔(reversed가 true로 설정된 경우)
  3. 역방향 스캔(reversed이 true로 설정된 나머지 읽기 요청)
  4. 희소 읽기(Bigtable이 다중 키 읽기 또는 필터 제거가 많은 대규모 정방향 스캔을 희소로 플래그 지정하도록 일괄 읽기 전에 평가됨)
  5. 일괄 읽기
  6. 기타 읽기(나머지 ReadRows 요청)

쿼리 유형 정의

다음 표에서는 각 액세스 패턴 카테고리, Monitoring의 해당 query_type 라벨, 적용되는 일반적인 클라이언트 라이브러리 작업 및 기본 Data API 메서드(method 측정항목 라벨), Bigtable에서 요청을 해당 카테고리로 분류하는 방법을 설명합니다. 메서드 이름은 프로그래밍 언어에 따라 다르므로 이 표에는 대표적인 클라이언트 라이브러리 메서드 이름이 나열되어 있습니다. 언어별 코드 샘플은 읽기 예시 및 쓰기 예시를 참조하세요. 단순 필터와 복합 필터에 대한 자세한 내용은 이 문서의 단순 필터와 복합 필터 비교 섹션을 참조하세요.

쿼리 유형 query_type 측정항목 라벨 클라이언트 작업 및 Data API 메서드 분류 기준
포인트 읽기 QUERY_TYPE_POINT_READ

readRow 또는 단일 키 readRows와 같은 단일 행 읽기

Data API: ReadRows

필터 또는 간단한 필터를 사용하지 않는 단일 row key의 정방향 읽기. 스캔 및 반환된 셀 수와 총 응답 크기가 작은 단일 행 한도 내에 유지됩니다.

짧은 스캔 QUERY_TYPE_SHORT_SCAN

행 범위 또는 프리픽스 스캔(예: 단일 범위 또는 프리픽스가 있는 readRows)

Data API: ReadRows

필터 또는 단순 필터를 사용하지 않는 단일 연속 행 범위의 정방향 스캔으로, 스캔 및 반환되는 행과 셀의 수와 총 응답 크기가 작은 제한 범위 내에 유지됩니다.

역방향 짧은 스캔 QUERY_TYPE_REVERSE_SHORT_SCAN

역방향 스캔(예: 단일 범위 또는 프리픽스가 역방향인 readRows)

Data API: ReadRows

필터를 사용하지 않거나 간단한 필터를 사용하고 짧은 스캔과 동일한 제한된 행, 셀, 바이트 한도 내에 있는 단일 연속 행 범위의 역방향 스캔입니다.

역방향 스캔 QUERY_TYPE_REVERSE_SCAN

역방향 스캔(예: 역방향 readRows)

Data API: ReadRows

역방향 짧은 스캔으로 분류되지 않는 모든 역방향 읽기입니다. 예를 들어 짧은 스캔 행, 셀 또는 바이트 한도를 초과하거나, 개별 row key를 지정하거나, 여러 행 범위를 스캔하거나, 복잡한 필터를 사용하는 역방향 스캔입니다.

희소 읽기 QUERY_TYPE_SPARSE_READ

readRow 또는 readRows를 사용하여 수집되지 않은 셀에서 필터링된 읽기 또는 스캔

Data API: ReadRows

필터 제거 또는 가비지 컬렉션을 기다리는 수집되지 않은 셀로 인해 Bigtable이 반환하는 것보다 훨씬 더 많은 행 또는 셀을 스캔하는 정방향 읽기 요청(포인트 읽기, 짧은 스캔, 역방향 스캔 후 평가됨)입니다.

일괄 읽기 QUERY_TYPE_BULK_READ

다중 행 읽기(예: 다중 키 readRows 또는 bulkReadRows) 또는 readRow를 사용하는 대규모 단일 행 읽기

Data API: ReadRows

필터가 없거나 간단한 필터가 있는 하나 이상의 row key를 지정하고, 포인트 읽기 한도를 초과하고(예: 여러 row key를 요청하거나 큰 단일 행을 읽음), 희소 읽기로 적합하지 않은 정방향 읽기입니다.

기타 읽기 QUERY_TYPE_OTHER_READ

readRow 또는 readRows를 사용하는 대규모 범위 스캔, 다중 범위 스캔 또는 필터링된 읽기

Data API: ReadRows

이전 읽기 카테고리와 일치하지 않는 모든 ReadRows 요청(예: 대규모 정방향 범위 스캔, 다중 범위 스캔, row key와 행 범위를 결합하는 요청, 희소로 분류되지 않는 복잡한 필터가 있는 읽기)

포인트 쓰기 QUERY_TYPE_POINT_WRITE

간단한 쓰기, 증분 업데이트 또는 소규모 일괄 쓰기(예: mutateRow 또는 bulkMutateRows)

Data API: MutateRow, MutateRows

단일 행 MutateRow 요청 또는 작은 총 바이트 페이로드로 소수의 행과 셀을 수정하는 작은 MutateRows 일괄 요청입니다.

기타 쓰기 QUERY_TYPE_OTHER_WRITE

대규모 일괄 쓰기 또는 대규모 단순 쓰기(예: bulkMutateRows 또는 mutateRow)

Data API: MutateRow, MutateRows

더 큰 일괄 쓰기 또는 많은 수의 변형이나 바이트 페이로드가 있는 쓰기와 같이 포인트 쓰기 한도를 초과하는 모든 MutateRow 또는 MutateRows 요청입니다.

읽기-쓰기 QUERY_TYPE_READ_WRITE

조건부 쓰기 또는 추가(예: checkAndMutateRow 또는 readModifyWriteRow)

Data API: CheckAndMutateRow, ReadModifyWriteRow

페이로드 크기에 관계없이 모든 조건부 쓰기(CheckAndMutateRow) 또는 원자적 증분 또는 추가(ReadModifyWriteRow) 요청

요청 수 및 지연 시간 측정항목에서 Bigtable은 Bigtable용 GoogleSQL 쿼리와 같은 미분류 요청을 QUERY_TYPE_UNKNOWN로 라벨 지정합니다.

단순 필터와 복잡한 필터 비교

포인트 읽기, 짧은 스캔, 역방향 짧은 스캔 또는 일괄 읽기로 간주되려면 ReadRows 요청에서 필터 없음 또는 단순 필터를 사용해야 합니다.

Bigtable은 다음 필터 유형만 단독으로 사용하거나 제한된 chain 필터에 결합하여 사용하는 경우 필터를 단순 필터로 분류합니다. 자세한 내용은 체인을 참고하세요.

  • 필터 없음(FILTER_NOT_SET)
  • pass_all_filter 또는 block_all_filter
  • column_range_filter, column_qualifier_regex_filter 또는 family_name_regex_filter
  • cells_per_column_limit_filter, cells_per_row_limit_filter 또는 cells_per_row_offset_filter
  • timestamp_range_filter

Bigtable은 요청이 다음 목록에 없는 필터 유형을 사용하거나 많은 수의 필터를 연결하는 경우 모든 ReadRows 요청을 복잡한 필터를 사용하는 것으로 처리합니다.

  • value_regex_filter
  • value_range_filter
  • row_key_regex_filter
  • row_sample_filter
  • interleave
  • condition
  • sink
  • strip_value_transformer
  • apply_label_transformer

Bigtable은 reversed가 true인 경우 이러한 요청을 역방향 스캔으로 분류하고, 그렇지 않으면 희소 읽기(반환하는 것보다 훨씬 더 많은 행 또는 셀을 스캔하는 경우) 또는 기타 읽기로 분류합니다.

액세스 패턴 보기

Google Cloud 콘솔의 액세스 패턴 페이지를 인스턴스 수준 또는 클러스터 수준에서 볼 수 있습니다.

인스턴스의 액세스 패턴 보기

  1. Google Cloud 콘솔에서 Bigtable 인스턴스 목록을 엽니다.

    인스턴스 목록 열기

  2. 측정항목을 보려는 인스턴스를 클릭합니다.

  3. 탐색창의 모니터링 가능성에서 액세스 패턴을 클릭합니다.

  4. 클러스터 목록에서 액세스 패턴을 검사할 클러스터를 선택합니다. 기본적으로 Google Cloud 콘솔은 인스턴스의 첫 번째 클러스터를 선택합니다.

  5. 그룹화 기준 목록에서 차트를 분류하는 방법을 선택합니다.

    • 없음: 모든 차트를 액세스 패턴별로 분류하는 기본 옵션입니다(예: QUERY_TYPE_POINT_READ).
    • 앱 프로필: 애플리케이션 프로필 ID와 액세스 패턴 모두를 기준으로 모든 차트를 분류합니다.
    • 테이블: 테이블 ID와 액세스 패턴을 기준으로 모든 차트를 분류합니다.
  6. 선택사항: 기간을 변경하거나 자동 새로고침을 전환하려면 기간 선택기를 사용합니다.

클러스터의 액세스 패턴 보기

  1. Google Cloud 콘솔에서 Bigtable 인스턴스 목록을 엽니다.

    인스턴스 목록 열기

  2. 측정항목을 보려는 인스턴스를 클릭합니다.

    인스턴스 개요 페이지가 열립니다.

  3. 클러스터 테이블에서 클러스터 ID를 클릭합니다.

  4. 탐색창에서 액세스 패턴을 클릭합니다. 선택한 클러스터의 측정항목이 페이지에 표시됩니다.

  5. 그룹화 기준 목록에서 차트를 분류하는 방법을 선택합니다.

    • 없음: 모든 차트를 액세스 패턴별로 분류하는 기본 옵션입니다(예: QUERY_TYPE_POINT_READ).
    • 앱 프로필: 애플리케이션 프로필 ID와 액세스 패턴 모두를 기준으로 모든 차트를 분류합니다.
    • 테이블: 테이블 ID와 액세스 패턴을 기준으로 모든 차트를 분류합니다.
  6. 선택사항: 기간을 변경하거나 자동 새로고침을 전환하려면 기간 선택기를 사용합니다.

액세스 패턴 페이지의 차트 및 측정항목

액세스 패턴 페이지에는 다음 측정항목의 차트가 제공됩니다.

측정항목 적용 대상 설명
QPS 분포 클러스터
테이블
앱 프로필

클러스터에 대해 선택한 전체 기간 동안 집계된 초당 요청 수(QPS)의 비율 및 평균 비율로, query_type 및 선택한 그룹화 기준 옵션으로 분류됩니다.

지연 시간 클러스터
테이블
앱 프로필

시간 경과에 따른 서버 측 요청 지연 시간으로, query_type 및 선택한 그룹화 기준 옵션으로 분류됩니다. 차트의 백분위수 메뉴를 사용하여 99번째 백분위수(기본값), 95번째 백분위수, 50번째 백분위수 간에 전환합니다.

QPS 클러스터
테이블
앱 프로필

시간 경과에 따른 초당 요청 비율로, query_type 및 선택한 그룹화 기준 옵션으로 분류됩니다.

반환된 행 클러스터
테이블
앱 프로필

필터를 적용한 후 읽기 및 읽기-쓰기 요청에 대해 Bigtable이 클라이언트에 초당 반환하는 행 수입니다.

스캔된 행 클러스터
테이블
앱 프로필

읽기 및 읽기-쓰기 요청을 처리하는 동안 필터를 적용하기 전에 Bigtable이 초당 읽는 행 수입니다. 스캔된 행을 반환된 행과 비교하면 비효율적인 읽기 필터를 식별하는 데 도움이 됩니다.

수정된 행 클러스터
테이블
앱 프로필

쓰기 및 읽기-쓰기 요청으로 초당 수정된 행 수입니다.

확인된 셀 클러스터
테이블
앱 프로필

필터를 적용하기 전에 읽기 및 읽기-쓰기 요청 중에 Bigtable이 초당 검사하는 셀 수입니다. 여기에는 필터링되거나 가비지 컬렉션을 기다리는 셀이 포함됩니다.

전송된 셀 클러스터
테이블
앱 프로필

필터를 적용한 후 Bigtable이 클라이언트에 초당 반환하는 셀 수입니다. 확인된 셀과 전송된 셀을 비교하면 반환된 각 셀에 대해 많은 셀을 검사하는 읽기 요청을 식별하는 데 도움이 됩니다.

전송 바이트 클러스터
테이블
앱 프로필

초당 반환되는 인코딩된 행 데이터의 바이트 수입니다.

Cloud Monitoring API를 사용하여 이러한 측정항목을 프로그래매틱 방식으로 쿼리하거나, 측정항목 탐색기에서 보거나, 커스텀 대시보드에 추가할 수도 있습니다. bigtable_table 모니터링 리소스의 각 bigtable.googleapis.com/query_type/* 측정항목에는 다음 라벨이 포함됩니다.

  • 리소스 라벨: project_id, instance, cluster, table
  • 측정항목 라벨: query_type, app_profile, method

Monitoring에서 Bigtable 측정항목을 쿼리하는 방법에 대한 자세한 내용은 Monitoring으로 모니터링 및 측정항목을 참조하세요.

액세스 패턴에 따라 워크로드 최적화

액세스 패턴 페이지의 측정항목을 사용하여 다음을 결정할 수 있습니다.

  • 짧은 지연 시간 포인트 읽기를 위해 인메모리 등급 사용 설정: QPS 분포, QPS, 지연 시간 차트에 엄격한 읽기 지연 시간 목표가 있는 테이블 또는 앱 프로필에 대한 QUERY_TYPE_POINT_READ 요청이 대량으로 표시되는 경우 Enterprise Plus 버전에서 사용할 수 있는 인메모리 등급을 사용 설정하는 것이 좋습니다. 테이블 또는 앱 프로필별로 차트를 그룹화하여 가장 큰 이점을 얻을 수 있는 테이블과 워크로드를 식별합니다.
  • Data Boost를 사용하여 대규모 스캔 및 일괄 읽기 격리: 지연 시간에 민감한 서빙 트래픽과 클러스터를 공유하는 QUERY_TYPE_BULK_READ 또는 QUERY_TYPE_OTHER_READ 요청의 대량 또는 주기적인 급증이 관찰되는 경우 앱 프로필로 그룹화하여 스캔 소스를 식별합니다. Data Boost 서버리스 컴퓨팅을 사용하도록 구성된 전용 앱 프로필을 통해 일괄, 보고 또는 분석 읽기를 라우팅하여 대규모 스캔이 CPU 리소스를 두고 서빙 노드와 경쟁하지 않도록 합니다.
  • 필터 오버헤드 감소 및 가비지 컬렉션 조정: QUERY_TYPE_SPARSE_READ 요청 비율이 높거나, 스캔한 행이 반환된 행보다 훨씬 높거나, 확인된 셀이 전송된 셀보다 훨씬 높은 경우 읽기 요청이 Bigtable에서 클라이언트로 반환하지 않는 데이터를 스캔하는 것입니다. 읽기 효율성을 개선하려면 다음을 수행합니다.
    • 값 또는 정규 표현식 필터를 사용하여 행을 삭제하는 대신 읽기 요청에서 row key 범위 또는 프리픽스를 좁힙니다.
    • 애플리케이션에 최신 셀 버전만 필요한 경우 cells_per_column_limit_filter과 같은 셀 한도 필터를 포함합니다. 자세한 내용은 열당 셀 한도를 참조하세요.
    • 만료되거나 오래된 셀 버전이 누적되어 스캔 속도가 느려지지 않도록 가비지 컬렉션 정책을 검토합니다. 자세한 내용은 가비지 컬렉션 개요를 참조하세요.
  • 역방향 스캔을 정방향 스캔으로 대체: 지연 시간이 증가한 QUERY_TYPE_REVERSE_SCAN 또는 QUERY_TYPE_REVERSE_SHORT_SCAN 요청이 자주 발생하는 경우 애플리케이션이 정방향 스캔을 실행할 수 있도록 row key를 설계하는 것이 좋습니다. 자세한 내용은 스키마 설계 권장사항을 참조하세요.

다음 단계