寫(xiě)優(yōu)化
RDS MySQL的寫(xiě)優(yōu)化功能通過(guò)關(guān)閉實(shí)例的innodb_doublewrite(InnoDB雙寫(xiě)機(jī)制)來(lái)提升寫(xiě)入效率。本文為您介紹該功能的使用方法以及性能測(cè)試結(jié)果。
背景信息
MySQL的InnoDB引擎采用雙寫(xiě)技術(shù)確保數(shù)據(jù)頁(yè)的原子性,以防止半寫(xiě)錯(cuò)誤。當(dāng)InnoDB需要刷新臟頁(yè)時(shí),首先將數(shù)據(jù)寫(xiě)入雙寫(xiě)緩沖區(qū);待該緩沖區(qū)滿后,刷臟線程需等待上一批次的數(shù)據(jù)完成寫(xiě)盤(pán)才能繼續(xù)。每次刷新數(shù)據(jù)頁(yè)都涉及兩次寫(xiě)操作,這增加了磁盤(pán)I/O資源的消耗。
對(duì)于寫(xiě)入密集型應(yīng)用,磁盤(pán)I/O常成為性能瓶頸,InnoDB雙寫(xiě)機(jī)制會(huì)顯著增加磁盤(pán)帶寬負(fù)擔(dān),進(jìn)而影響實(shí)例整體性能。
功能簡(jiǎn)介
開(kāi)啟RDS MySQL的寫(xiě)優(yōu)化功能后,可以確保每次數(shù)據(jù)頁(yè)寫(xiě)入的原子性,從而安全地關(guān)閉InnoDB雙寫(xiě)機(jī)制。這不僅降低了I/O寫(xiě)入量,還簡(jiǎn)化了刷臟過(guò)程,大幅度降低實(shí)例寫(xiě)盤(pán)的IOPS及帶寬需求,達(dá)到提升實(shí)例寫(xiě)性能的目的。測(cè)試詳情請(qǐng)參見(jiàn)性能測(cè)試。
前提條件
數(shù)據(jù)庫(kù)引擎及版本:僅支持MySQL 5.7或8.0實(shí)例。
存儲(chǔ)類型:僅支持ESSD云盤(pán)與通用云盤(pán)。
開(kāi)通階段:僅支持創(chuàng)建實(shí)例時(shí)或存量倚天版(高可用/集群系列)實(shí)例開(kāi)啟寫(xiě)優(yōu)化功能。
費(fèi)用說(shuō)明
寫(xiě)優(yōu)化功能免費(fèi),開(kāi)啟和關(guān)閉寫(xiě)優(yōu)化都不會(huì)產(chǎn)生額外費(fèi)用。
注意事項(xiàng)
開(kāi)啟和關(guān)閉寫(xiě)優(yōu)化功能時(shí),會(huì)導(dǎo)致實(shí)例重啟,請(qǐng)謹(jǐn)慎操作。
主實(shí)例開(kāi)啟寫(xiě)優(yōu)化功能時(shí),無(wú)法關(guān)閉只讀實(shí)例的寫(xiě)優(yōu)化功能,避免因性能不一致導(dǎo)致復(fù)制延遲。
創(chuàng)建只讀實(shí)例與備份恢復(fù)場(chǎng)景中,寫(xiě)優(yōu)化繼承原實(shí)例配置。
開(kāi)通寫(xiě)優(yōu)化
新購(gòu)實(shí)例時(shí)標(biāo)準(zhǔn)版實(shí)例寫(xiě)優(yōu)化功能默認(rèn)關(guān)閉,需要手動(dòng)開(kāi)通。倚天版實(shí)例寫(xiě)優(yōu)化功能默認(rèn)開(kāi)通。
管理寫(xiě)優(yōu)化
已開(kāi)通寫(xiě)優(yōu)化功能的實(shí)例才可以在實(shí)例基本信息頁(yè)管理寫(xiě)優(yōu)化。
訪問(wèn)RDS實(shí)例列表,在上方選擇地域,然后單擊目標(biāo)實(shí)例ID。
在基本信息頁(yè)面,單擊寫(xiě)優(yōu)化開(kāi)關(guān),開(kāi)啟或關(guān)閉寫(xiě)優(yōu)化。
性能測(cè)試
測(cè)試準(zhǔn)備
測(cè)試資源與方法:本次測(cè)試分別在高可用系列通用云盤(pán)實(shí)例的通用規(guī)格和獨(dú)享規(guī)格上執(zhí)行數(shù)據(jù)寫(xiě)入操作,觀察實(shí)例開(kāi)啟寫(xiě)優(yōu)化功能前后的性能差異。
產(chǎn)品系列
存儲(chǔ)類型
實(shí)例規(guī)格
規(guī)格代碼
CPU和內(nèi)存
高可用
通用云盤(pán)
通用規(guī)格
mysql.n2.large.2c
4核8 GB
高可用
通用云盤(pán)
獨(dú)享規(guī)格
mysql.x2.large.2c
4核8 GB
測(cè)試工具安裝:本文以CentOS系統(tǒng)安裝Sysbench為例,你可以執(zhí)行以下命令進(jìn)行安裝,詳情請(qǐng)參見(jiàn)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
測(cè)試數(shù)據(jù)準(zhǔn)備:300 GB數(shù)據(jù)量(30張數(shù)據(jù)表,每張表4000萬(wàn)行)
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare
本測(cè)試所涉及的參數(shù)說(shuō)明如下。
參數(shù)名
描述
tables
表數(shù)量,以30張為例。
table_size
每個(gè)表的記錄行數(shù),以4000萬(wàn)行為例。
rand-type
隨機(jī)數(shù)分布類型,以special為例。
rand-spec-pct
特定隨機(jī)數(shù)分布中被視為“特殊”值的百分比,以15%為例。
threads
并發(fā)線程數(shù),以64為例。
time
測(cè)試的持續(xù)時(shí)間(單位:秒),以100秒為例。
測(cè)試寫(xiě)性能
在測(cè)試實(shí)例中執(zhí)行以下命令,對(duì)比開(kāi)啟和關(guān)閉寫(xiě)優(yōu)化功能的QPS性能。
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 run
測(cè)試結(jié)果
寫(xiě)優(yōu)化測(cè)試結(jié)果
4核8 GB標(biāo)準(zhǔn)版高可用系列通用型RDS MySQL實(shí)例的測(cè)試結(jié)果如下:
開(kāi)啟寫(xiě)優(yōu)化后,QPS性能提升48%。
4核8 GB標(biāo)準(zhǔn)版高可用系列獨(dú)享型RDS MySQL實(shí)例的測(cè)試結(jié)果如下:
開(kāi)啟寫(xiě)優(yōu)化后,QPS性能提升47%。
寫(xiě)優(yōu)化 + IO加速測(cè)試結(jié)果
關(guān)于通用云盤(pán)IO加速功能的介紹,請(qǐng)參見(jiàn)通用云盤(pán)IO加速功能。
4核8 GB標(biāo)準(zhǔn)版高可用系列通用型RDS MySQL實(shí)例的測(cè)試結(jié)果如下:
開(kāi)啟寫(xiě)優(yōu)化后,QPS性能提升93%。