Benchmarks de desempenho para a sincronização de dados unidirecional do DTS entre instâncias do ApsaraDB RDS for MySQL, abrangendo sincronização completa, sincronização incremental, atualizações quentes 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 do 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 Standard do ApsaraDB RDS for MySQL com a RDS High-availability Edition |
8.0 |
mysql.x4.xlarge.2c (dedicated) |
8 |
32 GB |
|
Banco de dados de destino |
Cliente
Adicione o endereço IP da instância ECS a ser usada como cliente às listas de permissões de IP das instâncias do ApsaraDB RDS for MySQL. Para mais informações, consulte Configure an IP address whitelist.
|
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 usa a mesma VPC e o mesmo vSwitch que as instâncias do 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 |
Uma ferramenta de benchmark modular e multithread para testes de desempenho de banco de dados em várias plataformas. |
|
BenchmarkSQL |
5.0 (baseado em Java 8) |
Uma ferramenta de benchmark OLTP de código aberto para avaliação de desempenho e testes de estresse de banco de dados. |
Instalação
Instalar 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 (gravação em tabelas grandes), dm_hot_update_only.lua (atualizações de dados quentes) 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/
Instalar 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 aspectos.
|
Ferramenta de teste |
Modelo ou script de teste |
Recursos testados |
|
Sysbench |
oltp_write_only |
Sincronização de dados completa e incremental |
|
dm_large_table_write_only |
Sincronização de dados completa e incremental |
|
|
dm_hot_update_only |
Sincronização de dados incremental |
|
|
dm_ddl_only |
Sincronização de dados incremental |
|
|
BenchmarkSQL |
TPC-C |
Sincronização de dados completa e incremental |
Procedimento
oltp_write_only
-
Prepare os dados básicos.
Na instância ECS, use o Sysbench para criar 10 tabelas na instância do ApsaraDB RDS for MySQL de origem, com 10 milhões de linhas cada.
NotaExecute o seguinte comando 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 do ApsaraDB RDS for MySQL.
Substitua
{HOST}pelo endpoint interno da instância do ApsaraDB RDS for MySQL.--mysql-port
A porta interna da instância do ApsaraDB RDS for MySQL.
Substitua
{PORT}pelo número da porta interna da instância do ApsaraDB RDS for MySQL.--mysql-user
O nome de usuário da conta do banco de dados.
Certifique-se de que a conta tenha as permissões necessárias.
--mysql-password
A senha da conta do banco de dados.
--mysql-db
O banco de dados para o teste de estresse.
Crie o banco de dados com antecedência e substitua
{DATABASE}pelo seu nome.--tables
Número de tabelas.
Defina como 10 neste exemplo.
N/A
--table_size
Número de linhas por tabela.
Defina como 10000000 neste exemplo.
-
Crie uma tarefa de sincronização de dados do DTS.
Selecione Schema Synchronization e Full Data Synchronization para o parâmetro Synchronization Types. Para mais informações, consulte One-way data synchronization between ApsaraDB RDS for MySQL instances.
Aguarde a conclusão da sincronização completa de dados.
-
Execute testes de estresse na sincronização de dados incremental.
Use o modelo oltp_write_only na instância ECS para executar testes de estresse no banco de dados de origem e gerar logs binários.
NotaA proporçã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.
Defina como 600 neste exemplo.
--threads
Número de threads concorrentes.
Defina 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 Monitor task performance.
dm_large_table_write_only
-
Prepare os dados básicos.
Na instância ECS, use o Sysbench para criar 10 tabelas na instância do ApsaraDB RDS for MySQL de origem, com 10.000 linhas cada.
NotaExecute o seguinte comando 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 do ApsaraDB RDS for MySQL.
Substitua
{HOST}pelo endpoint interno da instância do ApsaraDB RDS for MySQL.--mysql-port
A porta interna da instância do ApsaraDB RDS for MySQL.
Substitua
{PORT}pelo número da porta interna da instância do ApsaraDB RDS for MySQL.--mysql-user
O nome de usuário da conta do banco de dados.
Certifique-se de que a conta tenha as permissões necessárias.
--mysql-password
A senha da conta do banco de dados.
--mysql-db
O banco de dados para o teste de estresse.
Crie o banco de dados com antecedência e substitua
{DATABASE}pelo seu nome.--tables
Número de tabelas.
Defina como 10 neste exemplo.
N/A
--table_size
Número de linhas por tabela.
Defina como 10000 neste exemplo.
-
Crie uma tarefa de sincronização de dados do DTS.
Selecione Schema Synchronization e Full Data Synchronization para o parâmetro Synchronization Types. Para mais informações, consulte One-way data synchronization between ApsaraDB RDS for MySQL instances.
Aguarde a conclusão da sincronização completa de dados.
-
Execute testes de estresse na sincronização de dados incremental.
Use o modelo dm_large_table_write_only na instância ECS para executar testes de estresse no banco de dados de origem 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.
Defina como 600 neste exemplo.
--threads
Número de threads concorrentes.
Defina 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 Monitor task performance.
dm_hot_update_only
-
Crie uma tarefa de sincronização de dados do DTS.
Não selecione Full Data Synchronization para o parâmetro Synchronization Types. Se o banco de dados e as tabelas correspondentes não estiverem criados na instância do ApsaraDB RDS for MySQL de destino, selecione Schema Synchronization. Para mais informações, consulte One-way data synchronization between ApsaraDB RDS for MySQL instances.
-
Inicialize os dados nas tabelas que serão submetidas a testes 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 do ApsaraDB RDS for MySQL.
Substitua
{HOST}pelo endpoint interno da instância do ApsaraDB RDS for MySQL.--mysql-port
A porta interna da instância do ApsaraDB RDS for MySQL.
Substitua
{PORT}pelo número da porta interna da instância do ApsaraDB RDS for MySQL.--mysql-user
O nome de usuário da conta do banco de dados.
Certifique-se de que a conta tenha as permissões necessárias.
--mysql-password
A senha da conta do banco de dados.
--mysql-db
O banco de dados para o teste de estresse.
Crie o banco de dados com antecedência e substitua
{DATABASE}pelo seu nome.--tables
Número de tabelas.
Defina como 2 neste exemplo.
N/A
-
Execute testes de estresse na sincronização de dados incremental.
Use o modelo dm_hot_update_only na instância ECS para executar testes de estresse no banco de dados de origem 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.
Defina como 600 neste exemplo.
--threads
Número de threads concorrentes.
Defina 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 Monitor task performance.
dm_ddl_only
-
Crie uma tarefa de sincronização de dados do DTS.
Não selecione Full Data Synchronization para o parâmetro Synchronization Types. Se o banco de dados e as tabelas correspondentes não estiverem criados na instância do ApsaraDB RDS for MySQL de destino, selecione Schema Synchronization. Para mais informações, consulte One-way data synchronization between ApsaraDB RDS for MySQL instances.
-
Execute testes de estresse na sincronização de dados incremental.
Use o modelo dm_ddl_only na instância ECS para executar testes de estresse no banco de dados de origem 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 do ApsaraDB RDS for MySQL.
Substitua
{HOST}pelo endpoint interno da instância do ApsaraDB RDS for MySQL.--mysql-port
A porta interna da instância do ApsaraDB RDS for MySQL.
Substitua
{PORT}pelo número da porta interna da instância do ApsaraDB RDS for MySQL.--mysql-user
O nome de usuário da conta do banco de dados.
Certifique-se de que a conta tenha as permissões necessárias.
--mysql-password
A senha da conta do banco de dados.
--mysql-db
O banco de dados para o teste de estresse.
Crie o banco de dados com antecedência e substitua
{DATABASE}pelo seu nome.--threads
Número de threads concorrentes.
Defina como 64 neste exemplo.
N/A
--tables
Número de tabelas.
Defina como 2 neste exemplo.
--time
Duração do teste de estresse em segundos.
Defina como 600. As operações DDL serã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 Monitor task performance.
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 em props.mysql.
vim props.mysqlConfiguração de exemplo. Substitua
{HOST},{PORT},{USER},{PASSWORD}e{DATABASE}pelas informações da instância do 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 do ApsaraDB RDS for MySQL.
-
PORT: porta interna da instância do ApsaraDB RDS for MySQL.
-
DATABASE: o banco de dados de teste na instância do ApsaraDB RDS for MySQL.
Substitua
{HOST},{PORT}e{DATABASE}pelas informações correspondentes.user
O nome de usuário da conta do banco de dados.
Substitua
{USER}pelas informações correspondentes.password
A senha da conta do banco de dados.
Substitua
{PASSWORD}pelas informações correspondentes.runMins
Duração do teste de estresse em minutos.
Defina como 10 neste exemplo.
-
-
Inicialize os dados de teste do TPC-C.
./runDatabaseBuild.sh props.mysqlEsse comando cria 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 para o parâmetro Synchronization Types. Para mais informações, consulte One-way data synchronization between ApsaraDB RDS for MySQL instances.
Aguarde a conclusão da sincronização completa de dados.
-
Execute testes de estresse na sincronização de dados incremental.
Use o modelo TPC-C na instância ECS para executar testes de estresse no banco de dados de origem e gerar logs binários.
./runBenchmark.sh props.mysqlParâmetro
Descrição
Observações
--time
Duração do teste de estresse em segundos.
Defina como 600 neste exemplo.
--threads
Número de threads concorrentes.
Defina 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 Monitor task performance.
Resultados dos testes
Para verificar o desempenho máximo da sincronização incremental por tipo de instância, consulte Data synchronization performance data. O desempenho é medido em linhas por segundo (RPS).
oltp_write_only
Sincronização de dados completa
|
Tipo de instância |
RPS (linhas/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 de dados incremental
|
Tipo de instância |
RPS (linhas/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 de dados completa
|
Tipo de instância |
RPS (linhas/s) |
BPS (MB/s) |
Duração (s) |
|
micro |
469,48 |
35,09MB |
213 |
|
small |
480,77 |
35,94MB |
208 |
|
medium |
552,49 |
41,30MB |
181 |
|
large |
584,80 |
43,71 |
171 |
Sincronização de dados incremental
|
Tipo de instância |
RPS (linhas/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 modificar este parâmetro, consulte Modify instance parameters.
O parâmetro trans.hot.merge.enable está definido como false.
Sincronização de dados incremental
|
Tipo de instância |
RPS (linhas/s) |
Desempenho máximo atingido |
|
micro |
200 |
Sim |
|
small |
1200 |
Não |
|
medium |
1200 |
Não |
|
large |
1200 |
Não |
O parâmetro trans.hot.merge.enable está definido como true.
Sincronização de dados incremental
|
Tipo de instância |
RPS (linhas/s) |
Desempenho máximo atingido |
|
micro |
200 |
Sim |
|
small |
2000 |
Sim |
|
medium |
5000 |
Sim |
|
large |
11000 |
Sim |
dm_ddl_only
Sincronização de dados incremental
|
Tipo de instância |
RPS (linhas/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 de dados completa
|
Tipo de instância |
RPS (linhas/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 de dados incremental
|
Tipo de instância |
RPS (linhas/s) |
BPS (KB/s) |
Desempenho máximo atingido |
|
micro |
200 |
138 |
Sim |
|
small |
2000 |
1920 |
Sim |
|
medium |
5000 |
3847 |
Sim |
|
large |
11000 |
7542 |
Sim |