

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# io/redo\$1log\$1flush
<a name="ams-waits.io-redologflush"></a>

當工作階段將持久性資料寫入至 Amazon Aurora 儲存體時，`io/redo_log_flush` 事件便會發生。

**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 中的寫入輸入/輸出 (輸入/輸出) 作業。

**注意**  
在 Aurora MySQL 第 2 版中，此等待事件名為 [io/aurora\$1redo\$1log\$1flush](ams-waits.io-auredologflush.md)。

## 等待時間增加的可能原因
<a name="ams-waits.io-redologflush.causes"></a>

對於資料持久性，遞交需要持久寫入至穩定的儲存。如果資料庫執行太多的遞交，寫入輸入/輸出作業上會有等待事件，即 `io/redo_log_flush` 等待事件。

如需此等待事件行為的範例，請參閱 [io/aurora\$1redo\$1log\$1flush](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>

如果您的資料庫執行個體遭遇瓶頸，您的第一項任務是尋找造成瓶頸的工作階段和查詢。如需實用的 AWS 資料庫部落格文章，請參閱[使用績效詳情分析 Amazon Aurora MySQL 工作負載](https://aws.amazon.com/blogs/database/analyze-amazon-aurora-mysql-workloads-with-performance-insights/)。

**識別造成瓶頸的工作階段和查詢**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Performance Insights** (績效詳情)。

1. 選擇資料庫執行個體。

1. 在 **Database load** (資料庫負載) 中，選擇 **Slice by wait** (依等待建立配量)。

1. 在頁面底端，選擇 **Top SQL** (最高 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` 等待事件所花費的時間，將您的寫入作業邏輯分組為單一遞交，以減少持續呼叫儲存。

### 關閉自動遞交
<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;
```