

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Keyspaces의 용량 관리 오류 문제 해결
<a name="troubleshooting.serverless"></a>

서버리스 용량에 문제가 있으신가요? 다음에서는 몇 가지 일반적인 문제와 이에 대한 해결 방법에 대해 설명합니다.

## 서버리스 용량 오류
<a name="troubleshooting-serverless"></a>

이 섹션에서는 서버리스 용량 관리와 관련된 오류를 인식하는 방법과 해결 방법을 설명합니다. 예를 들어 애플리케이션이 프로비저닝된 처리량 용량을 초과하면 용량 부족 이벤트가 관찰될 수 있습니다.

Apache Cassandra는 여러 노드에서 실행되도록 설계된 클러스터 기반 소프트웨어이므로 처리량 용량과 같은 서버리스 기능과 관련된 예외 메시지가 없습니다. 대부분의 드라이버는 Apache Cassandra에서 사용할 수 있는 오류 코드만 이해하므로 Amazon Keyspaces는 호환성을 유지하기 위해 동일한 오류 코드 세트를 사용합니다.

Cassandra 오류를 기본 용량 이벤트에 매핑하려면 Amazon CloudWatch를 사용하여 관련 Amazon Keyspaces 지표를 모니터링할 수 있습니다. 클라이언트 측 오류를 초래하는 용량 부족 이벤트는 이벤트를 일으킨 리소스에 따라 다음 세 그룹으로 분류할 수 있습니다.
+ **테이블** - 테이블에 대해 **프로비저닝된** 용량 모드를 선택했는데 애플리케이션이 프로비저닝된 처리량을 초과하는 경우 용량 부족 오류가 발생할 수 있습니다. 자세한 내용은 [Amazon Keyspaces의 읽기/쓰기 용량 모드 구성](ReadWriteCapacityMode.md) 단원을 참조하십시오.
+ **파티션** - 특정 파티션의 트래픽이 3,000RCU 또는 1,000WCU를 초과하는 경우 용량 부족 이벤트가 발생할 수 있습니다. 트래픽을 파티션 전체에 균일하게 분배하는 것이 가장 좋습니다. 자세한 내용은 [데이터 모델링 모범 사례: 데이터 모델 설계를 위한 권장 사항](data-modeling.md) 단원을 참조하십시오.
+ **연결** - 연결당 초당 최대 작업 수의 할당량을 초과하면 처리량이 부족해질 수 있습니다. 처리량을 늘리려면 드라이버로 연결을 구성할 때 기본 연결 수를 늘릴 수 있습니다.

  Amazon Keyspaces에 대한 연결을 구성하는 방법은 [Amazon Keyspaces에서 연결을 구성하는 방법](connections.md#connections.howtoconfigure) 섹션을 참조하세요. VPC 엔드포인트를 통한 연결 최적화에 대한 자세한 내용은 [Amazon Keyspaces에서 VPC 엔드포인트를 통해 연결을 구성하는 방법](connections.md#connections.VPCendpoints) 섹션을 참조하세요.

클라이언트 측 오류를 반환하는 용량 부족 이벤트를 일으키는 리소스를 확인하려면 Amazon Keyspaces 콘솔에서 대시보드를 확인할 수 있습니다. 기본적으로 콘솔은 테이블의 **용량** 탭에 있는 **용량 및 관련 지표** 섹션에서 가장 일반적인 용량 및 트래픽 관련 CloudWatch 지표를 집계하여 제공합니다.

Amazon CloudWatch를 사용하여 자체 대시보드를 생성하려면 다음 Amazon Keyspaces 지표를 확인합니다.
+ `PerConnectionRequestRateExceeded` - 연결당 요청 속도에 대한 할당량을 초과하는 Amazon Keyspaces에 대한 요청입니다. Amazon Keyspaces에 대한 각 클라이언트 연결은 초당 최대 3000개의 CQL 요청을 지원할 수 있습니다. 여러 연결을 생성하여 초당 3000개 이상의 요청을 수행할 수 있습니다.
+ `ReadThrottleEvents` - 테이블의 읽기 용량을 초과하는 Amazon Keyspaces에 대한 요청입니다.
+ `StoragePartitionThroughputCapacityExceeded` - 파티션의 처리량 용량을 초과하는 Amazon Keyspaces 스토리지 파티션에 대한 요청입니다. Amazon Keyspaces 스토리지 파티션은 초당 최대 1000 WCU/WRU 및 초당 3000 RCU/RRU를 지원할 수 있습니다. 이러한 예외를 완화하려면 데이터 모델을 검토하여 더 많은 파티션에 읽기/쓰기 트래픽을 분산하는 것이 좋습니다.
+ `WriteThrottleEvents` - 테이블의 읽기 용량을 초과하는 Amazon Keyspaces에 대한 요청입니다.

CloudWatch에 대한 자세한 내용은 [Amazon CloudWatch를 사용하여 Amazon Keyspaces 모니터링](monitoring-cloudwatch.md) 섹션을 참조하세요. Amazon Keyspaces에 대한 사용 가능한 모든 CloudWatch 지표 목록은 [Amazon Keyspaces 지표 및 차원](metrics-dimensions.md) 섹션을 참조하세요.

**참고**  
Amazon Keyspaces에서 일반적으로 관찰되는 모든 지표를 보여 주는 사용자 지정 대시보드를 시작하려면 [AWS 샘플](https://github.com/aws-samples/amazon-keyspaces-cloudwatch-cloudformation-templates) 리포지토리의 GitHub에 있는 사전 구축된 CloudWatch 템플릿을 사용할 수 있습니다.

**Topics**
+ [클라이언트 측 오류](#troubleshooting.serverless.clientside)
+ [데이터 가져오는 중 쓰기 제한 시간 오류](#troubleshooting.serverless.writetimeout)
+ [키스페이스 또는 테이블 스토리지 크기](#troubleshooting.serverless.storagesize)

### 클라이언트 드라이버로부터 `NoHostAvailable` 용량 부족 오류가 발생했습니다.
<a name="troubleshooting.serverless.clientside"></a>

**테이블에 대한 `Read_Timeout` 또는 `Write_Timeout` 예외가 표시됩니다.**

용량이 충분하지 않은 상태에서 Amazon Keyspaces 테이블에 반복적으로 쓰거나 읽으려고 하면 드라이버와 관련된 클라이언트 측 오류가 발생할 수 있습니다.

CloudWatch를 사용하여 테이블에 대한 프로비저닝된 처리량 지표와 실제 처리량 지표 및 용량 부족 이벤트를 모니터링할 수 있습니다. 예를 들어 처리량 용량이 충분하지 않은 읽기 요청은 `Read_Timeout` 예외와 함께 실패하고 `ReadThrottleEvents` 지표에 게시됩니다. 처리량 용량이 충분하지 않은 쓰기 요청은 `Write_Timeout` 예외와 함께 실패하고 `WriteThrottleEvents` 지표에 게시됩니다. 이러한 지표에 대한 자세한 내용은 [Amazon Keyspaces 지표 및 차원](metrics-dimensions.md) 섹션을 참조하세요.

문제를 해결하려면 다음 옵션을 고려하세요.
+ 애플리케이션이 소비할 수 있는 최대 처리량 용량인 테이블에 대한 *프로비저닝된 처리량*을 늘립니다. 자세한 내용은 [읽기 용량 단위 및 쓰기 용량 단위](ReadWriteCapacityMode.Provisioned.md#ReadWriteCapacityMode.Provisioned.Units) 단원을 참조하십시오.
+ 자동 크기 조정을 통해 서비스가 사용자 대신 처리량 용량을 관리하도록 합니다. 자세한 내용은 [Amazon Keyspaces 오토 스케일링으로 처리량 용량 자동 관리](autoscaling.md) 단원을 참조하십시오.
+ 테이블에 **온디맨드** 용량 모드를 선택했습니다. 자세한 내용은 [온디맨드 용량 모드 구성](ReadWriteCapacityMode.OnDemand.md) 단원을 참조하십시오.

계정의 기본 용량 할당량을 늘려야 하는 경우 [Amazon Keyspaces(Apache Cassandra용)에 대한 할당량](quotas.md) 섹션을 참조하세요.

**파티션 용량 초과와 관련된 오류가 표시됩니다.**

오류가 표시되면 `StoragePartitionThroughputCapacityExceeded` 파티션 용량이 일시적으로 초과된 것입니다. 이는 적응형 용량 또는 온디맨드 용량으로 자동 처리될 수 있습니다. 이러한 오류를 완화하려면 데이터 모델을 검토하여 더 많은 파티션에 읽기/쓰기 트래픽을 분산하는 것이 좋습니다. Amazon Keyspaces 스토리지 파티션은 초당 최대 1000 WCU/WRU 및 초당 3000 RCU/RRU를 지원할 수 있습니다. 읽기/쓰기 트래픽을 더 많은 파티션에 분산하도록 데이터 모델을 개선하는 방법에 대한 자세한 내용은 [데이터 모델링 모범 사례: 데이터 모델 설계를 위한 권장 사항](data-modeling.md) 섹션을 참조하세요.

동일한 논리적 파티션에 정적 및 비정적 데이터를 포함하는 동시 쓰기 작업의 비율이 높아진 경우에도 `Write_Timeout` 예외가 발생할 수 있습니다. 트래픽이 동일한 논리적 파티션 내에서 정적 및 비정적 데이터를 포함하는 여러 개의 동시 쓰기 작업을 실행할 것으로 예상되는 경우 정적 데이터와 비정적 데이터를 따로 쓰는 것이 좋습니다. 데이터를 별도로 쓰는 것도 처리량 비용을 최적화하는 데 도움이 됩니다.

**연결 요청 속도 초과와 관련된 오류가 표시됩니다.**

다음 원인 중 하나로 인해 `PerConnectionRequestRateExceeded`가 표시됩니다.
+ 세션당 구성된 연결이 충분하지 않을 수 있습니다.
+ VPC 엔드포인트 권한이 올바르게 구성되어 있지 않기 때문에 사용 가능한 피어보다 연결 수가 적을 수 있습니다. VPC 엔드포인트 정책에 대한 자세한 내용은 [Amazon Keyspaces에 인터페이스 VPC 엔드포인트 사용](vpc-endpoints.md#using-interface-vpc-endpoints) 섹션을 참조하세요.
+ 4.x 드라이버를 사용하는 경우 호스트 이름 검증이 활성화되어 있는지 확인합니다. 드라이버는 기본적으로 TLS 호스트 이름 확인을 활성화합니다. 이 구성으로 인해 Amazon Keyspaces가 드라이버에 단일 노드 클러스터로 표시됩니다. 호스트 이름 인증을 끄는 것이 좋습니다.

다음 모범 사례를 따라 연결 및 처리량을 최적화하는 것이 좋습니다.
+ **CQL 쿼리 처리량 조정 구성**

  Amazon Keyspaces는 TCP 연결당 초당 최대 3,000개의 CQL 쿼리를 지원하지만 드라이버가 설정할 수 있는 연결 수에는 제한이 없습니다.

  대부분의 오픈 소스 Cassandra 드라이버는 Cassandra에 연결 풀을 설정하고 연결 풀 전체에 걸쳐 쿼리를 로드 밸런싱합니다. Amazon Keyspaces는 드라이버에게 9개의 피어 IP 주소를 노출합니다. 대부분의 드라이버의 기본 동작은 각 피어 IP 주소마다 하나의 연결을 설정하는 것입니다. 따라서 기본 설정을 사용하는 드라이버의 최대 CQL 쿼리 처리량은 초당 27,000개의 CQL 쿼리입니다.

  이 수를 늘리려면 드라이버가 연결 풀에서 유지 관리하는 IP 주소당 연결 수를 늘리는 것이 좋습니다. 예를 들어 IP 주소당 최대 연결 수를 2로 설정하면 드라이버의 최대 처리량이 초당 54,000개의 CQL 쿼리로 두 배로 늘어납니다.
+ **단일 노드 연결을 최적화합니다.**

  기본적으로 대부분의 오픈 소스 Cassandra 드라이버는 세션을 설정할 때 `system.peers` 테이블에 표시된 모든 IP 주소에 대해 하나 이상의 연결을 설정합니다. 하지만 특정 구성에서는 드라이버가 단일 Amazon Keyspaces IP 주소에 연결될 수 있습니다. 이는 드라이버가 피어 노드(예: DataStax Java 드라이버)의 SSL 호스트 이름 검증을 시도하거나 VPC 엔드포인트를 통해 연결할 때 발생할 수 있습니다.

  여러 IP 주소에 연결할 때 드라이버와 동일한 가용성 및 성능을 얻으려면 다음을 수행하는 것이 좋습니다.
  + 원하는 클라이언트 처리량에 따라 IP당 연결 수를 9개 이상으로 늘립니다.
  + 동일한 노드에서 재시도가 실행되도록 하는 사용자 지정 재시도 정책을 생성합니다. 자세한 내용은 다음 섹션을 참조하세요.

    [Amazon Keyspaces에서 연결에 대한 재시도 정책을 구성하는 방법](connections.md#connections.retry-policies).
  + VPC 엔드포인트를 사용하는 경우 Amazon Keyspaces에 연결하는 데 사용되는 IAM 엔티티에 엔드포인트 및 네트워크 인터페이스 정보에 대한 VPC를 쿼리할 수 있는 액세스 권한을 부여합니다. 이렇게 하면 로드 밸런싱이 개선되고 읽기/쓰기 처리량이 늘어납니다. 자세한 내용은 [인터페이스 VPC 엔드포인트 정보로 `system.peers` 테이블 항목 채우기](vpc-endpoints.md#system_peers) 단원을 참조하십시오.

### 데이터를 가져오는 동안 쓰기 제한 시간 오류가 발생함
<a name="troubleshooting.serverless.writetimeout"></a>

** `cqlsh` `COPY` 명령을 사용하여 데이터를 업로드할 때 제한 시간 오류가 발생합니다.**

```
Failed to import 1 rows: WriteTimeout - Error from server: code=1100 [Coordinator node timed out waiting for replica nodes' responses]
 message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 2, 'write_type': 'SIMPLE', 'consistency': 
 'LOCAL_QUORUM'}, will retry later, attempt 1 of 100
```

Amazon Keyspaces는 처리량 용량이 충분하지 않아 쓰기 요청이 실패하는 경우를 나타내기 위해 `ReadTimeout` 및 `WriteTimeout` 예외를 사용합니다. 용량 부족 예외를 진단하는 데 도움이 되도록 Amazon Keyspaces는 Amazon CloudWatch에 다음 지표를 게시합니다.
+ `WriteThrottleEvents`
+ `ReadThrottledEvents`
+ `StoragePartitionThroughputCapacityExceeded`

데이터 로드 중 용량 부족 오류를 해결하려면 작업자당 쓰기 속도 또는 총 수집 속도를 낮춘 다음 행 업로드를 다시 시도합니다. 자세한 내용은 [4단계: `cqlsh COPY FROM` 설정 구성](bulk-upload-config.md) 단원을 참조하십시오. 보다 강력한 데이터 업로드 옵션을 원한다면 [GitHub 리포지토리](https://github.com/datastax/dsbulk)에서 제공되는 DSBulk를 사용해 보세요. 단계별 지침은 [자습서: DSBulk를 사용하여 Amazon Keyspaces에 데이터 로드](dsbulk-upload.md)섹션을 참조하세요.

### 키스페이스 또는 테이블의 실제 스토리지 크기를 볼 수 없음
<a name="troubleshooting.serverless.storagesize"></a>

**키스페이스 또는 테이블의 실제 스토리지 크기를 볼 수 없습니다.**

테이블의 스토리지 크기에 대한 자세한 내용은 [테이블 수준에서 비용 평가](CostOptimization_TableLevelCostAnalysis.md) 섹션을 참조하세요. 테이블의 행 크기 계산을 시작하여 스토리지 크기를 추정할 수도 있습니다. 행 크기 계산에 대한 자세한 지침은 [Amazon Keyspaces에서 행 크기 추정](calculating-row-size.md)에서 확인할 수 있습니다.