全部產品
Search
文件中心

ApsaraDB RDS:16K原子寫

更新時間:May 22, 2025

RDS MySQL的16K原子寫功能通過關閉執行個體的innodb_doublewrite(InnoDB雙寫機制)來提升寫入效率。本文為您介紹該功能的使用方法以及效能測試結果。

背景資訊

MySQL的InnoDB引擎資料的最小讀寫單位是Page(大小一般為16 KB),但檔案系統的IO最小單位一般是4 KB。當資料頁寫入磁碟時,如果發生斷電等極端情況,可能會導致InnoDB中部分資料頁未完全寫入磁碟。因此,InnoDB引入了雙寫的機制以來確保資料頁的原子性,以防止半寫錯誤。當InnoDB需要重新整理髒頁時,首先將資料寫入雙寫緩衝區;待該緩衝區滿後,刷髒線程需等待上一批次的資料完成寫盤才能繼續。每次重新整理資料頁都涉及兩次寫操作,這增加了磁碟I/O資源的消耗。

對於寫入密集型應用,磁碟I/O常成為效能瓶頸,InnoDB雙寫機制會顯著增加磁碟頻寬負擔,進而影響執行個體整體效能。

功能簡介

RDS MySQL支援全鏈路的16K原子寫,開啟16K原子寫功能後,可以確保每次資料頁寫入的原子性,從而安全地關閉InnoDB雙寫機制。這不僅降低了I/O寫入量,還簡化了刷髒過程,大幅度降低執行個體寫盤的IOPS及頻寬需求,達到提升執行個體寫效能的目的。

開啟16K原子寫功能後,QPS至少提升40%,詳見效能測試

前提條件

  • 資料庫引擎及版本:僅支援MySQL 5.7或8.0執行個體。

  • 儲存類型:僅支援ESSD雲端硬碟與高效能雲端硬碟。

費用說明

16K原子寫功能免費,開啟和關閉16K原子寫都不會產生額外費用。

注意事項

  • 開啟和關閉16K原子寫功能時,會導致執行個體重啟,請謹慎操作。

  • 主執行個體開啟16K原子寫功能時,無法關閉唯讀執行個體的16K原子寫功能,避免因效能不一致導致複寫延遲。

  • 建立唯讀執行個體與備份恢複情境中,16K原子寫功能繼承原執行個體配置。

管理16K原子寫

重要

為提升執行個體效能和使用體驗,滿足開啟16K原子寫前提條件和以下條件的執行個體會預設開啟16K原子寫:

  • 新購執行個體:2025年5月14日及之後通過RDS控制台購買的執行個體。

  • 存量倚天版執行個體:執行個體未變更過產品類型

存量標準版執行個體不支援開通16K原子寫功能。

支援16K原子寫功能的執行個體可以在控制台上手動開啟或關閉該功能

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 基本資料頁面,單擊16K原子寫開關,開啟或關閉16K原子寫。

效能測試

測試準備

  • 測試資源與方法:本次測試分別在高可用系列高效能雲端硬碟執行個體的通用規格和獨享規格上執行資料寫入操作,觀察執行個體開啟16K原子寫功能前後的效能差異。

    產品系列

    儲存類型

    執行個體規格

    規格代碼

    CPU和記憶體

    高可用

    高效能雲端硬碟

    通用規格

    mysql.n2.large.2c

    4核8 GB

    高可用

    高效能雲端硬碟

    獨享規格

    mysql.x2.large.2c

    4核8 GB

  • 測試載入器安裝:本文以CentOS系統安裝Sysbench為例,你可以執行以下命令進行安裝,詳情請參見Sysbench官方文檔

    git clone https://github.com/akopytov/sysbench.git
    cd sysbench
    git checkout 0.5
    
    yum -y install make automake libtool pkgconfig libaio-devel
    yum -y install mariadb-devel
    
    
    ./autogen.sh
    ./configure
    make -j
    make install
     
  • 測試資料準備:300 GB資料量(30張資料表,每張表4000萬行)

    sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare

    本測試所涉及的參數說明如下。

    參數名

    描述

    tables

    表數量,以30張為例。

    table_size

    每個表的記錄行數,以4000萬行為例。

    rand-type

    隨機數分布類型,以special為例。

    rand-spec-pct

    特定隨機數分布中被視為“特殊”值的百分比,以15%為例。

    threads

    並發線程數,以64為例。

    time

    測試的期間(單位:秒),以100秒為例。

測試寫效能

在測試執行個體中執行以下命令,對比開啟和關閉16K原子寫功能的QPS效能。

sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 run

測試結果

16K原子寫測試結果

  • 4核8 GB標準版高可用系列通用型RDS MySQL執行個體的測試結果如下:

    開啟16K原子寫功能(橙色)後,QPS效能提升48%。

    image

  • 4核8 GB標準版高可用系列獨享型RDS MySQL執行個體的測試結果如下:

    開啟16K原子寫功能(橙色)後,QPS效能提升47%。

    image

16K原子寫 +Buffer Pool Extension(BPE)測試結果

說明

關於高效能雲端硬碟Buffer Pool Extension(BPE)功能的介紹,請參見Buffer Pool Extension(BPE)功能

4核8 GB標準版高可用系列通用型RDS MySQL執行個體的測試結果如下:

開啟16K原子寫與Buffer Pool Extension(BPE)(橙色)功能後,QPS效能提升93%。image

相關文檔