このトピックでは、ApsaraDB RDS for MySQL における単一行ホットスポット更新のパフォーマンステストの方法と結果について説明します。
Inventory Hint を使用すると、ApsaraDB RDS for MySQL における単一行ホットスポット更新のパフォーマンスを向上できます。詳細については、「Inventory Hint」をご参照ください。
テスト環境
このテストでは、2 つの ApsaraDB RDS for MySQL インスタンスを使用します。具体的には、インスタンスタイプ rds.mysql.st.v52 の High-availability Edition インスタンスと、インスタンスタイプ mysql.st.12xlarge.25 の Enterprise Edition インスタンスです。
-
インスタンスバージョン:MySQL 5.7
-
インスタンスタイプ:90 コア、720 GB (専用ホスト)
-
RDS エディション:High-availability Edition および Enterprise Edition
-
ストレージタイプ:ローカルディスク
-
テンプレート:高性能パラメータテンプレート
テストデータ
このテストでは、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 の行に対して同時更新を実行します。
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 High-availability Edition |
12,000 |
|
RDS Enterprise Edition |
30,823 |
図 1. Enterprise Edition のテスト結果
OLTP test statistics:
queries performed:
read: 0
write: 1865967
other: 3731934
total: 5597901
transactions: 1865967 (30822.67 per sec.)
read/write requests: 1865967 (30822.67 per sec.)
other operations: 3731934 (61645.34 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)