

# DynamoDB プロビジョンドキャパシティモード
<a name="provisioned-capacity-mode"></a>

Amazon DynamoDB で新しいプロビジョンドテーブルを作成する場合は、テーブルの*プロビジョンドスループットキャパシティ*を指定する必要があります。これは、テーブルがサポートできる読み込みおよび書き込みスループットの量です。プロビジョニングしたキャパシティの実際に消費した量ではなく、プロビジョニングした時間単位の読み込みおよび書き込みキャパシティに基づいて課金されます。

アプリケーションのデータとアクセス要件が変わると、テーブルのスループット設定の調整が必要になる場合があります。Auto Scaling を使用すると、トラフィックの変更に応じて、テーブルのプロビジョンドキャパシティーを自動的に調整できます。DynamoDB 自動スケーリングは、[Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html) で[スケーリングポリシー](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)を使用します。DynamoDB で自動スケーリングを設定するには、ターゲット使用率に加えて、読み取りおよび書き込みキャパシティの最小レベルと最大レベルを設定します。Application Auto Scaling は、メトリクスとターゲットから逸脱したときにスケーリングイベントをトリガーする CloudWatch アラームを作成および管理します。Auto Scaling は、テーブルのアクティビティをモニタリングし、事前設定されたしきい値に基づいてキャパシティ設定を調整します。消費されたキャパシティが、設定したターゲット使用率を 2 分間連続して超過すると、自動スケーリングがトリガーされます。CloudWatch アラームは、自動スケーリングをトリガーする前に、最大数分の短い遅延を伴う場合があります。詳細については、「[DynamoDB Auto Scaling によるスループットキャパシティの自動管理](AutoScaling.md)」を参照してください。

DynamoDB Auto Scaling を使用している場合、スループット設定は実際のワークロードに応じて自動的に調整されます。[UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html) オペレーションを使用して、テーブルのスループットキャパシティを手動で調整することもできます。例えば、既存のデータストアから新しい DynamoDB テーブルにデータをバルクロードする必要がある場合などに便利です。大容量の書き込みスループットを設定したテーブルを作成し、データのバルクロードが完了してからこの設定を削減ですることができます。

**注記**  
デフォルトでは、DynamoDB は意図しない過剰な使用から保護します。アカウント内のすべてのテーブルでテーブルレベルの読み取りおよび書き込みスループット制限の 40,000 を超えてスケールするには、このクォータの引き上げをリクエストできます。デフォルトのテーブルのスループットクォータを超えるスループットリクエストはスロットリングされます。詳細については、「[スループットのデフォルトクォータ](ServiceQuotas.md#default-limits-throughput)」を参照してください。

24 時間のローリングウィンドウで、テーブルをプロビジョンドキャパシティモードからオンデマンドモードに最大 4 回切り替えることができます。テーブルは、オンデマンドモードからプロビジョンドキャパシティモードにいつでも切り替えることができます。

読み込みおよび書き込みキャパシティモードの詳細については、「[DynamoDB でキャパシティモードを切り替える際の考慮事項](bp-switching-capacity-modes.md)」を参照してください。

**Topics**
+ [読み取りキャパシティユニットと書き込みキャパシティユニット](#read-write-capacity-units)
+ [初期スループット設定の選択](#choosing-initial-throughput)
+ [DynamoDB 自動スケーリング](#ddb-autoscaling)
+ [DynamoDB Auto Scaling によるスループットキャパシティの自動管理](AutoScaling.md)
+ [DynamoDB リザーブドキャパシティ](reserved-capacity.md)

## 読み取りキャパシティユニットと書き込みキャパシティユニット
<a name="read-write-capacity-units"></a>

プロビジョンドモードテーブルでは、スループット要件を*キャパシティユニット*の数で指定します。キャパシティユニットは、アプリケーションが 1 秒あたりに読み込みまたは書き込みを行う必要があるデータの量を表します。これらの設定は必要に応じて後から変更できます。また、DynamoDB Auto Scaling を有効化して自動的に変更することもできます。

最大サイズ 4 KB の項目の場合、1 つの読み込みキャパシティユニット (RCU) は、1 秒あたり 1 回の強力な整合性のある読み込み、または 1 秒あたり 2 回の結果整合性のある読み込みを表します。**DynamoDB の読み込み整合性モデルの詳細については「[DynamoDB の読み取り整合性](HowItWorks.ReadConsistency.md)」を参照してください。

1 つの書き込みキャパシティユニット (WCU) は、最大サイズが 1 KB の項目の場合、1 秒あたり 1 回の書き込みを表します。**さまざまな読み込みおよび書き込みオペレーションの詳細については、「[DynamoDB の読み込みと書き込みのオペレーション](read-write-operations.md)」を参照してください。

## 初期スループット設定の選択
<a name="choosing-initial-throughput"></a>

アプリケーションごとにデータベースの読み込みおよび書き込みの要件は異なります。DynamoDB テーブルの初期スループット設定を決定する際は、以下の点を考慮してください。
+ **予想される読み込みおよび書き込みリクエストレート** — 1 秒あたりに実行する必要がある読み込みおよび書き込みの数を推定する必要があります。
+ **項目のサイズ** — 一部の項目は小さいため、読み込みや書き込みには 1 つのキャパシティユニットを使用できます。項目のサイズが大きくなると、複数のキャパシティーユニットが必要になります。テーブルに追加する項目の平均サイズを見積もることで、テーブルのプロビジョニングされたスループットに対する正確な設定を指定できます。
+ **読み込みの整合性要件** — 読み込みキャパシティユニットは、強力な整合性のある読み込みオペレーションに基づいており、結果整合性のある読み込みの 2 倍のデータベースリソースを消費します。アプリケーションが強力な整合性のある読み込みを要求するか、またはこの要件を緩和して結果的に整合性のある読み込み行うかどうかを決定する必要があります DynamoDB での読み込みオペレーションは、デフォルトでは結果整合性のある読み込みです。必要に応じて、これらのオペレーションに強力な整合性のある読み込みをリクエストできます。

例えば、テーブルから 1 秒あたり 80 項目を読み込むとします。項目のサイズは 3 KB で、強力な整合性のある読み込みが必要です。このシナリオでは、読み込みごとに 1 つのプロビジョニングされた読み込みキャパシティユニットが必要です。この数を決定するには、オペレーションの項目サイズを 4 KB で割ります。次に、以下の例に示すように、最も近い整数に切り上げます。
+ 3 KB / 4 KB = 0.75、または **1** つの読み込みキャパシティユニット

したがって、テーブルから 1 秒あたり 80 項目を読み込むには、次の例に示すように、テーブルのプロビジョニングされた読み込みスループットを 80 個の読み込みキャパシティユニットに設定します。
+ 1 読み込み容量単位/項目 x 80 読み込み/秒 = **80** 読み込み容量単位

次に、テーブルに 1 秒あたり 100 項目を書き込み、各項目のサイズが 512 バイトであるとします。この場合、書き込みごとに 1 つのプロビジョニングされた書き込みキャパシティユニットが必要です。この数を決定するには、オペレーションの項目サイズを 1 KB で割ります。次の例に示すように、結果を最も近い整数に切り上げます。
+ 512 バイト/1 KB = 0.5 または **1** つの書き込みキャパシティユニット

テーブルに 1 秒あたり 100 項目を書き込むには、テーブルのプロビジョニングされた書き込みスループットを 100 個の書き込みキャパシティユニットに設定します。
+ 1 書き込み容量単位/項目 x 100 書き込み/秒 = **100** 書き込み容量単位

## DynamoDB 自動スケーリング
<a name="ddb-autoscaling"></a>

DynamoDB 自動スケーリングでは、テーブルとグローバルセカンダリインデックスのプロビジョニングされたスループットキャパシティを自動的に管理します。読み込みおよび書き込みのキャパシティーユニットの範囲 (上限と下限) と、また、その範囲内で目標使用率を定義します。DynamoDB Auto Scaling では、アプリケーションのワークロードが増減しても、ターゲットの使用率が維持されます。

DynamoDB Auto Scaling では、急激なトラフィック増加をリクエストのスロットリングなしに処理するために、テーブルまたはグローバルセカンダリインデックスのプロビジョンされた読み込み容量と書き込み容量を増やすことができます。ワークロードが減ると、DynamoDB Auto Scaling はスループットを低下させ、未使用のプロビジョンされた容量に料金が発生しないようにします。

**注記**  
AWS マネジメントコンソール を使用してテーブルまたはグローバルセカンダリインデックスを作成すると、デフォルトで DynamoDB オートスケーリングが有効になります。  
Auto Scaling の設定は、コンソール、AWS CLI、またはいずれかの AWS SDK を使用していつでも管理できます。詳細については、「[DynamoDB Auto Scaling によるスループットキャパシティの自動管理](AutoScaling.md)」を参照してください。

### 使用率
<a name="ddb-autoscaling-utilization-rate"></a>

使用率は、プロビジョニングキャパシティを超過しているかどうかを判断するのに役立ちます。超過している場合は、テーブルのキャパシティを減らしてコストを削減する必要があります。逆に、プロビジョニングキャパシティを下回っているかどうかを判断するのにも役立ちます。この場合、予期しないトラフィック増によりリクエストがスロットリングされる可能性を防ぐため、テーブルのキャパシティを増やす必要があります。詳細については、「[Amazon DynamoDB auto scaling: Performance and cost optimization at any scale](https://aws.amazon.com/blogs/database/amazon-dynamodb-auto-scaling-performance-and-cost-optimization-at-any-scale/)」を参照してください。

DynamoDB 自動スケーリングを使用している場合は、ターゲット使用率も設定する必要があります。自動スケーリングでは、この使用率をターゲットとして使用し、キャパシティを上下に調整します。ターゲット使用率は 70% に設定することをお勧めします。詳細については、「[DynamoDB Auto Scaling によるスループットキャパシティの自動管理](AutoScaling.md)」を参照してください。