Utilisez Sysbench pour exécuter des tests de performances de traitement transactionnel en ligne (OLTP) sur un cluster PolarDB for MySQL. Cette rubrique détaille la configuration, l'installation et les commandes de test pour les scénarios en lecture seule, en lecture/écriture et en écriture seule.
Outil de test
Sysbench est un outil de test de performances open source et multiplateforme. Il sert principalement à réaliser des benchmarks de bases de données (comme MySQL) ainsi que des tests de performances système couvrant le CPU, la mémoire, les E/S et les threads. Sysbench prend en charge les tests multithreads et utilise des scripts Lua pour contrôler la logique de test avec flexibilité, ce qui le rend adapté à l'évaluation des performances et aux tests de charge des bases de données.
Environnement de test
Configuration du client
| Catégorie | Spécification |
|---|---|
| Type d'instance | ECS.c5.4xlarge (16 cœurs CPU, 32 Go de mémoire) |
| Système d'exploitation | CentOS 7.0 64 bits |
| Nombre d'instances | 1 par nœud de calcul à 8 cœurs ; mise à l'échelle proportionnelle (par exemple, 2 instances pour des nœuds à 16 cœurs) |
| Prérequis réseau | Même région, zone et Virtual Private Cloud (VPC) que le cluster PolarDB |
| Latence PING | Doit être inférieure à 0,2 ms |
Configuration du cluster PolarDB
| Catégorie | Spécification |
|---|---|
| Type de cluster | Cluster à deux nœuds (un nœud principal, un nœud en lecture seule) |
| Endpoints | Endpoint principal, endpoint de cluster et endpoints personnalisés — combinés selon les besoins pour maximiser l'utilisation des ressources |
Paramétrage
Pour les tests à forte concurrence, configurez les paramètres suivants avant l'exécution :
max_prepared_stmt_count— Augmentez cette valeur pour éviter l'erreurcan't create more than max_prepared_stmt_count statementslorsque le nombre de threads est élevé.--db-ps-mode=disable— Ajoutez cet indicateur à la commande de test dans les scénarios à grande échelle et à forte concurrence, lorsquemax_prepared_stmt_countseul ne suffit pas. Cela désactive la fonctionnalité Prepared Statement.Clusters de très grande taille (88 cœurs et plus) — Un ajustement supplémentaire des paramètres est nécessaire pour exploiter pleinement les ressources du cluster. Ajustez les réglages en fonction de votre type d'instance et des résultats réels obtenus lors des tests.
Pour connaître la procédure de configuration des paramètres, consultez Définir les paramètres de cluster et les paramètres de nœud.
Remarques sur les tests
Toutes les commandes présentées dans cette rubrique nécessitent les permissions root.
Les tests utilisent
tables=250ettable-size=25000. Incrémentez la valeur dethreadsentre chaque exécution. Chaque page produit affiche uniquement les résultats de pic.Cette page prend pour exemple un cluster PolarDB for MySQL Cluster Edition.
Scénarios de test
Ce test mesure les performances OLTP pour les scénarios en lecture seule, en écriture seule et en lecture/écriture sur un cluster à deux nœuds (un nœud principal et un nœud en lecture seule), pour différents types d'instances dédiées.
Métriques
| Métrique | Description |
|---|---|
| TPS (Transactions par seconde) | Nombre de transactions exécutées par seconde, basé sur les COMMIT réussis |
| QPS (Requêtes par seconde) | Nombre d'instructions SQL (INSERT, SELECT, UPDATE, DELETE) exécutées par seconde |
Installer Sysbench
-
Clonez et compilez Sysbench sur l'instance ECS :
git clone https://github.com/akopytov/sysbench.git cd sysbench ./autogen.sh ./configure make -j make install -
Configurez le client Sysbench pour répartir le traitement des paquets réseau sur tous les cœurs CPU afin de réduire les changements de contexte :
La valeur
ffffactive les 16 cœurs CPU pour le traitement des paquets. Ajustez cette valeur selon le nombre de cœurs dont vous disposez :ffpour 8 cœurs,ffffpour 16 cœurs, et ainsi de suite.sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffff>$x/rps_cpus; done' sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"
Exécuter les tests
Avant de lancer les tests, assurez-vous de disposer des éléments suivants :
Une instance ECS située dans la même région, la même zone et le même VPC que votre cluster PolarDB
Un cluster PolarDB for MySQL à deux nœuds avec des endpoints configurés
Sysbench installé sur l'instance ECS
Étape 1 : Obtenir l'endpoint du cluster
Récupérez l'endpoint et le port de votre cluster PolarDB for MySQL. Consultez Gérer les adresses de connexion.
Étape 2 : Configurer l'endpoint du cluster
Définissez l'option Primary Node Accepts Read Requests sur Yes pour l'endpoint du cluster. Consultez Configurer un proxy de base de données.
Étape 3 : Créer la base de données de test
Exécutez la commande suivante sur l'instance ECS pour créer une base de données nommée testdb :
mysql -h <host> -P <port> -u <username> -p <password> -e 'create database testdb'
| Paramètre | Description |
|---|---|
-h <host> |
Endpoint du cluster |
-P <port> |
Numéro de port |
-u <username> |
Nom d'utilisateur de la base de données |
-p <password> |
Mot de passe associé au nom d'utilisateur |
Étape 4 : Exécuter les tests par scénario
Chaque scénario suit le même modèle en trois phases : prepare → run → cleanup. Tous les exemples utilisent les mêmes paramètres de base :
| Paramètre | Valeur | Description |
|---|---|---|
--db-driver |
mysql |
Pilote de base de données |
--mysql-db |
testdb |
Base de données cible |
--table_size |
25000 |
Nombre de lignes par table |
--tables |
250 |
Nombre de tables |
--events |
0 |
Aucune limite d'événements (exécution jusqu'à expiration du temps) |
--time |
600 |
Durée du test en secondes |
--rand-type |
uniform |
Type de distribution des données |
--threads |
Votre valeur | Threads simultanés ; incrémentez cette valeur entre les exécutions pour identifier le pic de performances |
Les champs de sortie suivants apparaissent dans les résultats du test :
| Catégorie de paramètre | Contenu affiché | Description |
|---|---|---|
tables |
Nombre de tables de données | Nombre total de tables de données utilisées dans le test |
table_size |
Nombre de lignes dans la table de données | Nombre d'enregistrements contenus dans chaque table |
| Volume des données | — | Taille des données de la table, exprimée en unités telles que Mo ou Go |
threads |
Nombre de threads simultanés | Nombre de threads actuellement configuré |
| État des threads | — | Permet de consulter l'état d'exécution des threads en temps réel |
Test en lecture seule (oltp_read_only)
Ce test utilise--range-selects=0, ce qui limite la charge de travail aux sélections ponctuelles uniquement — équivalent au scénariooltp_point_selects.
-
Préparez les données :
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_only prepare -
Lancez le test :
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_only run -
Nettoyez les données :
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_only cleanup
Test mixte lecture/écriture (oltp_read_write)
Ce test simule une charge de travail métier typique combinant lectures et écritures.
Les paramètres principaux tels quetables,table-sizeetthreadssont affichés individuellement sur la page des données de test.
-
Préparez les données :
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_write prepare -
Lancez le test :
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_write run -
Nettoyez les données :
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_read_write cleanup
Test en écriture seule (oltp_write_only)
Les paramètres principaux tels quetables,table-sizeetthreadssont affichés individuellement sur la page des données de test.
-
Préparez les données :
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_write_only prepare -
Lancez le test :
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_write_only run -
Nettoyez les données :
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=<threads> oltp_write_only cleanup