이 페이지에서는 Spanner에서 제공하는 지연 시간 측정항목을 설명합니다. 애플리케이션의 지연 시간이 길면 이러한 측정항목을 사용하여 문제를 진단하고 해결하세요.
Google Cloud 콘솔 및 Cloud Monitoring 콘솔에서 이러한 측정항목을 볼 수 있습니다.
지연 시간 측정항목 개요
Spanner의 지연 시간 측정항목은 Spanner 서비스에서 요청을 처리하는 데 걸리는 시간을 측정합니다. 이 측정항목은 Spanner에서 사용하는 CPU 시간이 아닌 실제 경과 시간을 캡처합니다.
이러한 지연 시간 측정항목에는 애플리케이션 레이어 내 지연 시간 또는 네트워크 지연 시간과 같은 Spanner 외부에서 발생하는 지연 시간은 포함되지 않습니다. 다른 유형의 지연 시간을 측정하려면 Cloud Monitoring을 사용하여 커스텀 측정항목으로 애플리케이션을 계측하면 됩니다.
Google Cloud 콘솔 및 Cloud Monitoring 콘솔에서 지연 시간 측정항목의 차트를 볼 수 있습니다. 읽기 및 쓰기를 모두 포함하는 결합된 지연 시간 측정항목을 보거나 읽기 및 쓰기에 대한 별도의 측정항목을 볼 수 있습니다.
Spanner는 각 요청의 지연 시간에 따라 요청을 백분위수로 그룹화합니다. 50번째 백분위수 및 99번째 백분위수 지연 시간에 대한 지연 시간 측정항목을 볼 수 있습니다.
- 50번째 백분위수 지연 시간: 모든 요청 중 가장 빠른 50%의 최대 지연 시간(초). 예를 들어 50번째 백분위수 지연 시간이 0.5초인 경우 Spanner에서 0.5초 이내에 요청의 50%를 처리한 것입니다. - 이 측정항목을 중간 지연 시간이라고도 합니다. 
- 99번째 백분위수 지연 시간: 가장 빠른 99% 요청의 최대 지연 시간(초). 예를 들어 99번째 백분위수 지연 시간이 2초인 경우 Spanner에서 2초 이내에 요청의 99%를 처리한 것입니다. 
지연 시간 및 초당 작업 수
인스턴스가 일정 기간 동안 소수의 요청을 처리할 경우 해당 기간 동안의 50번째 및 99번째 백분위수 지연 시간은 인스턴스의 전반적인 성능을 나타내는 유의미한 지표가 아닙니다. 이러한 조건에서는 아주 약간의 이상치로도 지연 시간 측정항목이 대폭 변경될 수 있습니다.
예를 들어 인스턴스가 한 시간 동안 100개의 요청을 처리한다고 가정해보겠습니다. 이 경우 해당 시간 동안 인스턴스의 99번째 백분위수 지연 시간은 가장 느린 요청을 처리하는 데 걸리는 시간입니다. 단일 요청을 기반으로 한 지연 시간 측정은 의미가 없습니다.
지연 시간 문제를 진단하는 방법
다음 섹션에서는 애플리케이션의 긴 엔드 투 엔드 지연 시간을 초래할 수 있는 몇 가지 일반적인 문제를 진단하는 방법을 설명합니다.
인스턴스의 지연 시간 측정항목을 간단히 살펴보려면 Google Cloud console을 사용하세요. 측정항목을 자세히 살펴보고 지연 시간과 다른 측정항목 간의 상관관계를 확인하려면 Cloud Monitoring 콘솔을 사용하세요.
총 지연 시간이 길고 Spanner 지연 시간이 짧은 경우
애플리케이션의 지연 시간이 예상보다 길지만 Spanner의 지연 시간 측정항목은 총 엔드 투 엔드 지연 시간보다 훨씬 짧다면 애플리케이션 코드에 문제가 있을 수 있습니다. 애플리케이션의 성능 문제로 인해 일부 코드 경로가 느려지는 경우 각 요청의 전체 엔드 투 엔드 지연 시간이 늘어날 수 있습니다.
이 문제를 확인하려면 애플리케이션을 벤치마킹하여 예상보다 느린 코드 경로를 식별하세요.
Spanner와 통신하는 코드를 주석 처리한 후 총 지연 시간을 다시 측정할 수도 있습니다. 총 지연 시간이 크게 변경되지 않는다면 Spanner가 긴 대기 시간의 원인이 아닐 가능성이 높습니다.
총 지연 시간이 길고 Spanner 지연 시간도 긴 경우
애플리케이션의 지연 시간이 예상보다 길고 Spanner 지연 시간 측정항목도 길다면 몇 가지 원인이 있을 수 있습니다.
- 인스턴스에 더 많은 컴퓨팅 용량이 필요합니다. 인스턴스에 CPU 리소스가 부족하고 CPU 사용률이 권장 최댓값을 초과할 경우 Spanner에서 요청을 신속하게 효율적으로 처리하지 못할 수 있습니다. 
- 일부 쿼리로 인해 CPU 사용률이 높아지는 경우. 쿼리가 쿼리 매개변수 및 보조 색인와 같은 효율성을 향상시키는 Spanner 기능을 사용하지 않거나 조인 또는 다른 CPU를 많이 사용하는 작업을 다수 포함하고 있으면 인스턴스의 CPU 리소스 중 상당 부분을 사용할 수 있습니다. 
이러한 문제를 확인하려면 Cloud Monitoring 콘솔을 사용하여 높은 CPU 사용률과 긴 지연 시간의 상관관계를 확인하세요. 또한 인스턴스의 쿼리 통계를 확인하여 동일한 기간에 CPU 집약적인 쿼리가 있는지 파악하세요.
CPU 사용률과 지연 시간이 동시에 높다고 판단되면 문제를 해결하기 위한 조치를 취하세요.
- 많은 CPU 집약적 쿼리를 찾지 못한 경우 인스턴스에 컴퓨팅 용량을 추가하세요. - 컴퓨팅 용량을 추가하면 더 많은 CPU 리소스가 제공되고 Spanner에서 더 큰 워크로드를 처리할 수 있습니다. 
- CPU를 많이 사용하는 쿼리를 찾은 경우 쿼리 실행 계획을 검토하여 쿼리가 느려진 이유를 알아본 후 Spanner 관련 SQL 권장사항에 따라 쿼리를 업데이트합니다. - 또한 데이터베이스의 스키마 디자인을 검토하고 보다 효율적인 쿼리를 허용하도록 스키마를 업데이트해야 할 수도 있습니다. 
다음 단계
- Google Cloud console 또는 Cloud Monitoring 콘솔을 사용하여 인스턴스를 모니터링합니다.
- 긴 지연 시간과 다른 측정항목의 상관관계를 확인하는 방법을 알아봅니다.
- SQL 권장사항을 준수하고 타임스탬프 경계를 사용하여 읽기 지연 시간을 단축하는 방법을 이해합니다.
- SQL 문을 사용하여 검색할 수 있는 쿼리 통계 테이블의 지연 시간 측정항목에 대해 알아봅니다.
- 인스턴스 구성이 지연 시간에 미치는 영향을 이해합니다.