Esta página apresenta a metodologia e os resultados do benchmark de atualizações de dados quentes em linha única no ApsaraDB RDS for MySQL com o Inventory Hint. Use esses resultados para entender o máximo de transações por segundo (TPS) alcançável em cenários de escrita com alta concorrência, como deduções de estoque, atualizações de contadores e vendas relâmpago.
Ambiente de teste
Este exemplo usa duas instâncias no teste: uma da série de alta disponibilidade e outra do RDS Enterprise Edition. Os tipos de instância são rds.mysql.st.v52 e mysql.st.12xlarge.25.
Versão do MySQL: MySQL 5.7
Especificações: 90 núcleos de CPU, 720 GB (host dedicado)
Edições da instância: série de alta disponibilidade e RDS Enterprise Edition
Tipo de armazenamento: disco local de alto desempenho
Modelo: modelo de parâmetros de alto desempenho
O teste executa duas instâncias em paralelo: uma do RDS High-availability Edition e outra do RDS Enterprise Edition. Ambas pertencem à família de instâncias de host dedicado.
|
Parâmetro |
Valor |
|
Mecanismo de banco de dados |
MySQL 5.7 |
|
Especificações |
90 núcleos de CPU, 720 GB de memória |
|
Tipo de armazenamento |
Premium Local SSD |
|
Modelo de parâmetros |
Alto desempenho |
|
Tipos de instância |
|
Dados de teste
A tabela de teste contém 100 linhas. Todas as atualizações simultâneas têm como alvo uma única linha (id=100), o que cria um cenário de linha quente com contenção máxima de escrita.
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
Script de teste
O teste executa atualizações simultâneas em id=100 com a seguinte instrução SQL:
UPDATE sbtest1 SET k=k+1 WHERE id=100
O script Lua abaixo gera a carga com o Sysbench. Cada iteração encapsula o UPDATE em uma transação e usa o Inventory Hint (commit_on_success rollback_on_fail target_affect_row(1)) para reduzir a contenção de bloqueios e melhorar o throughput de linha única:
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
Resultados do teste
|
Tipo de instância |
TPS máximo na linha única |
|
RDS High-availability Edition |
12.000 |
|
RDS Enterprise Edition |
31.000 |
Figura 1. Resultados do teste para o RDS Enterprise Edition 
Próximos passos
Inventory Hint — Ative e configure o Inventory Hint na sua instância RDS para atingir esse nível de throughput em linha única.