改善 RDS MySQL with Amazon RDS Optimized Reads 的查詢效能 - Amazon Relational Database Service

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

改善 RDS MySQL with Amazon RDS Optimized Reads 的查詢效能

您可以為 RDS MySQL with Amazon RDS Optimized Reads 實現更快的查詢處理。使用 RDS Optimized Reads 的 RDS for MySQL 資料庫執行個體或多可用區域資料庫叢集,其查詢處理速度比不使用它的資料庫執行個體或叢集快上 2 倍。

RDS 最佳化讀取概觀

當您使用 的 RDS for MySQL 資料庫執行個體或已開啟 RDS Optimized Reads 的多可用區域資料庫叢集時,它會使用執行個體存放區來實現更快的查詢效能。執行個體儲存體為資料庫執行個體或多可用區域資料庫叢集提供暫時的區塊層級儲存空間。儲存體位於實際連接至主機伺服器的非揮發性 Memory Express (NVMe) 固態硬碟 (SSDs) 上。此儲存體已針對低延遲、高隨機 I/O 效能,以及高循序讀取輸送量進行最佳化。

RDS 當資料庫執行個體或多可用區域資料庫叢集搭配執行個體存放區使用資料庫執行個體類別時, Optimized Reads 預設為開啟,例如 db.m5d 或 db.m6gd。使用 RDS Optimized Reads,某些臨時物件會存放在執行個體存放區。這些暫存物件包括內部暫存檔、內部磁碟上暫存資料表、記憶體對應檔案,以及二進位日誌 (binlog) 快取檔案。如需執行個體存放區的詳細資訊,請參閱《Amazon Elastic Compute Cloud Linux EC2執行個體使用者指南》中的 Amazon 執行個體存放區。

在 MySQL 中產生臨時物件以進行查詢處理的工作負載,可以利用執行個體存放區來加快查詢處理速度。這種類型的工作負載包括涉及排序、雜湊彙總、高負載聯結、通用資料表表達式 (CTEs) 和未索引資料欄查詢的查詢。無論用於持久性 Amazon 儲存體的儲存體組態為何,這些執行個體EBS儲存體磁碟區都能提供更高的IOPS效能。由於 RDS Optimized Reads 將臨時物件的操作卸載至執行個體存放區,因此持久性儲存體 (AmazonIOPS) 的每秒輸入/輸出操作 (EBS) 或輸送量現在可用於持久性物件的操作。這些操作包括一般資料檔案讀取和寫入,以及背景引擎操作,例如排清和插入緩衝區合併。

注意

手動和自動RDS快照都只包含持久性物件的引擎檔案。在執行個體存放區中建立的臨時物件不包含在RDS快照中。

RDS Optimized Reads 的使用案例

如果您有工作負載高度依賴臨時物件,例如內部資料表或檔案,以進行查詢執行,則您可以受益於開啟RDS最佳化讀取。下列使用案例是RDS最佳化讀取的候選案例:

  • 使用複雜的常見資料表表達式 (CTEs)、衍生資料表和分組操作執行分析查詢的應用程式

  • 使用未最佳化查詢提供大量讀取流量的僅供讀取複本

  • 執行涉及複雜作業之隨需或動態報告查詢的應用程式,例如搭配 GROUP BYORDER BY 子句的查詢

  • 使用內部暫存資料表進行查詢處理的工作負載

    您可以監控引擎狀態變數 created_tmp_disk_tables,以判斷在資料庫執行個體上建立的磁碟型暫存資料表數目。

  • 直接或在程序中建立大型暫存資料表以儲存中繼結果的應用程式

  • 對未編製索引之資料欄執行分組或排序的資料庫查詢

RDS 最佳化讀取的最佳實務

RDS 最佳化讀取使用下列最佳實務:

  • 針對唯讀查詢新增重試邏輯,以防這些查詢在執行期間由於執行個體儲存體已滿而失敗。

  • 使用 CloudWatch 指標 監控執行個體存放區上可用的儲存空間FreeLocalStorage。如果執行個體儲存體由於資料庫執行個體的工作負載而達到其限制,請修改資料庫執行個體,以使用較大的資料庫執行個體類別。

  • 當您的資料庫執行個體有足夠的記憶體,但仍達到執行個體儲存體或多可用區域資料庫叢集的儲存限制時,請增加 binlog_cache_size 值以在記憶體中維護工作階段特定的 binlog 項目。此組態可防止將 binlog 項目寫入至磁碟上的暫存 binlog 快取檔案。

    binlog_cache_size 參數是工作階段特有的。您可以變更每個新工作階段的值。此參數的設定可以在尖峰工作負載期間增加資料庫執行個體的記憶體使用率。因此,請考慮根據您應用程式的工作負載模式和資料庫執行個體上的可用記憶體來增加參數值。

  • 對於 MySQL 8.0 版本和更低版本,請使用 binlog_format 參數MIXED的預設值 。根據交易的大小,將 binlog_format 設為 ROW 可能會在執行個體儲存體上產生大型 binlog 快取檔案。對於 MySQL 8.4 和更高版本,請使用 binlog_format 參數ROW的預設值 。

  • internal_tmp_mem_storage_engine 參數設為 TempTable,然後設定 temptable_max_mmap 參數,以符合執行個體儲存體上可用儲存體的大小。

  • 避免在單一交易中執行大量變更。這些類型的交易可能會在執行個體儲存體上產生大型 binlog 快取檔案,並在執行個體儲存體已滿時產生問題。請考慮將寫入分割成多個小型交易,以將 binlog 快取檔案使用的儲存體減至最少。

  • ABORT_SERVER 的預設值用於 binlog_error_action 參數。這樣做可避免在啟用備份的資料庫執行個體上進行二進位記錄時發生問題。

使用RDS最佳化讀取

當您在單一可用區域資料庫執行個體部署、多可用區域資料庫執行個體部署或多可用區域資料庫叢集部署中,使用下列其中一個資料庫執行個體類別佈建 RDS for MySQL 資料庫執行個體時,資料庫執行個體會自動使用RDS最佳化讀取。

若要開啟RDS最佳化讀取,請執行下列其中一項操作:

  • 使用其中一個資料庫執行個體類別建立 RDS for MySQL 資料庫執行個體或多可用區域資料庫叢集。如需詳細資訊,請參閱建立 Amazon RDS 資料庫執行個體

  • 修改現有的RDS適用於我的SQL資料庫執行個體或多可用區域資料庫叢集,以使用其中一個資料庫執行個體類別。如需詳細資訊,請參閱修改 Amazon RDS 資料庫執行個體

RDS Optimized Reads 適用於支援一或多個具有本機NVMeSSD儲存體的資料庫執行個體類別的所有 AWS 區域 RDS 。如需資料庫執行個體類別的相關資訊,請參閱 資料庫執行個體類別

資料庫執行個體類別可用性會有所不同 AWS 區域。若要判斷特定 是否支援資料庫執行個體類別 AWS 區域,請參閱 在 中判斷資料庫執行個體類別支援 AWS 區域

如果您不想使用 RDS Optimized Reads,請修改資料庫執行個體或多可用區域資料庫叢集,使其不使用支援 功能的資料庫執行個體類別。

監控使用RDS最佳化讀取的資料庫執行個體

您可以使用下列 CloudWatch 指標監控使用 RDS Optimized Reads 的資料庫執行個體:

  • FreeLocalStorage

  • ReadIOPSLocalStorage

  • ReadLatencyLocalStorage

  • ReadThroughputLocalStorage

  • WriteIOPSLocalStorage

  • WriteLatencyLocalStorage

  • WriteThroughputLocalStorage

這些指標提供可用執行個體存放區儲存、 IOPS和輸送量的資料。如需這些指標的詳細資訊,請參閱 Amazon RDS 的 Amazon CloudWatch 執行個體層級指標

RDS 最佳化讀取的限制

下列限制適用於RDS最佳化讀取:

  • RDS 下列版本支援最佳化讀取:

    • RDS for MySQL 8.0.28 版及更新的主要和次要版本

    如需RDS適用於 MySQL 版本的資訊,請參閱 MySQL on Amazon RDS 版本

  • 您無法在支援 RDS Optimized Reads 的資料庫執行個體類別上,將暫時物件的位置變更為持久性儲存 (AmazonEBS)。

  • 在資料庫執行個體上啟用二進位記錄時,交易大小上限受執行個體儲存體的大小限制。在 My 中SQL,任何需要比 值更多儲存空間的工作階段,都會將交易變更binlog_cache_size寫入在執行個體存放區上建立的臨時 binlog 快取檔案。

  • 執行個體儲存體已滿時,交易會失敗。

  翻译: