Cette rubrique décrit la conception, le processus et les résultats des tests Sysbench dans PolarDB-X pour MySQL 5.7 et MySQL 8.0.
Contexte
Sysbench est un outil modulaire open source qui utilise plusieurs threads pour tester les performances des bases de données sur différentes plateformes, notamment le CPU, la mémoire, les threads et les E/S. Cette rubrique vérifie les performances des tests Sysbench dans PolarDB-X selon divers scénarios.
Conception des tests
-
Amount of test data
Les résultats des tests Sysbench présentés dans cette rubrique sont obtenus à partir de 16 tables. Chaque table contient 10 millions de lignes de données.
-
Instance specifications for the test
Spécifications de l'instance
Nombre de nœuds
4C32G
2
4C32G
4
8C64G
2
8C64G
4
-
ECS instance type for stress testing
ecs.g7ne.8xlarge (32 vCPU, 128 Go de mémoire)
Procédure
-
Créez une instance Elastic Compute Service (ECS) pour les tests de charge.
Créez une instance ECS destinée à la préparation des données et à l'exécution des tests de charge. Afin d'éviter les goulots d'étranglement lors des tests sur des instances PolarDB-X aux spécifications élevées, nous vous recommandons de provisionner une instance ECS dotée de 32 vCPU et de 128 Go de mémoire.
RemarqueL'instance ECS doit être déployée au sein d'un VPC. Notez le nom et l'ID du VPC pour une utilisation ultérieure. Vous devrez déployer toutes les instances de base de données décrites dans les étapes suivantes dans ce même VPC.
-
Créez une instance PolarDB-X pour les tests de charge.
-
Créez une instance PolarDB-X. Sélectionnez le moteur de base de données MySQL 5.7 ou MySQL 8.0 en fonction de vos besoins métier. Pour plus d'informations sur la création d'une instance PolarDB-X, consultez la rubrique Créer une instance.
RemarqueAssurez-vous que l'instance PolarDB-X et l'instance ECS résident dans le même VPC.
-
Créez une base de données (nommée sbtest dans cet exemple) au sein de l'instance. Pour plus d'informations, consultez la rubrique Créer une base de données.
CREATE DATABASE sbtest;
-
-
Modifiez les paramètres de l'instance.
RemarquePour obtenir des performances optimales lors des tests de charge, modifiez certains paramètres des nœuds de calcul de l'instance PolarDB-X.
Définissez le paramètre ENABLE_COROUTINE sur true, et les paramètres XPROTO_MAX_DN_CONCURRENT et XPROTO_MAX_DN_WAIT_CONNECTION sur 4000. Pour plus d'informations, consultez la rubrique Paramètres.
-
Connectez-vous à l'instance PolarDB-X à l'aide d'un client en ligne de commande. Exécutez ensuite les instructions SQL suivantes dans la même session pour désactiver la journalisation et l'échantillonnage statistique du CPU :
set global RECORD_SQL=false; set global MPP_METRIC_LEVEL=0; set global ENABLE_CPU_PROFILE=false; set global ENABLE_TRANS_LOG=false;
-
Préparez les données pour les tests de charge.
-
Téléchargez le package d'outils de test de charge benchmarksql.tar.gz et exécutez la commande suivante pour le décompresser :
tar xzvf sysbench.tar.gz cd sysbench/Exécutez les commandes suivantes pour installer et compiler les dépendances :
yum -y install make automake libtool pkgconfig libaio-devel mysql-devel ./autogen.sh ./configure make -j make installExécutez la commande
synben --version. Si la réponse estsysbench 1.1.0, l'outil de test de charge est correctement installé.Vous pouvez également télécharger la version open source de Sysbench depuis GitHub. Pour plus d'informations, consultez la page sysbench sur GitHub.
-
Configurez les données pour les tests de charge.
Créez le fichier de configuration sysb.conf et saisissez les informations de connexion à PolarDB-X dans ce fichier. L'exemple ci-dessous présente le contenu du fichier de configuration. Les paramètres sont décrits après cet exemple.
mysql-host='{HOST}' mysql-port='{PORT}' mysql-user='{USER}' mysql-password='{PASSWORD}' mysql-db='sbtest' db-driver='mysql' percentile='95' histogram='on' report-interval='1' time='60' rand-type='uniform'Les paramètres du fichier de configuration :
percentile : le centile utilisé pour l'échantillonnage du temps de réponse.
histogram : indique s'il faut afficher l'histogramme de la distribution des temps de réponse.
report-interval : l'intervalle d'affichage des résultats en temps réel, en secondes.
time : la durée du test de charge, en secondes.
rand-type : le type de distribution utilisé pour générer un nombre aléatoire.
-
Importez les données de test de charge.
sysbench --config-file='sysb.conf' --create-table-options='dbpartition by hash(id)' --tables='16' --table-size='10000000' --threads='16' --auto_inc='off' oltp_point_select prepareLes paramètres de la commande :
config-file : le fichier de configuration commun.
create-table-options : le mode de création des tables.
tables : le nombre de tables.
table-size : la quantité de données qu'une table peut contenir.
threads : le nombre de threads simultanés utilisés pour importer les données.
auto_inc : indique s'il faut utiliser auto_increment.
-
-
Exécutez le test de charge.
Exécutez les commandes suivantes pour réaliser le test selon les six scénarios définis par Sysbench. Nous vous recommandons d'augmenter la durée du premier test de charge.
RemarqueLes paramètres des commandes :
db-ps-mode : indique s'il faut activer le mode prepare.
mysql-ignore-errors : les codes d'erreur MySQL à ignorer, tels que certains codes d'erreur liés aux conflits de verrouillage.
range-size : la plage utilisée pour les requêtes de type range.
-
oltp_point_select :
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={Number of concurrent threads} oltp_point_select run -
oltp_read_only :
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --range-size=5 --threads={Number of concurrent threads} oltp_read_only run -
oltp_read_write :
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --range-size=5 --threads={Number of concurrent threads} oltp_read_write run -
oltp_update_index :
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={Number of concurrent threads} oltp_update_index run -
oltp_update_non_index :
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={Number of concurrent threads} oltp_update_non_index run -
oltp_write_only :
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={Number of concurrent threads} oltp_write_only run
Version de PolarDB-X : polardb-2.4.0_5.4.19-20240610_xcluster5.4.19-20240527. Pour plus d'informations, consultez les Notes de version du noyau.
Dans les résultats de test ci-dessous, les valeurs QPS sont utilisées pour mesurer les performances de la base de données.
Version de PolarDB-X : polardb-2.4.0_5.4.19-20240610_xcluster8.4.19-20240523. Pour plus d'informations, consultez les Notes de version du noyau.
Dans les résultats de test suivants, les valeurs QPS sont utilisées pour mesurer les performances de la base de données.
Résultats des tests
MySQL 5.7
point_select

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
1000 |
201462.73 |
|
4C32G*4 |
1000 |
324683.03 |
|
8C64G*2 |
1000 |
308174.91 |
|
8C64G*4 |
2000 |
635865.65 |
read_only

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
600 |
62446.59 |
|
4C32G*4 |
1000 |
94930.57 |
|
8C64G*2 |
1000 |
88487.24 |
|
8C64G*4 |
2000 |
162330.95 |
read_write

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
600 |
43098.16 |
|
4C32G*4 |
600 |
68750.24 |
|
8C64G*2 |
600 |
57730.62 |
|
8C64G*4 |
600 |
111261.22 |
update_index

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
600 |
49530.87 |
|
4C32G*4 |
600 |
86850.17 |
|
8C64G*2 |
600 |
65750.01 |
|
8C64G*4 |
1000 |
137154.16 |
update_non_index

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
400 |
50627.05 |
|
4C32G*4 |
1000 |
90555.72 |
|
8C64G*2 |
1000 |
68838.02 |
|
8C64G*4 |
1000 |
137071.73 |
write_only

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
400 |
38636.02 |
|
4C32G*4 |
600 |
70974.3 |
|
8C64G*2 |
600 |
52344.94 |
|
8C64G*4 |
600 |
101282.38 |
MySQL 8.0
point_select

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
1000 |
166590.48 |
|
4C32G*4 |
1000 |
288516.53 |
|
8C64G*2 |
1000 |
350510.72 |
|
8C64G*4 |
2000 |
637414.68 |
read_only

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
600 |
59770.01 |
|
4C32G*4 |
1000 |
71259.87 |
|
8C64G*2 |
1000 |
69829.69 |
|
8C64G*4 |
2000 |
128366.39 |
read_write

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
600 |
56134.05 |
|
4C32G*4 |
600 |
55817.45 |
|
8C64G*2 |
600 |
60482.86 |
|
8C64G*4 |
600 |
92855.15 |
update_index

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
600 |
37474.15 |
|
4C32G*4 |
600 |
57344.42 |
|
8C64G*2 |
600 |
55856.94 |
|
8C64G*4 |
1000 |
87618.81 |
update_non_index

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
400 |
38017.57 |
|
4C32G*4 |
1000 |
60779.25 |
|
8C64G*2 |
1000 |
58065.02 |
|
8C64G*4 |
1000 |
91060.65 |
write_only

|
Spécifications de l'instance |
Nombre de threads simultanés |
QPS |
|
4C32G*2 |
400 |
29476.72 |
|
4C32G*4 |
600 |
47558.73 |
|
8C64G*2 |
600 |
41032.61 |
|
8C64G*4 |
600 |
65794.57 |