

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Keyspaces のキャパシティ管理エラーのトラブルシューティング
<a name="troubleshooting.serverless"></a>

サーバーレスキャパシティに関して問題がありますか。以下は、一般的なシナリオとその解決方法です。

## サーバーレス容量エラー
<a name="troubleshooting-serverless"></a>

このセクションでは、サーバーレスキャパシティ管理に関連するエラーの認識方法と解決方法について説明します。例えば、アプリケーションがプロビジョンドスループット性能を超えると、キャパシティ不足イベントが発生することがあります。

Apache Cassandra は、ノード群で実行するように設計されたクラスタベースのソフトウェアであるため、スループットキャパシティなどのサーバーレス機能に関連する例外メッセージはありません。ほとんどのドライバーでは Apache Cassandra で利用可能なエラーコードしか認識されないため、Amazon Keyspaces では、互換性を維持するために同一のエラーコードセットを使用します。

基盤となるキャパシティイベントに Cassandra エラーをマッピングする場合には、Amazon CloudWatch を使用して関連する Amazon Keyspaces メトリクスを監視することができます。クライアント側のエラーを発生させるキャパシティ不足イベントは、イベントの原因となっているリソースに基づいて、次の 3 つのグループに分類できます。
+ **テーブル** – テーブルに対して **[Provisioned]** (プロビジョンド) キャパシティモードを選択した場合に、アプリケーションがプロビジョンドスループットを超えると、キャパシティ不足エラーが発生する可能性があります。詳細については、「[Amazon Keyspaces で読み取り/書き込みのキャパシティモードを設定する](ReadWriteCapacityMode.md)」を参照してください。
+ **パーティション** — 指定されたパーティションのトラフィックが 3,000 RCU または 1,000 WCU を超えると、キャパシティ不足イベントが発生する可能性があります。ベストプラクティスとして、パーティション間でトラフィックを均一に分散させることをお勧めします。詳細については、「[データモデリングのベストプラクティス: データモデル設計時の推奨事項](data-modeling.md)」を参照してください。
+ **接続** — 接続 1 つあたりの 1 秒あたりの最大オペレーション数のクォータを超えると、スループットが不十分になる可能性があります。スループットを高めるために、ドライバーによる接続を設定する際に、デフォルト接続の数を増やすことができます。

  Amazon Keyspaces で接続を設定する方法については、「[Amazon Keyspaces で接続を設定する方法](connections.md#connections.howtoconfigure)」を参照してください。VPC エンドポイントを利用した接続の最適化の詳細については、「[Amazon Keyspaces の VPC エンドポイント経由接続の設定方法](connections.md#connections.VPCendpoints)」を参照してください。

クライアント側エラーを返すキャパシティ不足イベントの原因となっているリソースを特定するために、Amazon Keyspaces コンソールでダッシュボードを確認できます。デフォルトでは、コンソールには、テーブルの **[Capacity]** (キャパシティ) の **[Capacity and related metrics]** (キャパシティと関連メトリクス) セクションに、最も一般的なキャパシティとトラフィックに関する CloudWatch メトリクスの集約ビューがあります。

Amazon CloudWatch を使用して独自のダッシュボードを作成するには、次の Amazon Keyspaces メトリクスを確認します。
+ `PerConnectionRequestRateExceeded` — 接続ごとのリクエストレートのクォータを超える Amazon Keyspaces へのリクエスト。Amazon Keyspaces への各クライアント接続は、1 秒あたり最大 3000 の CQL リクエストに対応できます。複数の接続を作成すれば、1 秒あたり 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)」を参照してください。
+ テーブルに対して **[On-demand]** (オンデマンド) キャパシティモードを選択します。詳細については、「[オンデマンドキャパシティモードを設定する](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 接続 1 つにつき 1 秒あたり最大 3,000 の CQL クエリに対応していますが、ドライバーが確立できる接続数に制限はありません。

  ほとんどのオープンソース Cassandra ドライバーで、Cassandra への接続プールが確立され、その接続プールでクエリのロードバランスが行われます。Amazon Keyspaces では 9 つのピア IP アドレスをドライバーに開示します。ほとんどのドライバーのデフォルト動作は、各ピア IP アドレスに対して 1 つの接続を確立することです。したがって、デフォルト設定を使用するドライバーの最大 CQL クエリスループットは、1 秒あたり 27,000 CQL クエリになります。

  この数を増やすには、ドライバーが接続プールで維持している IP アドレスあたりの接続数を増やすことをお勧めします。例えば、IP アドレスあたりの最大接続数を 2 に設定すると、ドライバーの最大スループットが 1 秒あたり 54,000 CQL クエリの 2 倍になります。
+ **単一ノード接続を最適化します。**

  ほとんどのオープンソース Cassandra ドライバーでは、デフォルトで、セッションの確立時に `system.peers` テーブルでアドバタイズされた各 IP アドレスへに対して、1 つ以上の接続が確立されます。ただし、設定によっては、ドライバーにより単一の Amazon Keyspaces IP アドレスに接続されることがあります。これは、ドライバーにより、ピアノードの SSL ホスト名の検証が試行されている場合や (DataStax Java ドライバーなど)、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)」を参照してください。より堅牢なデータアップロードオプションについては、DSBulk の使用を検討してください。DSBulk は [GitHub リポジトリ](https://github.com/datastax/dsbulk)から入手できます。手順については、「[チュートリアル: DSBulk を使用した Amazon Keyspaces へのデータのロード](dsbulk-upload.md)」を参照してください。

### キースペースまたはテーブルの実際のストレージサイズが表示されない
<a name="troubleshooting.serverless.storagesize"></a>

**キースペースまたはテーブルの実際のストレージサイズが表示されません。**

テーブルのストレージサイズの詳細については、「[テーブルレベルでコストを評価する](CostOptimization_TableLevelCostAnalysis.md)」を参照してください。テーブル内の行サイズを計算することから始めて、ストレージサイズを見積もることもできます。行サイズの計算に関する詳しい手順については、「[Amazon Keyspaces で行のサイズを推定する](calculating-row-size.md)」を参照してください。