このトピックでは、テーブルの単一行のホットデータを更新する際に、ApsaraDB RDS for MySQLインスタンスのパフォーマンスをテストおよび分析する方法について説明します。
インベントリのヒント機能を使用して、テーブルの単一行のホットデータを更新する際のApsaraDB RDS for MySQLインスタンスのパフォーマンスを向上させることができます。 機能の詳細については、「インベントリのヒント」をご参照ください。
テスト環境
このテストでは、RDS High-availability Editionを実行し、RDS. mysql.st.v52インスタンスタイプを使用するrdsインスタンスと、RDS Enterprise Editionを実行し、mysql.st.12xlarge.25インスタンスタイプを使用するRDSインスタンスが使用されます。
データベースエンジンとバージョン: MySQL 5.7
仕様: 90 CPUコア、720 GBのメモリ (専用ホストインスタンスファミリ)
RDSエディション: RDS High-availability EditionおよびRDS 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テストスクリプト
次のSQL文を実行して, 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高可用性エディション | 12,000 |
RDSエンタープライズエディション | 31,000 |
図 1. RDS Enterprise Editionのテスト結果