Benchmarks de performance pour la synchronisation unidirectionnelle des données avec DTS entre des instances ApsaraDB RDS for MySQL, couvrant la synchronisation complète, la synchronisation incrémentielle, les mises à jour à chaud et les opérations DDL.
Environnement de test
Bases de données source et de destination
L'extension automatique du stockage est activée pour les instances ApsaraDB RDS for MySQL utilisées dans ce test.
|
Base de données |
Région |
Type |
Version |
Spécification |
CPU |
Mémoire |
|
Base de données source |
Chine (Hangzhou) |
Instances ApsaraDB RDS for MySQL Standard exécutant l'édition Haute Disponibilité RDS |
8.0 |
mysql.x4.xlarge.2c (dédié) |
8 |
32 Go |
|
Base de données de destination |
Client
Vous devez ajouter l'adresse IP de l'instance ECS utilisée comme client aux listes d'autorisation d'adresses IP des instances ApsaraDB RDS for MySQL. Pour plus d'informations, consultez la rubrique Configurer une liste d'autorisation d'adresses IP.
|
Type |
Région |
Type de réseau |
Système d'exploitation |
Spécification |
vCPU |
Mémoire |
Adresse IP publique |
|
Instance ECS |
Chine (Hangzhou) |
VPC Remarque
L'instance ECS utilise le même VPC et le même vSwitch que les instances ApsaraDB RDS for MySQL. |
CentOS 7.9 64 bits |
ecs.c7,8xlarge (type optimisé pour le calcul c7) |
32 |
64 |
Oui |
Outils de test
Présentation
|
Outil |
Version |
Description |
|
SysBench |
1.0.20 |
Outil de benchmark modulaire et multithread destiné aux tests de performance des bases de données sur diverses plateformes. |
|
BenchmarkSQL |
5,0 (basé sur Java 8) |
Outil open source de benchmark OLTP utilisé pour évaluer les performances des bases de données et effectuer des tests de charge. |
Installation
Installer Sysbench
-
Installez Sysbench sur l'instance 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 -
Préparez les scripts Lua : dm_large_table_write_only.lua (écritures sur tables volumineuses), dm_hot_update_only.lua (mises à jour de données fréquemment accédées) et dm_ddl_only.lua (synchronisation DDL).
-
Copiez les scripts Lua dans le répertoire des scripts Sysbench
/usr/local/share/sysbench/sur l'instance 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/
Installer 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éthodes de test
Présentation
Les méthodes suivantes évaluent les performances de synchronisation des données de DTS sous différents angles.
|
Outil de test |
Modèle ou script de test |
Fonctionnalités testées |
|
Sysbench |
oltp_write_only |
Synchronisation complète et incrémentielle des données |
|
dm_large_table_write_only |
Synchronisation complète et incrémentielle des données |
|
|
dm_hot_update_only |
Synchronisation incrémentielle des données |
|
|
dm_ddl_only |
Synchronisation incrémentielle des données |
|
|
BenchmarkSQL |
TPC-C |
Synchronisation complète et incrémentielle des données |
Procédure
oltp_write_only
-
Préparez les données de base.
Sur l'instance ECS, utilisez Sysbench pour créer 10 tables dans l'instance source ApsaraDB RDS for MySQL avec 10 millions de lignes chacune.
RemarqueExécutez la commande suivante dans le répertoire
/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 \ prepareParamètre
Description
Remarques
Références
--mysql-host
Le point de terminaison interne de l'instance ApsaraDB RDS for MySQL.
Remplacez
{HOST}par le point de terminaison interne de l'instance ApsaraDB RDS for MySQL.Afficher et gérer les points de terminaison et les ports des instances
--mysql-port
Le port interne de l'instance ApsaraDB RDS for MySQL.
Remplacez
{PORT}par le numéro de port interne de l'instance ApsaraDB RDS for MySQL.--mysql-user
Le nom d'utilisateur du compte de base de données.
Assurez-vous que le compte dispose des autorisations requises.
--mysql-password
Le mot de passe du compte de base de données.
--mysql-db
La base de données à soumettre au test de charge.
Créez la base de données au préalable et remplacez
{DATABASE}par son nom.--tables
Nombre de tables.
Défini sur 10 dans cet exemple.
Sans objet
--table_size
Nombre de lignes par table.
Défini sur 10000000 dans cet exemple.
-
Créez une tâche de synchronisation des données DTS.
Sélectionnez Schema Synchronization et Full Data Synchronization pour le paramètre Synchronization Types. Pour plus d'informations, consultez la rubrique Synchronisation unidirectionnelle des données entre instances ApsaraDB RDS for MySQL.
Attendez que la synchronisation complète des données soit terminée.
-
Effectuez un test de charge sur la synchronisation incrémentielle des données.
Utilisez le modèle oltp_write_only sur l'instance ECS pour soumettre la base de données source à un test de charge et générer des journaux binaires.
RemarqueRépartition des différentes opérations 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 \ runParamètre
Description
Remarques
--time
Durée du test de charge en secondes.
Défini sur 600 dans cet exemple.
--threads
Nombre de threads simultanés.
Défini sur 64 dans cet exemple.
-
Sur la page Performance Monitoring de la tâche de synchronisation des données DTS, consultez les performances de la tâche.
Pour plus d'informations, consultez la rubrique Surveiller les performances des tâches.
dm_large_table_write_only
-
Préparez les données de base.
Sur l'instance ECS, utilisez Sysbench pour créer 10 tables dans l'instance source ApsaraDB RDS for MySQL avec 10 000 lignes chacune.
RemarqueExécutez la commande suivante dans le répertoire
/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 \ prepareParamètre
Description
Remarques
Références
--mysql-host
Le point de terminaison interne de l'instance ApsaraDB RDS for MySQL.
Remplacez
{HOST}par le point de terminaison interne de l'instance ApsaraDB RDS for MySQL.Afficher et gérer les points de terminaison et les ports des instances
--mysql-port
Le port interne de l'instance ApsaraDB RDS for MySQL.
Remplacez
{PORT}par le numéro de port interne de l'instance ApsaraDB RDS for MySQL.--mysql-user
Le nom d'utilisateur du compte de base de données.
Assurez-vous que le compte dispose des autorisations requises.
--mysql-password
Le mot de passe du compte de base de données.
--mysql-db
La base de données à soumettre au test de charge.
Créez la base de données au préalable et remplacez
{DATABASE}par son nom.--tables
Nombre de tables.
Défini sur 10 dans cet exemple.
Sans objet
--table_size
Nombre de lignes par table.
Défini sur 10000 dans cet exemple.
-
Créez une tâche de synchronisation des données DTS.
Sélectionnez Schema Synchronization et Full Data Synchronization pour le paramètre Synchronization Types. Pour plus d'informations, consultez la rubrique Synchronisation unidirectionnelle des données entre instances ApsaraDB RDS for MySQL.
Attendez que la synchronisation complète des données soit terminée.
-
Effectuez un test de charge sur la synchronisation incrémentielle des données.
Utilisez le modèle dm_large_table_write_only sur l'instance ECS pour soumettre la base de données source à un test de charge et générer des journaux binaires.
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 \ runParamètre
Description
Remarques
--time
Durée du test de charge en secondes.
Défini sur 600 dans cet exemple.
--threads
Nombre de threads simultanés.
Défini sur 64 dans cet exemple.
-
Sur la page Performance Monitoring de la tâche de synchronisation des données DTS, consultez les performances de la tâche.
Pour plus d'informations, consultez la rubrique Surveiller les performances des tâches.
dm_hot_update_only
-
Créez une tâche de synchronisation des données DTS.
Ne sélectionnez pas Full Data Synchronization pour le paramètre Synchronization Types. Si la base de données et les tables correspondantes n'ont pas été créées dans l'instance ApsaraDB RDS for MySQL de destination, vous devez sélectionner Schema Synchronization. Pour plus d'informations, consultez la rubrique Synchronisation unidirectionnelle des données entre instances ApsaraDB RDS for MySQL.
-
Initialisez les données dans les tables soumises au test de charge.
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 \ prepareParamètre
Description
Remarques
Références
--mysql-host
Le point de terminaison interne de l'instance ApsaraDB RDS for MySQL.
Remplacez
{HOST}par le point de terminaison interne de l'instance ApsaraDB RDS for MySQL.Afficher et gérer les points de terminaison et les ports des instances
--mysql-port
Le port interne de l'instance ApsaraDB RDS for MySQL.
Remplacez
{PORT}par le numéro de port interne de l'instance ApsaraDB RDS for MySQL.--mysql-user
Le nom d'utilisateur du compte de base de données.
Assurez-vous que le compte dispose des autorisations requises.
--mysql-password
Le mot de passe du compte de base de données.
--mysql-db
La base de données à soumettre au test de charge.
Créez la base de données au préalable et remplacez
{DATABASE}par son nom.--tables
Nombre de tables.
Défini sur 2 dans cet exemple.
N/A
-
Effectuez un test de charge sur la synchronisation incrémentielle des données.
Utilisez le modèle dm_hot_update_only sur l'instance ECS pour soumettre la base de données source à un test de charge et générer des journaux binaires.
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 \ runParamètre
Description
Remarques
--time
Durée du test de charge en secondes.
Défini sur 600 dans cet exemple.
--threads
Nombre de threads simultanés.
Défini sur 64 dans cet exemple.
-
Sur la page Performance Monitoring de la tâche de synchronisation des données DTS, consultez les performances de la tâche.
Pour plus d'informations, consultez la rubrique Surveiller les performances des tâches.
dm_ddl_only
-
Créez une tâche de synchronisation des données DTS.
Ne sélectionnez pas Full Data Synchronization pour le paramètre Synchronization Types. Si la base de données et les tables correspondantes n'ont pas été créées dans l'instance ApsaraDB RDS for MySQL de destination, vous devez sélectionner Schema Synchronization. Pour plus d'informations, consultez la rubrique Synchronisation unidirectionnelle des données entre instances ApsaraDB RDS for MySQL.
-
Effectuez un test de charge sur la synchronisation incrémentielle des données.
Utilisez le modèle dm_ddl_only sur l'instance ECS pour soumettre la base de données source à un test de charge et générer des journaux binaires.
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 \ runParamètre
Description
Remarques
Références
--mysql-host
Le point de terminaison interne de l'instance ApsaraDB RDS for MySQL.
Remplacez
{HOST}par le point de terminaison interne de l'instance ApsaraDB RDS for MySQL.Afficher et gérer les points de terminaison et les ports des instances
--mysql-port
Le port interne de l'instance ApsaraDB RDS for MySQL.
Remplacez
{PORT}par le numéro de port interne de l'instance ApsaraDB RDS for MySQL.--mysql-user
Le nom d'utilisateur du compte de base de données.
Assurez-vous que le compte dispose des autorisations requises.
--mysql-password
Le mot de passe du compte de base de données.
--mysql-db
La base de données à soumettre au test de charge.
Créez la base de données au préalable et remplacez
{DATABASE}par son nom.--threads
Nombre de threads simultanés.
Défini sur 64 dans cet exemple.
N/A
--tables
Nombre de tables.
Défini sur 2 dans cet exemple.
--time
Durée du test de charge en secondes.
Défini sur 600. Les opérations DDL s'exécutent pendant 600 secondes.
-
Sur la page Performance Monitoring de la tâche de synchronisation des données DTS, consultez les performances de la tâche.
Pour plus d'informations, consultez la rubrique Surveiller les performances des tâches.
TPC-C
-
Préparez les données de base.
-
Accédez au répertoire de travail de BenchmarkSQL dans l'instance ECS.
cd benchmarksql-5.0-mysql-support-opt-2.1/run/ -
Configurez la connexion à l'instance source dans props.mysql.
vim props.mysqlExemple de configuration. Remplacez
{HOST},{PORT},{USER},{PASSWORD}et{DATABASE}par les informations de l'instance ApsaraDB RDS for MySQL source.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_sdaParamètre
Description
Remarques
conn
Paramètres de connexion de l'instance. Remplacez {HOST}, {PORT} et {DATABASE} :
-
HOST : point de terminaison interne de l'instance ApsaraDB RDS for MySQL.
-
PORT : port interne de l'instance ApsaraDB RDS for MySQL.
-
DATABASE : base de données de test dans l'instance ApsaraDB RDS for MySQL.
Remplacez
{HOST},{PORT}et{DATABASE}par les informations correspondantes.user
Le nom d'utilisateur du compte de base de données.
Remplacez
{USER}par les informations correspondantes.password
Le mot de passe du compte de base de données.
Remplacez
{PASSWORD}par les informations correspondantes.runMins
Durée du test de charge en minutes.
Défini sur 10 dans cet exemple.
-
-
Initialisez les données de test TPC-C.
./runDatabaseBuild.sh props.mysqlCrée 10 tables avec environ 500 millions de lignes au total.
-
-
Créez une tâche de synchronisation des données DTS.
Sélectionnez Schema Synchronization et Full Data Synchronization pour le paramètre Synchronization Types. Pour plus d'informations, consultez la rubrique Synchronisation unidirectionnelle des données entre instances ApsaraDB RDS for MySQL.
Attendez que la synchronisation complète des données soit terminée.
-
Effectuez un test de charge sur la synchronisation incrémentielle des données.
Utilisez le modèle TPC-C sur l'instance ECS pour soumettre la base de données source à un test de charge et générer des journaux binaires.
./runBenchmark.sh props.mysqlParamètre
Description
Remarques
--time
Durée du test de charge en secondes.
Défini sur 600 dans cet exemple.
--threads
Nombre de threads simultanés.
Défini sur 64 dans cet exemple.
-
Sur la page Performance Monitoring de la tâche de synchronisation des données DTS, consultez les performances de la tâche.
Pour plus d'informations, consultez la rubrique Surveiller les performances des tâches.
Résultats des tests
Pour connaître les performances maximales de synchronisation incrémentale par type d'instance, consultez la rubrique Données de performance de la synchronisation des données. Les performances sont mesurées en lignes par seconde (RPS).
oltp_write_only
Synchronisation complète des données
|
Type d'instance |
RPS (lignes/s) |
BPS (Mo/s) |
Durée (s) |
|
micro |
17,95 W |
34,19 |
557 |
|
small |
18,18 W |
34,63 |
550 |
|
medium |
19,64 W |
37,42 |
509 |
|
large |
19,96 W |
38,02 |
501 |
Synchronisation incrémentale des données
|
Type d'instance |
RPS (lignes/s) |
BPS (Ko/s) |
Performance maximale atteinte ou non |
|
micro |
200 |
86 |
Oui |
|
small |
2 000 |
982 |
Oui |
|
medium |
5 000 |
2 605 |
Oui |
|
large |
11 000 |
5 489 |
Oui |
dm_large_table_write_only
Synchronisation complète des données
|
Type d'instance |
RPS (lignes/s) |
BPS (Mo/s) |
Durée (s) |
|
micro |
469,48 |
35,09 Mo |
213 |
|
small |
480,77 |
35,94 Mo |
208 |
|
medium |
552,49 |
41,30 Mo |
181 |
|
large |
584,80 |
43,71 |
171 |
Synchronisation incrémentale des données
|
Type d'instance |
RPS (lignes/s) |
BPS (Ko/s) |
Performance maximale atteinte ou non |
|
micro |
200 |
9 086,3 |
Oui |
|
small |
683 |
31 741,51 |
Non |
|
medium |
1 033 |
56 676,41 |
Non |
|
large |
1 537 |
84 344,32 |
Non |
dm_hot_update_only
Par défaut, le paramètre trans.hot.merge.enable est défini sur false. Pour plus d'informations sur la modification de ce paramètre, consultez la rubrique Modifier les paramètres de l'instance.
Le paramètre trans.hot.merge.enable est défini sur false.
Synchronisation incrémentale des données
|
Type d'instance |
RPS (lignes/s) |
Performance maximale atteinte ou non |
|
micro |
200 |
Oui |
|
small |
1 200 |
Non |
|
medium |
1 200 |
Non |
|
large |
1 200 |
Non |
Le paramètre trans.hot.merge.enable est défini sur true.
Synchronisation incrémentale des données
|
Type d'instance |
RPS (lignes/s) |
Performance maximale atteinte ou non |
|
micro |
200 |
Oui |
|
small |
2 000 |
Oui |
|
medium |
5 000 |
Oui |
|
large |
11 000 |
Oui |
dm_ddl_only
Synchronisation incrémentale des données
|
Type d'instance |
RPS (lignes/s) |
Performance maximale atteinte ou non |
|
micro |
68 |
Non |
|
small |
68 |
Non |
|
medium |
68 |
Non |
|
large |
68 |
Non |
TPC-C
Synchronisation complète des données
|
Type d'instance |
RPS (lignes/s) |
BPS (Mo/s) |
Durée (s) |
|
micro |
12,04 W |
17,52 |
4 143 |
|
small |
12,09 W |
17,59 |
4 127 |
|
medium |
12,73 W |
18,52 |
3 921 |
|
large |
13,50 W |
19,64 |
3 696 |
Synchronisation incrémentale des données
|
Type d'instance |
RPS (lignes/s) |
BPS (Ko/s) |
Performance maximale atteinte ou non |
|
micro |
200 |
138 |
Oui |
|
small |
2 000 |
1 920 |
Oui |
|
medium |
5 000 |
3 847 |
Oui |
|
large |
11 000 |
7 542 |
Oui |