本文介紹雲資料庫RDS MySQL單行熱點更新的效能測試方法和結果。
結合Inventory Hint,可提升雲資料庫RDS MySQL的單行熱點更新效能。Inventory Hint的詳細資料,請參見Inventory Hint。
測試環境
本樣本中,分別使用兩個執行個體進行測試(高可用系列和三節點企業系列),規格碼為rds.mysql.st.v52和mysql.st.12xlarge.25。
執行個體版本:MySQL 5.7
執行個體規格:90核 720GB(獨佔物理機型)
執行個體系列:高可用系列和三節點企業系列
執行個體儲存類型:高效能本地碟
執行個體模板:高績效參數模板
測試資料
測試資料為單表,表內100行記錄。表結構如下:
CREATE TABLE `sbtest1`
(
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
,`k` INT(10) UNSIGNED NOT NULL DEFAULT '0'
,`c` CHAR(120) NOT NULL DEFAULT ''
,`pad` CHAR(60) NOT NULL DEFAULT ''
,PRIMARY KEY (`id`)
,KEY `k_1` (`k`)
)
ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT
CHARSET=utf8 MAX_ROWS=1000000測試指令碼
對id=100的記錄進行並發更新,SQL如下:
UPDATE sbtest1 SET k=k+1 WHERE id=100測試的Lua指令碼如下:
pathtest = string.match(test,"(.*/)")
if pathtest then
dofile(pathtest .."common.lua")
else
require("common")
end
function thread_init(thread_id)
set_vars()
end
function event(thread_id)
local table_name
table_name ="sbtest".. sb_rand_uniform(1, oltp_tables_count)
rs = db_query("begin")
rs = db_query("update /*+commit_on_success rollback_on_fail target_affect_row(1) */ sbtest1 SET k=k+1 WHERE id=100")
rs =db_query("commit")
end測試結果
執行個體類型 | 單行記錄更新峰值(TPS) |
RDS高可用系列 | 1.2萬 |
RDS三節點企業系列 | 3.1萬 |
圖 1. 三節點企業系列測試結果