높은 CPU 사용률 조사

이 페이지에서는 CPU 사용률 측정항목 및 차트와 기타 점검 도구를 사용하여 데이터베이스의 높은 CPU 사용률을 조사하는 방법을 설명합니다.

시스템 또는 사용자 태스크가 높은 CPU 사용률을 초래하는지 확인

Google Cloud 콘솔은 Spanner를 위한 몇 가지 모니터링 도구를 제공하므로 인스턴스의 가장 중요한 측정항목의 상태를 확인할 수 있습니다. 그중 하나가 CPU 사용률 - 합계 차트입니다. 이 차트는 인스턴스 CPU 리소스 사용률에 해당하는 총 CPU 사용률을 태스크 우선순위와 작업 유형별로 분류하여 보여줍니다. 태스크에는 두 가지 유형이 있는데, 이는 읽기 및 쓰기와 같은 사용자 태스크와 압축 및 색인 백필과 같이 자동화된 백그라운드 태스크를 처리하는 시스템 태스크입니다.

그림 1CPU 사용률 - 합계 차트의 예시입니다.

CPU 사용률 예시 - 합계 차트

그림 1. Google Cloud 콘솔의 Monitoring 대시보드에 있는 CPU 사용률 - 합계 차트

Cloud Monitoring에서 CPU 사용량이 크게 증가했다는 알림을 받았다고 가정해 보겠습니다. Google Cloud 콘솔에서 인스턴스의 Monitoring 대시보드를 열고 Cloud 콘솔에서 CPU 사용률 - 합계 차트를 살펴봅니다. 그림 1과 같이 우선순위가 높은 사용자 태스크의 CPU 사용률이 늘어난 것을 볼 수 있습니다. 다음 단계는 이 CPU 사용량의 증가를 가져온 우선순위가 높은 사용자 작업을 확인하는 것입니다.

쿼리 통계 대시보드를 사용해서 시계열에서 이 측정항목과 다른 측정항목을 시각화할 수 있습니다. 이러한 사전 빌드된 대시보드를 사용하면 CPU 사용률 급증을 확인하고 비효율적인 쿼리를 식별할 수 있습니다.

CPU 사용률 급증을 초래하는 사용자 작업 식별

그림 1CPU 사용률 - 합계 차트는 우선순위가 높은 사용자 태스크가 CPU 사용량의 원인임을 보여줍니다.

다음으로 Cloud 콘솔의 작업 유형별 CPU 사용률 차트를 살펴봅니다. 이 차트에서는 사용자가 시작한 작업의 CPU 사용률을 우선순위가 높은 작업, 중간인 작업, 낮은 작업으로 분류하여 보여줍니다.

사용자 시작 작업이란 무엇인가요?

사용자 시작 작업은 API 요청을 통해 시작되는 작업입니다. Spanner는 이러한 요청을 작업 유형 또는 카테고리로 그룹화하며, 각 작업 유형을 작업 유형별 CPU 사용률 차트에 하나의 선으로 표시할 수 있습니다. 다음 표에서는 각 작업 유형에 포함된 API 메서드에 대해 설명합니다.

작업 API 메서드 설명
read_readonly 읽기
StreamingRead
키 찾기 및 스캔을 사용하여 데이터베이스에서 행을 가져오는 읽기가 포함됩니다.
read_readwrite 읽기
StreamingRead
읽기-쓰기 트랜잭션 내의 읽기가 포함됩니다.
read_withpartitiontoken 읽기
StreamingRead
파티션 토큰 집합을 사용하여 수행된 읽기 작업이 포함됩니다.
executesql_select_readonly ExecuteSql
ExecuteStreamingSql
Select SQL 문 실행 및 스트림 쿼리 변경이 포함됩니다.
executesql_select_readwrite ExecuteSql
ExecuteStreamingSql
읽기-쓰기 트랜잭션 내의 문 선택 실행이 포함됩니다.
executesql_select_withpartitiontoken ExecuteSql
ExecuteStreamingSql
파티션 토큰 집합을 사용하여 수행된 선택 문 실행이 포함됩니다.
executesql_dml_readwrite ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
DML SQL 문 실행이 포함됩니다.
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Partitioned DML SQL 문 실행이 포함됩니다.
beginorcommit BeginTransaction
커밋
롤백
시작, 커밋, 롤백 트랜잭션이 포함됩니다.
misc PartitionQuery
PartitionRead
GetSession
CreateSession
PartitionQuery, PartitionRead, 데이터베이스 만들기, 인스턴스 만들기, 세션 관련 작업, 시간이 중요한 내부 제공 작업 등이 포함됩니다.

다음은 작업 유형별 CPU 사용률 측정항목 차트의 예시입니다.

작업 유형별 CPU 사용률 차트의 예시

그림 2. Google Cloud 콘솔의 작업 유형별 CPU 사용률 차트

차트 상단에서 우선순위 메뉴를 사용하여 특정 우선순위로 표시를 제한할 수 있습니다. 그러면 각 작업 유형 또는 카테고리가 선 그래프로 표시됩니다. 차트 아래에 나열된 카테고리로 각 그래프를 식별합니다. 해당하는 카테고리 필터를 선택하거나 선택 해제하여 각 그래프를 숨기거나 표시할 수 있습니다.

또는 아래 설명된 대로 측정항목 탐색기에서 이 차트를 만들 수 있습니다.

측정항목 탐색기에서 작업 유형별 CPU 사용률 차트 만들기

  1. Google Cloud 콘솔에서 Monitoring을 선택하거나 다음 버튼을 사용합니다.

    Monitoring으로 이동

  2. 탐색 창에서 측정항목 탐색기를 선택합니다.
  3. 리소스 유형 및 측정항목 찾기 필드에 spanner.googleapis.com/instance/cpu/utilization_by_operation_type 값을 입력하고 상자 아래에 표시되는 행을 선택합니다.
  4. 필터 필드에 instance_id 값을 입력한 다음 검토할 인스턴스 ID를 입력하고 >적용을 클릭합니다.
  5. 그룹화 기준 필드의 드롭다운 목록에서 category를 선택합니다. 차트에 작업 유형 또는 카테고리별로 그룹화된 사용자 태스크의 CPU 사용률이 표시됩니다.

위 섹션의 우선순위별 CPU 사용률 측정항목은 사용자 또는 시스템 태스크가 CPU 리소스 사용량을 늘리는지 확인하는 데 도움이 되며 작업 유형별 CPU 사용률 측정항목을 통해 이 CPU 사용량 증가를 초래하는 사용자가 시작한 작업의 유형을 자세히 살펴보며 파악할 수 있습니다.

CPU 사용량 증가를 가져온 사용자 요청 식별

그림 2에서 확인한 executesql_select_readonly 작업 유형 그래프에서 CPU 사용률 급증을 초래하는 특정 사용자 요청을 파악하기 위해 기본 제공되는 점검 통계 테이블에서 추가 통계를 얻습니다.

다음 표를 가이드로 사용하여 많은 CPU 사용량이 발생하는 작업 유형을 기준으로 쿼리할 통계 테이블을 결정합니다.

작업 유형 쿼리 읽기 트랜잭션
read_readonly 아니요 아니요
read_readwrite 아니요
read_withpartitiontoken 아니요 아니요
executesql_select_readonly 아니요 아니요
executesql_select_withpartitiontoken 아니요 아니요
executesql_select_readwrite 아니요
executesql_dml_readwrite 아니요
executesql_dml_partitioned 아니요 아니요
beginorcommit 아니요 아니요

예를 들어 read_withpartitiontoken이 문제라면 읽기 통계를 사용하여 문제를 해결합니다.

이 시나리오에서는 executesql_select_readonly 작업이 관찰된 CPU 사용량 증가의 원인으로 보입니다. 위 표에 따라 쿼리 통계를 확인하여 비용이 많이 들거나 자주 실행되거나 많은 데이터를 스캔하는 쿼리를 찾아야 합니다.

이전 시간 동안 CPU 사용량이 가장 많은 쿼리를 찾으려면 query_stats_top_hour 통계 테이블에서 다음 쿼리를 실행합니다.

SELECT text,
       execution_count AS count,
       avg_latency_seconds AS latency,
       avg_cpu_seconds AS cpu,
       execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;

출력에 CPU 사용량별로 정렬된 쿼리가 표시됩니다. CPU 사용량이 가장 많은 쿼리를 식별한 후 다음 옵션을 사용하여 조정할 수 있습니다.

  • 쿼리 실행 계획을 검토하여 CPU 사용률 증가를 초래할 수 있는 잠재적 비효율성을 파악합니다.

  • 쿼리를 검토하여 SQL 권장사항을 따르는지 확인합니다.

  • 데이터베이스 스키마 설계를 검토하고 보다 효율적인 쿼리를 허용하도록 스키마를 업데이트합니다.

  • 간격 동안 Spanner가 쿼리를 실행하는 횟수에 대한 기준을 설정합니다. 이 기준을 사용하면 정상적인 동작 상의 예상치 못한 편차의 원인을 감지하고 조사할 수 있습니다.

CPU 사용량이 많은 쿼리를 찾을 수 없으면 인스턴스에 컴퓨팅 용량을 추가합니다. 컴퓨팅 용량을 추가하면 더 많은 CPU 리소스가 제공되고 Spanner가 더 큰 워크로드를 처리할 수 있습니다. 자세한 내용은 컴퓨팅 용량 늘리기를 참조하세요.

다음 단계