

# RDS Optimized Writes for MySQL による書き込みパフォーマンスの向上
<a name="rds-optimized-writes"></a>

RDS Optimized Writes for MySQL によって、書き込みトランザクションのパフォーマンスを向上させることができます。RDS for MySQL データベースで RDS Optimized Writes を使用すると、書き込みトランザクションのスループットが最大 2 倍向上します。

**Topics**
+ [RDS Optimized Writes の概要](#rds-optimized-writes-overview)
+ [RDS Optimized Writes の使用](#rds-optimized-writes-using)
+ [既存のデータベースで RDS Optimized Writes を有効にする](#rds-optimized-writes-modify-enable)
+ [RDS Optimized Writes についての制限事項](#rds-optimized-writes-limitations)

## RDS Optimized Writes の概要
<a name="rds-optimized-writes-overview"></a>

RDS Optimized Writes を有効にすると、RDS for MySQL データベースは、データを耐久性のあるストレージにフラッシュするときに、二重書き込みバッファを必要とせずに一度だけ書き込みます。データベースは、ACID プロパティ保護機能の提供を継続することで、信頼性の高いデータベーストランザクションを実現するとともに、パフォーマンスを向上させます。

MySQL のようなリレーショナルデータベースには、原子性、一貫性、分離性、耐久性という *ACID 特性*があり、信頼性の高いデータベーストランザクションを実現できます。これらの特性を発揮するために、MySQL は部分的なページ書き込みエラーを防ぐ*二重書き込みバッファ*と呼ばれるデータストレージ領域を使用しています。これらのエラーは、データベースがページを更新中に、停電時などのハードウェア障害が発生した場合に発生します。MySQL データベースは、部分的なページ書き込みを検出し、二重書き込みバッファ内のページのコピーによって回復できます。この手法で保護が可能ですが、余分な書き込みオペレーションも必要になります。MySQL の二重書き込みバッファの詳細については、MySQL ドキュメントの「[二重書き込みバッファ](https://dev.mysql.com/doc/refman/8.0/en/innodb-doublewrite-buffer.html)」を参照してください。

RDS Optimized Writes を有効にすると、RDS for MySQL データベースは、データを耐久性のあるストレージにフラッシュするときに、二重書き込みバッファを使用せずに一度だけ書き込みます。RDS Optimized Writes は、RDS for MySQL データベースで書き込みの多いワークロードを実行する場合に便利です。書き込みワークロードの高いデータベースの例としては、デジタル決済、金融取引、ゲームアプリケーションに対応したデータベースなどがあります。

これらのデータベースは、AWS Nitro System を使用する DB インスタンスクラスで実行されます。これらのシステムのハードウェア構成により、データベースは 16 KiB ページを 1 ステップで確実かつ永続的にデータファイルに直接書き込むことができます。AWS Nitro System により RDS Optimized Writes が可能になります。

新しいデータベースパラメータ `rds.optimized_writes` を設定して、RDS for MySQL データベースの RDS Optimized Writes 機能を制御できます。RDS for MySQL バージョン 8.0 および RDS for MySQL バージョン 8.4 の DB パラメータグループから、このパラメータにアクセスします。次の値を使用してパラメータを設定します。
+ `AUTO` – データベースが RDS Optimized Writes をサポートしている場合は有効にします。データベースが RDS Optimized Writes をサポートしていない場合は無効にします。この設定はデフォルトです。
+ `OFF` – データベースが RDS Optimized Writes をサポートしている場合でも無効にします。

RDS Optimized Writes をサポートしないエンジンバージョン、DB インスタンスクラス、ファイルシステム形式の既存のデータベースがある場合は、ブルー/グリーンデプロイを作成することでこの機能を有効にできます。詳細については、「[既存のデータベースで RDS Optimized Writes を有効にする](#rds-optimized-writes-modify-enable)」を参照してください。

RDS Optimized Writes を使用するように設定されている RDS for MySQL データベースを、この機能をサポートしていない DB インスタンスクラスに移行した場合、RDS はそのデータベースの RDS Optimized Writes を自動的に無効にします。

RDS Optimized Writes を無効にすると、データベースは MySQL の二重書き込みバッファを使用します。

RDS for MySQL データベースが RDS Optimized Writes を使用しているかどうかを判断するには、データベースの `innodb_doublewrite` パラメータの現在の値を表示します。データベースが RDS Optimized Writes を使用している場合、このパラメータは `FALSE` (`0`) に設定されています。

## RDS Optimized Writes の使用
<a name="rds-optimized-writes-using"></a>

RDS コンソール、AWS CLI、または RDS API を使用して RDS for MySQL データベースを作成すると、RDS Optimized Writes を有効にできます。RDS Optimized Writes は、データベース作成時に、次の条件に両方当てはまる場合、自動的に有効になります。
+ RDS Optimized Writes をサポートする DB エンジンのバージョンと DB インスタンスクラスを指定します。
  + RDS Optimized Writes は、RDS for MySQL バージョン 8.0.30 以降でサポートされています。RDS for MySQL のバージョンの詳細については、「[Amazon RDS での MySQL のバージョン](MySQL.Concepts.VersionMgmt.md)」を参照してください。
  + RDS Optimized Writes は、次の DB インスタンスクラスを使用する RDS for MySQL データベースでサポートされています。
    + db.m7i
    + db.m7g
    + db.m6g
    + db.m6gd
    + db.m6i
    + db.m5
    + db.m5d
    + db.r7i
    + db.r7g
    + db.r6g
    + db.r6gd
    + db.r6i
    + db.r5
    + db.r5b
    + db.r5d
    + db.x2idn
    + db.x2iedn

    DB インスタンスクラスの詳細については、「[ DB インスタンスクラス](Concepts.DBInstanceClass.md)」を参照してください。

    DB インスタンスクラスの可用性は AWS リージョン によって異なります。DB インスタンスクラスが特定の AWS リージョン でサポートされているかどうかを判断するには、「[AWS リージョン での DB インスタンスクラスのサポートを決定する](Concepts.DBInstanceClass.RegionSupport.md)」を参照してください。

    データベースを RDS Optimized Writes をサポートする DB インスタンスクラスにアップグレードするには、ブルー/グリーンデプロイを作成できます。詳細については、「[既存のデータベースで RDS Optimized Writes を有効にする](#rds-optimized-writes-modify-enable)」を参照してください。
+ データベースに関連付けられたパラメータグループでは、`rds.optimized_writes` パラメータが `AUTO` に設定されます。デフォルトのパラメータグループでは、このパラメータは常に `AUTO` に設定されます。

RDS Optimized Writes をサポートする DB エンジンバージョンと DB インスタンスクラスを使用し、この機能は使用しない場合は、データベースの作成時に、カスタムパラメータグループを指定します。このパラメータグループで、`rds.optimized_writes` パラメータを `OFF` に設定します。その後、データベースで RDS Optimized Writes を使用するには、パラメータを `AUTO` に設定して有効にすることができます。カスタムパラメータグループの作成とパラメータの設定については、「[Amazon RDS のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照してください。

DB インスタンスの作成については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。

### コンソール
<a name="rds-optimized-writes-using-console"></a>

RDS コンソールを使用して RDS for MySQL データベースを作成すると、RDS Optimized Writes をサポートする DB エンジンバージョンと DB インスタンスクラスをフィルタリングできます。フィルタリングを有効にすると、利用可能な DB エンジンのバージョンと DB インスタンスクラスから選択できるようになります。

RDS Optimized Writes をサポートする DB エンジンバージョンを選択するには、**エンジンバージョン**をサポートする RDS for MySQL DB のエンジンバージョンをフィルタリングして、バージョンを選択します。

![\[[エンジンバージョン] の [エンジンオプション セクション。[Amazon RDS Optimized Writes] フィルターがオンになっています。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/rds-optimized-writes-version-filter.png)


**[インスタンスの設定]** セクションで、RDS Optimized Writes をサポートする DB インスタンスクラスをフィルタリングして、DB インスタンスクラスを選択します。

![\[[DB インスタンスクラス] の [インスタンス設定] セクション。[Amazon RDS Optimized Writes] フィルターがオンになっています。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/rds-optimized-writes-class-filter.png)


これらの選択を行った後、要件を満たす他の設定を選択し、コンソールで RDS for MySQL データベースの作成を完了します。

### AWS CLI
<a name="rds-optimized-writes-using-cli"></a>

AWS CLI を使用して DB インスタンスを作成するには、[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) コマンドを実行します。`--engine-version` と `--db-instance-class` の値が RDS Optimized Writes をサポートしていることを確認してください。また、DB インスタンスに関連付けられたパラメータグループでは、`rds.optimized_writes` パラメータが`AUTO` に設定されていることを確認します。この例では、デフォルトパラメータグループを DB インスタンスに関連付けます。

**Example RDS Optimized Writes を使用する DB インスタンスの作成**  
Linux、macOS、Unix の場合:  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --engine mysql \
4.     --engine-version 8.0.30 \
5.     --db-instance-class db.r5b.large \
6.     --manage-master-user-password \
7.     --master-username admin \
8.     --allocated-storage 200
```
Windows の場合:  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --engine mysql ^
4.     --engine-version 8.0.30 ^
5.     --db-instance-class db.r5b.large ^
6.     --manage-master-user-password ^
7.     --master-username admin ^
8.     --allocated-storage 200
```

### RDS API
<a name="rds-optimized-writes-using-api"></a>

[CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) オペレーションを使用して、DB インスタンスを作成できます。このオペレーションを使用する際は、`EngineVersion` と `DBInstanceClass` の値が RDS Optimized Writes をサポートしていることを確認してください。また、DB インスタンスに関連付けられたパラメータグループでは、`rds.optimized_writes` パラメータが`AUTO` に設定されていることを確認します。

## 既存のデータベースで RDS Optimized Writes を有効にする
<a name="rds-optimized-writes-modify-enable"></a>

RDS Optimized Writes を有効にするために既存の RDS for MySQL データベースを変更するには、サポート対象の DB エンジンバージョンと DB インスタンスクラスでデータベースを作成する必要があります。さらに、必要な基盤となるファイルシステム設定は、リリース前に作成されたデータベースの設定と互換性がないため、データベースは 2022 年 11 月 27 日に RDS Optimized Writes がリリースされた*後*に作成されたものでなければなりません。これらの条件が満たされている場合は、`rds.optimized_writes` パラメータを `AUTO` に設定して RDS Optimized Writes を有効にできます。

データベースが、サポートされているエンジンバージョン、インスタンスクラス、またはファイルシステム設定で作成されて*いない*場合、RDS ブルー/グリーンデプロイを使用して、サポートされている設定に移行できます。ブルー/グリーンデプロイを作成して、以下の操作を行います。
+ **[グリーンデータベースで Optimized Writes を有効にする]** を選択し、RDS Optimized Writes をサポートするエンジンバージョンと DB インスタンスクラスを指定します。サポートされているエンジンバージョンとインスタンスクラスのリストについては、「[RDS Optimized Writes の使用](#rds-optimized-writes-using)」を参照してください。
+ **[ストレージ]** で、**[ストレージファイルシステム設定のアップグレード]** を選択します。このオプションは、データベースを互換性のある基本ファイルシステム設定にアップグレードします。

ブルー/グリーンデプロイを作成すると、`rds.optimized_writes` パラメータが `AUTO` に設定されている場合、RDS Optimized Writes がグリーン環境で自動的に有効になります。その後、ブルー/グリーンデプロイを切り替えて、グリーン環境を新しい本番環境に昇格できます。

詳細については、「[Amazon RDS でのブルー/グリーンデプロイの作成](blue-green-deployments-creating.md)」を参照してください。

## RDS Optimized Writes についての制限事項
<a name="rds-optimized-writes-limitations"></a>

RDS for MySQL データベースをスナップショットから復元する場合、次の条件がすべて当てはまる場合のみ、データベースの RDS Optimized Writes を有効にできます。
+ スナップショットが RDS Optimized Writes をサポートするデータベースから作成された。
+ スナップショットは、RDS Optimized Writes のリリース*後に*作成されたデータベースから作成されました。
+ スナップショットが RDS Optimized Writes をサポートするデータベースに復元された。
+ 復元されたデータベースは、`AUTO` に設定された `rds.optimized_writes` パラメータに関連付けられています。