InnoDB 歷史記錄清單長度顯著增加 - Amazon Aurora

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

InnoDB 歷史記錄清單長度顯著增加

日期db-instance長度,針對資料列變更的歷史記錄清單長度皆顯著增加。這會影響查詢和資料庫關閉效能。

支援的引擎版本

所有版本的 Aurora MySQL 都支援此洞察資訊。

Context

InnoDB 交易系統會維護多版本並行控制 (MVCC)。修改資料列時,修改前的版本會在還原日誌中儲存為還原記錄。每個還原記錄都有對先前重做記錄的參照,進而形成一份連結清單。

InnoDB 歷史記錄清單是已提交交易的還原記錄全域清單。交易不再需要歷史記錄時,MySQL 會用歷史記錄清單來清除記錄和日誌頁面。歷史記錄清單長度是清單中所有修改項目的還原記錄總數。每個日誌都包含一個或多個修改項目。若 InnoDB 歷史記錄清單長度太長,表示該清單具有過多舊資料列版本,導致查詢和資料庫關閉變慢。

造成此問題的可能原因

歷史記錄清單過長的典型原因包括:

  • 長時間執行的交易 (讀取或寫入)

  • 繁重的寫入負載

動作

根據洞察的原因,我們會建議不同的動作。

在 InnoDB 歷史記錄清單減少之前,請不要開始任何涉及資料庫關閉的操作

InnoDB 歷史記錄清單過長會降低資料庫關閉速度,因此請在啟動涉及資料庫關閉的操作之前減少清單大小。這些操作包括主要版本資料庫升級。

找出並關閉長時間執行的交易

您可以透過查詢 information_schema.innodb_trx,找出長時間執行的交易。

注意

也請務必在僅供讀取複本上尋找長時間執行的交易。

若要找出並關閉長時間執行的交易
  1. 在您的 SQL 用戶端執行下列查詢:

    SELECT a.trx_id, a.trx_state, a.trx_started, TIMESTAMPDIFF(SECOND,a.trx_started, now()) as "Seconds Transaction Has Been Open", a.trx_rows_modified, b.USER, b.host, b.db, b.command, b.time, b.state FROM information_schema.innodb_trx a, information_schema.processlist b WHERE a.trx_mysql_thread_id=b.id AND TIMESTAMPDIFF(SECOND,a.trx_started, now()) > 10 ORDER BY trx_started
  2. 使用 COMMITROLLBACK 命令,關閉每個長時間執行的交易。

使用績效詳情,找出最高主機和最高使用者。

最佳化交易,以立即遞交大量已修改的資料列。

相關指標

下列指標與此洞察相關: