Benchmarks de desempenho para sincronização unidirecional de dados do DTS entre instâncias ApsaraDB RDS for MySQL, abrangendo sincronização completa, sincronização incremental, atualizações frequentes (hot updates) e operações DDL.
Ambiente de teste
Bancos de dados de origem e destino
A expansão automática de armazenamento está ativada para as instâncias ApsaraDB RDS for MySQL neste teste.
|
Banco de dados |
Região |
Tipo |
Versão |
Especificação |
CPU |
Memória |
|
Banco de dados de origem |
China (Hangzhou) |
Instâncias padrão ApsaraDB RDS for MySQL executando o ApsaraDB RDS High-availability Edition |
8.0 |
mysql.x4.xlarge.2c (dedicado) |
8 |
32 GB |
|
Banco de dados de destino |
Cliente
Adicione o endereço IP da instância ECS que será usada como cliente às listas de permissões de endereços IP das instâncias ApsaraDB RDS for MySQL. Para mais informações, consulte Configurar uma lista de permissões de endereços IP.
|
Tipo |
Região |
Tipo de rede |
SO |
Especificação |
vCPU |
Memória |
IP público |
|
Instância ECS |
China (Hangzhou) |
VPC Nota
A instância ECS utiliza a mesma VPC e vSwitch das instâncias ApsaraDB RDS for MySQL. |
CentOS 7.9 64 bits |
ecs.c7.8xlarge (tipo otimizado para computação c7) |
32 |
64 |
Sim |
Ferramentas de teste
Visão geral
|
Ferramenta |
Versão |
Descrição |
|
SysBench |
1.0.20 |
Ferramenta modular e multithread de benchmark para testes de desempenho de banco de dados em diversas plataformas. |
|
BenchmarkSQL |
5.0 (baseado em Java 8) |
Ferramenta open source de benchmark OLTP para avaliação de desempenho e testes de estresse em bancos de dados. |
Instalação
Instale o Sysbench
-
Instale o Sysbench na instância ECS.
# Install the dependency library of Sysbench. yum -y install make automake libtool pkgconfig libaio-devel yum -y install mariadb-devel openssl-devel # Download the source code of Sysbench. wget "https://codeload.github.com/akopytov/sysbench/zip/refs/tags/1.0.20" -O sysbench-1.0.20.zip # Install the Unzip utility. yum -y install unzip # Decompress the source code. unzip sysbench-1.0.20.zip # Compile the source code. cd sysbench-1.0.20 ./autogen.sh ./configure sed -i 's/MYSQL_OPT_COMPRESSION_ALGORITHMS/MYSQL_OPT_COMPRESS/g' ./src/drivers/mysql/drv_mysql.c make -j # Install Sysbench. make install -
Prepare os scripts Lua: dm_large_table_write_only.lua (escrita em tabelas grandes), dm_hot_update_only.lua (atualização de dados frequentes) e dm_ddl_only.lua (sincronização DDL).
-
Copie os scripts Lua para o diretório de scripts do Sysbench
/usr/local/share/sysbench/na instância ECS.# Copy the script for the scenarios where large tables are used. cp dm_large_table_write_only.lua /usr/local/share/sysbench/ # Copy the script for the hot data update scenario. cp dm_hot_update_only.lua /usr/local/share/sysbench/ # Copy the script for the DDL synchronization scenario. cp dm_ddl_only.lua /usr/local/share/sysbench/
Instale o BenchmarkSQL
# Install Apache Ant.
yum -y install ant
# Download the source code of BenchmarkSQL.
wget "https://github.com/jackysp/benchmarksql/archive/refs/heads/5.0-mysql-support-opt-2.1.zip" -O benchmarksql-5.0-mysql-support-opt-2.1.zip
# Decompress the source code.
unzip benchmarksql-5.0-mysql-support-opt-2.1.zip
# Build the source code.
cd benchmarksql-5.0-mysql-support-opt-2.1
ant
Métodos de teste
Visão geral
Os métodos a seguir testam o desempenho da sincronização de dados do DTS sob diferentes perspectivas.
|
Ferramenta de teste |
Modelo ou script de teste |
Recursos testados |
|
Sysbench |
oltp_write_only |
Sincronização completa e incremental de dados |
|
dm_large_table_write_only |
Sincronização completa e incremental de dados |
|
|
dm_hot_update_only |
Sincronização incremental de dados |
|
|
dm_ddl_only |
Sincronização incremental de dados |
|
|
BenchmarkSQL |
TPC-C |
Sincronização completa e incremental de dados |
Procedimento
oltp_write_only
-
Prepare os dados básicos.
Na instância ECS, utilize o Sysbench para criar 10 tabelas na instância ApsaraDB RDS for MySQL de origem, com 10 milhões de linhas cada.
NotaExecute o comando a seguir no diretório
/usr/local/share/sysbench/:sysbench --db-driver=mysql \ --mysql-host={HOST} \ --mysql-port={PORT} \ --mysql-user= \ --mysql-password= \ --mysql-db={DATABASE} \ --threads=64 --table_size=10000000 --tables=10 oltp_write_only.lua \ prepareParâmetro
Descrição
Observações
Referências
--mysql-host
O endpoint interno da instância ApsaraDB RDS for MySQL.
Substitua
{HOST}pelo endpoint interno da instância ApsaraDB RDS for MySQL.--mysql-port
A porta interna da instância ApsaraDB RDS for MySQL.
Substitua
{PORT}pelo número da porta interna da instância ApsaraDB RDS for MySQL.--mysql-user
Nome de usuário da conta do banco de dados.
Certifique-se de que a conta possua as permissões necessárias.
--mysql-password
Senha da conta do banco de dados.
--mysql-db
Banco de dados alvo do teste de estresse.
Crie o banco de dados antecipadamente e substitua
{DATABASE}pelo nome correspondente.--tables
Quantidade de tabelas.
Definido como 10 neste exemplo.
N/A
--table_size
Número de linhas por tabela.
Definido como 10000000 neste exemplo.
-
Crie uma tarefa de sincronização de dados do DTS.
Selecione Schema Synchronization e Full Data Synchronization no parâmetro Synchronization Types. Para mais informações, consulte RDS for MySQL: Sincronização unidirecional de dados.
Aguarde a conclusão da sincronização completa dos dados.
-
Realize testes de estresse na sincronização incremental de dados.
Utilize o modelo oltp_write_only na instância ECS para submeter o banco de dados de origem a testes de estresse e gerar logs binários.
NotaProporção das diferentes operações DML: INSERT:UPDATE:DELETE = 1:2:1.
sysbench --db-driver=mysql \ --mysql-host={HOST} \ --mysql-port={PORT} \ --mysql-user= \ --mysql-password= \ --mysql-db={DATABASE} \ --threads=64 --table_size=1000000 --tables=10 --time=600 oltp_write_only.lua \ runParâmetro
Descrição
Observações
--time
Duração do teste de estresse em segundos.
Definido como 600 neste exemplo.
--threads
Quantidade de threads simultâneas.
Definido como 64 neste exemplo.
-
Na página Performance Monitoring da tarefa de sincronização de dados do DTS, visualize o desempenho da tarefa.
Para mais informações, consulte Monitorar o desempenho da tarefa.
dm_large_table_write_only
-
Prepare os dados básicos.
Na instância ECS, utilize o Sysbench para criar 10 tabelas na instância ApsaraDB RDS for MySQL de origem, com 10.000 linhas cada.
NotaExecute o comando a seguir no diretório
/usr/local/share/sysbench/:sysbench --db-driver=mysql \ --mysql-host={HOST} \ --mysql-port={PORT} \ --mysql-user= \ --mysql-password= \ --mysql-db={DATABASE} \ --threads=64 --table_size=10000 --tables=10 dm_large_table_write_only.lua \ prepareParâmetro
Descrição
Observações
Referências
--mysql-host
O endpoint interno da instância ApsaraDB RDS for MySQL.
Substitua
{HOST}pelo endpoint interno da instância ApsaraDB RDS for MySQL.--mysql-port
A porta interna da instância ApsaraDB RDS for MySQL.
Substitua
{PORT}pelo número da porta interna da instância ApsaraDB RDS for MySQL.--mysql-user
Nome de usuário da conta do banco de dados.
Certifique-se de que a conta possua as permissões necessárias.
--mysql-password
Senha da conta do banco de dados.
--mysql-db
Banco de dados alvo do teste de estresse.
Crie o banco de dados antecipadamente e substitua
{DATABASE}pelo nome correspondente.--tables
Quantidade de tabelas.
Definido como 10 neste exemplo.
N/A
--table_size
Número de linhas por tabela.
Definido como 10000 neste exemplo.
-
Crie uma tarefa de sincronização de dados do DTS.
Selecione Schema Synchronization e Full Data Synchronization no parâmetro Synchronization Types. Para mais informações, consulte RDS for MySQL: Sincronização unidirecional de dados.
Aguarde a conclusão da sincronização completa dos dados.
-
Realize testes de estresse na sincronização incremental de dados.
Utilize o modelo dm_large_table_write_only na instância ECS para submeter o banco de dados de origem a testes de estresse e gerar logs binários.
sysbench --db-driver=mysql \ --mysql-host={HOST} \ --mysql-port={PORT} \ --mysql-user= \ --mysql-password= \ --mysql-db={DATABASE} \ --threads=64 --table_size=10000 --tables=10 --time=600 dm_large_table_write_only.lua \ runParâmetro
Descrição
Observações
--time
Duração do teste de estresse em segundos.
Definido como 600 neste exemplo.
--threads
Quantidade de threads simultâneas.
Definido como 64 neste exemplo.
-
Na página Performance Monitoring da tarefa de sincronização de dados do DTS, visualize o desempenho da tarefa.
Para mais informações, consulte Monitorar o desempenho da tarefa.
dm_hot_update_only
-
Crie uma tarefa de sincronização de dados do DTS.
Não selecione Full Data Synchronization no parâmetro Synchronization Types. Caso o banco de dados e as tabelas correspondentes não tenham sido criados na instância ApsaraDB RDS for MySQL de destino, selecione Schema Synchronization. Para mais informações, consulte RDS for MySQL: Sincronização unidirecional de dados.
-
Inicialize os dados nas tabelas que serão submetidas ao teste de estresse.
sysbench --db-driver=mysql \ --mysql-host={HOST} \ --mysql-port={PORT} \ --mysql-user= \ --mysql-password= \ --mysql-db={DATABASE} \ --threads=64 --tables=2 dm_hot_update_only.lua \ prepareParâmetro
Descrição
Observações
Referências
--mysql-host
O endpoint interno da instância ApsaraDB RDS for MySQL.
Substitua
{HOST}pelo endpoint interno da instância ApsaraDB RDS for MySQL.--mysql-port
A porta interna da instância ApsaraDB RDS for MySQL.
Substitua
{PORT}pelo número da porta interna da instância ApsaraDB RDS for MySQL.--mysql-user
Nome de usuário da conta do banco de dados.
Certifique-se de que a conta possua as permissões necessárias.
--mysql-password
Senha da conta do banco de dados.
--mysql-db
Banco de dados alvo do teste de estresse.
Crie o banco de dados antecipadamente e substitua
{DATABASE}pelo nome correspondente.--tables
Quantidade de tabelas.
Definido como 2 neste exemplo.
N/A
-
Realize testes de estresse na sincronização incremental de dados.
Utilize o modelo dm_hot_update_only na instância ECS para submeter o banco de dados de origem a testes de estresse e gerar logs binários.
sysbench --db-driver=mysql \ --mysql-host={HOST} \ --mysql-port={PORT} \ --mysql-user= \ --mysql-password= \ --mysql-db={DATABASE} \ --threads=64 --tables=2 --time=600 dm_hot_update_only.lua \ runParâmetro
Descrição
Observações
--time
Duração do teste de estresse em segundos.
Definido como 600 neste exemplo.
--threads
Quantidade de threads simultâneas.
Definido como 64 neste exemplo.
-
Na página Performance Monitoring da tarefa de sincronização de dados do DTS, visualize o desempenho da tarefa.
Para mais informações, consulte Monitorar o desempenho da tarefa.
dm_ddl_only
-
Crie uma tarefa de sincronização de dados do DTS.
Não selecione Full Data Synchronization no parâmetro Synchronization Types. Caso o banco de dados e as tabelas correspondentes não tenham sido criados na instância ApsaraDB RDS for MySQL de destino, selecione Schema Synchronization. Para mais informações, consulte RDS for MySQL: Sincronização unidirecional de dados.
-
Realize testes de estresse na sincronização incremental de dados.
Utilize o modelo dm_ddl_only na instância ECS para submeter o banco de dados de origem a testes de estresse e gerar logs binários.
sysbench --db-driver=mysql \ --mysql-host={HOST} \ --mysql-port={PORT} \ --mysql-user= \ --mysql-password= \ --mysql-db={DATABASE} \ --threads=64 --tables=2 --time=600 dm_ddl_only.lua \ runParâmetro
Descrição
Observações
Referências
--mysql-host
O endpoint interno da instância ApsaraDB RDS for MySQL.
Substitua
{HOST}pelo endpoint interno da instância ApsaraDB RDS for MySQL.--mysql-port
A porta interna da instância ApsaraDB RDS for MySQL.
Substitua
{PORT}pelo número da porta interna da instância ApsaraDB RDS for MySQL.--mysql-user
Nome de usuário da conta do banco de dados.
Certifique-se de que a conta possua as permissões necessárias.
--mysql-password
Senha da conta do banco de dados.
--mysql-db
Banco de dados alvo do teste de estresse.
Crie o banco de dados antecipadamente e substitua
{DATABASE}pelo nome correspondente.--threads
Quantidade de threads simultâneas.
Definido como 64 neste exemplo.
N/A
--tables
Quantidade de tabelas.
Definido como 2 neste exemplo.
--time
Duração do teste de estresse em segundos.
Definido como 600. As operações DDL são executadas durante 600 segundos.
-
Na página Performance Monitoring da tarefa de sincronização de dados do DTS, visualize o desempenho da tarefa.
Para mais informações, consulte Monitorar o desempenho da tarefa.
TPC-C
-
Prepare os dados básicos.
-
Acesse o diretório de trabalho do BenchmarkSQL na instância ECS.
cd benchmarksql-5.0-mysql-support-opt-2.1/run/ -
Configure a conexão da instância de origem no arquivo props.mysql.
vim props.mysqlExemplo de configuração. Substitua
{HOST},{PORT},{USER},{PASSWORD}e{DATABASE}pelas informações da instância ApsaraDB RDS for MySQL de origem.db=mysql driver=com.mysql.jdbc.Driver conn=jdbc:mysql://{HOST}:{PORT}/{DATABASE}?readOnlyPropagatesToServer=false&rewriteBatchedStatements=true&failOverReadOnly=false&connectTimeout=3000&allowMultiQueries=true&clobberStreamingResults=true&characterEncoding=utf8&netTimeoutForStreamingResults=0&autoReconnect=true user={USER} password={PASSWORD} warehouses=1000 loadWorkers=100 terminals=128 //To run specified transactions per terminal- runMins must equal zero runTxnsPerTerminal=0 //To run for specified minutes- runTxnsPerTerminal must equal zero runMins=10 //Number of total transactions per minute limitTxnsPerMin=0 //Set to true to run in 4.x compatible mode. Set to false to use the //entire configured database evenly. terminalWarehouseFixed=true //The following five values must add up to 100 //The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec newOrderWeight=45 paymentWeight=43 orderStatusWeight=4 deliveryWeight=4 stockLevelWeight=4 // Directory name to create for collecting detailed result data. // Comment this out to suppress. resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS // osCollectorScript=./misc/os_collector_linux.py // osCollectorInterval=1 // osCollectorSSHAddr=user@dbhost // osCollectorDevices=net_eth0 blk_sdaParâmetro
Descrição
Observações
conn
Configurações de conexão da instância. Substitua {HOST}, {PORT} e {DATABASE}:
-
HOST: endpoint interno da instância ApsaraDB RDS for MySQL.
-
PORT: porta interna da instância ApsaraDB RDS for MySQL.
-
DATABASE: banco de dados de teste na instância ApsaraDB RDS for MySQL.
Substitua
{HOST},{PORT}e{DATABASE}pelas informações correspondentes.user
Nome de usuário da conta do banco de dados.
Substitua
{USER}pela informação correspondente.password
Senha da conta do banco de dados.
Substitua
{PASSWORD}pela informação correspondente.runMins
Duração do teste de estresse em minutos.
Definido como 10 neste exemplo.
-
-
Inicialize os dados de teste TPC-C.
./runDatabaseBuild.sh props.mysqlCria 10 tabelas com aproximadamente 500 milhões de linhas no total.
-
-
Crie uma tarefa de sincronização de dados do DTS.
Selecione Schema Synchronization e Full Data Synchronization no parâmetro Synchronization Types. Para mais informações, consulte RDS for MySQL: Sincronização unidirecional de dados.
Aguarde a conclusão da sincronização completa dos dados.
-
Realize testes de estresse na sincronização incremental de dados.
Utilize o modelo TPC-C na instância ECS para submeter o banco de dados de origem a testes de estresse e gerar logs binários.
./runBenchmark.sh props.mysqlParâmetro
Descrição
Observações
--time
Duração do teste de estresse em segundos.
Definido como 600 neste exemplo.
--threads
Quantidade de threads simultâneas.
Definido como 64 neste exemplo.
-
Na página Performance Monitoring da tarefa de sincronização de dados do DTS, visualize o desempenho da tarefa.
Para mais informações, consulte Monitorar o desempenho da tarefa.
Resultados dos testes
Para obter o desempenho máximo de sincronização incremental por tipo de instância, consulte Dados de desempenho de sincronização. O desempenho é medido em linhas por segundo (RPS).
oltp_write_only
Sincronização completa de dados
|
Tipo de instância |
RPS (linha/s) |
BPS (MB/s) |
Duração (s) |
|
micro |
17,95W |
34,19 |
557 |
|
small |
18,18W |
34,63 |
550 |
|
medium |
19,64W |
37,42 |
509 |
|
large |
19,96W |
38,02 |
501 |
Sincronização incremental de dados
|
Tipo de instância |
RPS (linha/s) |
BPS (KB/s) |
Desempenho máximo atingido |
|
micro |
200 |
86 |
Sim |
|
small |
2000 |
982 |
Sim |
|
medium |
5000 |
2605 |
Sim |
|
large |
11000 |
5489 |
Sim |
dm_large_table_write_only
Sincronização completa de dados
|
Tipo de instância |
RPS (linha/s) |
BPS (MB/s) |
Duração (s) |
|
micro |
469,48 |
35,09 MB |
213 |
|
small |
480,77 |
35,94 MB |
208 |
|
medium |
552,49 |
41,30 MB |
181 |
|
large |
584,80 |
43,71 |
171 |
Sincronização incremental de dados
|
Tipo de instância |
RPS (linha/s) |
BPS (KB/s) |
Desempenho máximo atingido |
|
micro |
200 |
9086,3 |
Sim |
|
small |
683 |
31741,51 |
Não |
|
medium |
1033 |
56676,41 |
Não |
|
large |
1537 |
84344,32 |
Não |
dm_hot_update_only
Por padrão, o parâmetro trans.hot.merge.enable está definido como false. Para mais informações sobre como modifique esse parâmetro, consulte Modifique parâmetros da instância.
Parâmetro trans.hot.merge.enable definido como false.
Sincronização incremental de dados
|
Tipo de instância |
RPS (linha/s) |
Desempenho máximo atingido |
|
micro |
200 |
Sim |
|
small |
1200 |
Não |
|
medium |
1200 |
Não |
|
large |
1200 |
Não |
Parâmetro trans.hot.merge.enable definido como true.
Sincronização incremental de dados
|
Tipo de instância |
RPS (linha/s) |
Desempenho máximo atingido |
|
micro |
200 |
Sim |
|
small |
2000 |
Sim |
|
medium |
5000 |
Sim |
|
large |
11000 |
Sim |
dm_ddl_only
Sincronização incremental de dados
|
Tipo de instância |
RPS (linha/s) |
Desempenho máximo atingido |
|
micro |
68 |
Não |
|
small |
68 |
Não |
|
medium |
68 |
Não |
|
large |
68 |
Não |
TPC-C
Sincronização completa de dados
|
Tipo de instância |
RPS (linha/s) |
BPS (MB/s) |
Duração (s) |
|
micro |
12,04W |
17,52 |
4143 |
|
small |
12,09W |
17,59 |
4127 |
|
medium |
12,73W |
18,52 |
3921 |
|
large |
13,50W |
19,64 |
3696 |
Sincronização incremental de dados
|
Tipo de instância |
RPS (linha/s) |
BPS (KB/s) |
Desempenho máximo atingido |
|
micro |
200 |
138 |
Sim |
|
small |
2000 |
1920 |
Sim |
|
medium |
5000 |
3847 |
Sim |
|
large |
11000 |
7542 |
Sim |