最佳化 Aurora My 的二進位日誌複寫SQL - Amazon Aurora

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

最佳化 Aurora My 的二進位日誌複寫SQL

接下來,您可以了解如何最佳化二進位日誌複寫效能,並對 Aurora My 中的相關問題進行故障診斷SQL。

提示

此討論假設您熟悉我的SQL二進位日誌複寫機制及其運作方式。如需背景資訊,請參閱 MySQL 文件中的複寫實作

多執行緒二進位日誌複寫

透過多執行緒二進位日誌複寫,SQL執行緒會從轉送日誌讀取事件,並將其排入佇列,以便套用SQL工作者執行緒。SQL 工作者執行緒是由協調器執行緒管理。可能的話,會平行套用二進位日誌事件。

Aurora MySQL 第 3 版和 Aurora MySQL 2.12.1 版及更新版本支援多執行緒二進位日誌複寫。

當 Aurora MySQL 資料庫執行個體設定為使用二進位日誌複寫時,複本執行個體預設會針對低於 3.04 的 Aurora MySQL 版本使用單執行緒複寫。若要啟用多執行緒複寫,您可以在自訂參數群組中將 replica_parallel_workers 參數更新為大於零的值。

對於 Aurora MySQL 3.04 版和更新版本,複寫預設為多執行緒,並將 replica_parallel_workers 設定為 4。您可以在自訂參數群組中修改此參數。

下列組態選項可協助您微調多執行緒複寫。如需用量資訊,請參閱我的SQL參考手冊中的複寫和二進位記錄選項和變數

最佳組態取決於數個因素。例如,二進位日誌複寫的效能會受到資料庫工作負載特性和複本執行所在的資料庫執行個體類別影響。因此,建議您在將新的參數設定套用至生產執行個體之前,先徹底測試這些組態參數的所有變更:

  • binlog_group_commit_sync_delay

  • binlog_group_commit_sync_no_delay_count

  • binlog_transaction_dependency_history_size

  • binlog_transaction_dependency_tracking

  • replica_preserve_commit_order

  • replica_parallel_type

  • replica_parallel_workers

在 Aurora MySQL 3.06 版及更高版本中,您可以改善二進位日誌複本的效能,以複寫具有多個次要索引的大型資料表的交易。此功能引入執行緒集區,以在 binlog 複本上平行套用次要索引變更。此功能由aurora_binlog_replication_sec_index_parallel_workers資料庫叢集參數控制,該參數控制可用於套用次要索引變更的平行執行緒總數。參數預設為 0(停用)。啟用此功能不需要重新啟動執行個體。若要啟用此功能,請停止持續複寫、設定所需的平行工作者執行緒數量,然後再次開始複寫。

最佳化 binlog 複寫

在 Aurora MySQL 2.10 和更新版本中,Aurora 會自動將稱為 binlog I/O 快取的最佳化套用至二進位日誌複寫。藉由快取最近遞交的 binlog 事件,此最佳化旨在改善 binlog 傾印執行緒效能,同時限制 binlog 來源執行個體上對前景交易的影響。

注意

用於此功能的記憶體與 MySQL binlog_cache設定無關。

此功能不適用於使用 db.t2db.t3 執行個體類別的 Aurora 資料庫執行個體。

您不需要調整任何組態參數,即可開啟此最佳化。特別是,如果您已在舊版 Aurora MySQL 中將組態參數調整aurora_binlog_replication_max_yield_seconds為非零值,請將其針對目前可用的版本設回零。

狀態變數aurora_binlog_io_cache_readsaurora_binlog_io_cache_read_requests可協助您監控從 binlog I/O 快取讀取資料的頻率。

  • aurora_binlog_io_cache_read_requests 顯示對快取發起的 binlog 輸入/輸出讀取要求的次數。

  • aurora_binlog_io_cache_reads 顯示從快取擷取資訊的 binlog 輸入/輸出讀取次數。

下列SQL查詢會計算利用快取資訊之 binlog 讀取請求的百分比。在這種情況下,比例越接近 100 越好。

mysql> SELECT (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='aurora_binlog_io_cache_reads') / (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='aurora_binlog_io_cache_read_requests') * 100 as binlog_io_cache_hit_ratio; +---------------------------+ | binlog_io_cache_hit_ratio | +---------------------------+ | 99.99847949080622 | +---------------------------+

binlog 輸入/輸出快取功能也包含與 binlog 傾印執行緒相關的新指標。「傾印執行緒」是新的 binlog 複本連線到 binlog 來源執行個體時所建立的執行緒。

傾印執行緒指標會每隔 60 秒列印至資料庫日誌,字首為 [Dump thread metrics]。此指標包括每個 binlog 複本的資訊,例如 Secondary_idSecondary_uuid、binlog 檔案名稱,以及每個複本正在讀取的位置。此指標也包括 Bytes_behind_primary,表示複寫來源與複本之間的距離 (以位元組為單位)。此指標會測量複本輸入/輸出執行緒的延遲。該圖與複本SQL附加執行緒的延遲不同,該執行緒由 binlog 複本上的 seconds_behind_master 指標表示。您可以透過檢查距離是否減少或增加,判斷 binlog 複本是趕上還是落後於來源。