Esta página describe la metodología y los resultados de las pruebas de referencia para actualizaciones de datos frecuentes en una sola fila en ApsaraDB RDS for MySQL mediante Inventory Hint. Use estos resultados para comprender el máximo de transacciones por segundo (TPS) alcanzable en escenarios de escritura con alta concurrencia, como deducciones de inventario, actualizaciones de contadores y ventas flash.
Entorno de prueba
Este ejemplo usa dos instancias para la prueba: una instancia de la serie de alta disponibilidad y una instancia de RDS Enterprise Edition. Los tipos de instancia son rds.mysql.st.v52 y mysql.st.12xlarge.25.
Versión de MySQL: MySQL 5.7
Especificaciones: 90 núcleos, 720 GB (host dedicado)
Ediciones de la instancia: serie de alta disponibilidad y RDS Enterprise Edition
Tipo de almacenamiento: disco local de alto rendimiento
Plantilla: plantilla de parámetros de alto rendimiento
La prueba ejecuta dos instancias en paralelo: una instancia de RDS High-availability Edition y una instancia de RDS Enterprise Edition. Ambas usan la familia de instancias de host dedicado.
|
Parámetro |
Valor |
|
Motor de base de datos |
MySQL 5.7 |
|
Especificaciones |
90 núcleos de CPU, 720 GB de memoria |
|
Tipo de almacenamiento |
Premium Local SSD |
|
Plantilla de parámetros |
Alto rendimiento |
|
Tipos de instancia |
|
Datos de prueba
La tabla de prueba contiene 100 filas. Todas las actualizaciones concurrentes se dirigen a una sola fila (id=100), lo que genera un escenario de fila activa con la máxima contención de escritura.
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 prueba
La prueba ejecuta actualizaciones concurrentes en id=100 mediante la siguiente sentencia SQL:
UPDATE sbtest1 SET k=k+1 WHERE id=100
El siguiente script Lua genera la carga con Sysbench. Cada iteración envuelve la sentencia UPDATE en una transacción y usa Inventory Hint (commit_on_success rollback_on_fail target_affect_row(1)) para reducir la contención de bloqueos y mejorar el rendimiento en operaciones de fila ú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 de la prueba
|
Tipo de instancia |
TPS máximo en la fila única |
|
RDS High-availability Edition |
12,000 |
|
RDS Enterprise Edition |
31,000 |
Figura 1. Resultados de la prueba para RDS Enterprise Edition 
Pasos siguientes
Inventory Hint — Habilite y configure Inventory Hint en su instancia de RDS para alcanzar este nivel de rendimiento en operaciones de fila única.