

# io/redo\_log\_flush
<a name="ams-waits.io-redologflush"></a>

`io/redo_log_flush` イベントは、セッションが永続データを Amazon Aurora ストレージに書き込むときに発生します。

**Topics**
+ [サポート対象エンジンバージョン](#ams-waits.io-redologflush.context.supported)
+ [Context](#ams-waits.io-redologflush.context)
+ [待機時間が増加する原因の可能性](#ams-waits.io-redologflush.causes)
+ [アクション](#ams-waits.io-redologflush.actions)

## サポート対象エンジンバージョン
<a name="ams-waits.io-redologflush.context.supported"></a>

この待機イベント情報は、以下のエンジンバージョンでサポートされています。
+ Aurora MySQL バージョン 3

## Context
<a name="ams-waits.io-redologflush.context"></a>

`io/redo_log_flush` イベントは Aurora MySQL の書き込み入力/出力 (I/O) オペレーション用です。

**注記**  
Aurora MySQL バージョン 2 では、この待機イベントの名前は [io/aurora\_redo\_log\_flush](ams-waits.io-auredologflush.md) です。

## 待機時間が増加する原因の可能性
<a name="ams-waits.io-redologflush.causes"></a>

データの永続化のために、コミットはストレージが安定するよう耐久性の高い書き込みを要求とします。データベースがコミットを多くし過ぎると、書き込み I/O オペレーションで待機イベントが発生します、`io/redo_log_flush` 待機イベント。

この待機イベントの動作の例については、「[io/aurora\_redo\_log\_flush](ams-waits.io-auredologflush.md)」を参照してください。

## アクション
<a name="ams-waits.io-redologflush.actions"></a>

待機イベントの原因に応じて、異なるアクションをお勧めします。

**Topics**
+ [問題のあるセッションとクエリを特定する](#ams-waits.io-redologflush.actions.identify-queries)
+ [書き込みオペレーションをグループ化する](#ams-waits.io-redologflush.actions.action0)
+ [オートコミットをオフにする](#ams-waits.io-redologflush.actions.action1)
+ [トランザクションの使用](#ams-waits.io-redologflush.action2)
+ [バッチを使用する](#ams-waits.io-redologflush.action3)

### 問題のあるセッションとクエリを特定する
<a name="ams-waits.io-redologflush.actions.identify-queries"></a>

DB インスタンスにボトルネックが発生している場合、ユーザーの初期のタスクは、その原因となるセッションとクエリを見つけることになります。便利な AWS データベースブログ記事は [Performance Insights を使用した Amazon Aurora MySQL ワークロードの分析](https://aws.amazon.com/blogs/database/analyze-amazon-aurora-mysql-workloads-with-performance-insights/) を参照してください。

**ボトルネックの原因となっているセッションとクエリを特定するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**Performance Insights**] を選択します。

1. DB インスタンスを選択します。

1. **データベース負荷**で、**待機でスライス**を選択します。

1. ページの下部で **トップ SQL** を選択します。

   リストの上部にあるクエリは、データベースで最大の負荷を引き起こしています。

### 書き込みオペレーションをグループ化する
<a name="ams-waits.io-redologflush.actions.action0"></a>

次の例は `io/redo_log_flush` 待機イベントをトリガーしています。(オートコミットがオンになっています。)

```
INSERT INTO `sampleDB`.`sampleTable` (sampleCol2, sampleCol3) VALUES ('xxxx','xxxxx');
INSERT INTO `sampleDB`.`sampleTable` (sampleCol2, sampleCol3) VALUES ('xxxx','xxxxx');
INSERT INTO `sampleDB`.`sampleTable` (sampleCol2, sampleCol3) VALUES ('xxxx','xxxxx');
....
INSERT INTO `sampleDB`.`sampleTable` (sampleCol2, sampleCol3) VALUES ('xxxx','xxxxx');

UPDATE `sampleDB`.`sampleTable` SET sampleCol3='xxxxx' WHERE id=xx;
UPDATE `sampleDB`.`sampleTable` SET sampleCol3='xxxxx' WHERE id=xx;
UPDATE `sampleDB`.`sampleTable` SET sampleCol3='xxxxx' WHERE id=xx;
....
UPDATE `sampleDB`.`sampleTable` SET sampleCol3='xxxxx' WHERE id=xx;

DELETE FROM `sampleDB`.`sampleTable` WHERE sampleCol1=xx;
DELETE FROM `sampleDB`.`sampleTable` WHERE sampleCol1=xx;
DELETE FROM `sampleDB`.`sampleTable` WHERE sampleCol1=xx;
....
DELETE FROM `sampleDB`.`sampleTable` WHERE sampleCol1=xx;
```

`io/redo_log_flush` 待機イベントで待機する時間を減らすため、書き込み操作を論理的に 1 つのコミットにグループ化し、ストレージへの永続的な呼び出しを減らします。

### オートコミットをオフにする
<a name="ams-waits.io-redologflush.actions.action1"></a>

次の例に示すように、トランザクション内に存在しない大きな変更を加える前に、オートコミットをオフにします。

```
SET SESSION AUTOCOMMIT=OFF;
UPDATE `sampleDB`.`sampleTable` SET sampleCol3='xxxxx' WHERE sampleCol1=xx;
UPDATE `sampleDB`.`sampleTable` SET sampleCol3='xxxxx' WHERE sampleCol1=xx;
UPDATE `sampleDB`.`sampleTable` SET sampleCol3='xxxxx' WHERE sampleCol1=xx;
....
UPDATE `sampleDB`.`sampleTable` SET sampleCol3='xxxxx' WHERE sampleCol1=xx;
-- Other DML statements here
COMMIT;

SET SESSION AUTOCOMMIT=ON;
```

### トランザクションの使用
<a name="ams-waits.io-redologflush.action2"></a>

次の例が示すように、トランサクションを使用することができます。

```
BEGIN
INSERT INTO `sampleDB`.`sampleTable` (sampleCol2, sampleCol3) VALUES ('xxxx','xxxxx');
INSERT INTO `sampleDB`.`sampleTable` (sampleCol2, sampleCol3) VALUES ('xxxx','xxxxx');
INSERT INTO `sampleDB`.`sampleTable` (sampleCol2, sampleCol3) VALUES ('xxxx','xxxxx');
....
INSERT INTO `sampleDB`.`sampleTable` (sampleCol2, sampleCol3) VALUES ('xxxx','xxxxx');

DELETE FROM `sampleDB`.`sampleTable` WHERE sampleCol1=xx;
DELETE FROM `sampleDB`.`sampleTable` WHERE sampleCol1=xx;
DELETE FROM `sampleDB`.`sampleTable` WHERE sampleCol1=xx;
....
DELETE FROM `sampleDB`.`sampleTable` WHERE sampleCol1=xx;

-- Other DML statements here
END
```

### バッチを使用する
<a name="ams-waits.io-redologflush.action3"></a>

次の例が示すように、バッチで変更することもできます。ただし、大きすぎるバッチを使用すると、特にリードレプリカやポイントインタイムリカバリ (PITR) の実行時にパフォーマンスの問題が発生する可能性があります。

```
INSERT INTO `sampleDB`.`sampleTable` (sampleCol2, sampleCol3) VALUES
('xxxx','xxxxx'),('xxxx','xxxxx'),...,('xxxx','xxxxx'),('xxxx','xxxxx');

UPDATE `sampleDB`.`sampleTable` SET sampleCol3='xxxxx' WHERE sampleCol1 BETWEEN xx AND xxx;

DELETE FROM `sampleDB`.`sampleTable` WHERE sampleCol1<xx;
```