Le DDL parallèle accélère la création d'index sur les tables volumineuses en répartissant la charge de travail sur plusieurs threads plutôt que sur un seul. Lorsque les ressources matérielles le permettent, cette fonctionnalité réduit le temps d'exécution des opérations DDL et raccourcit la fenêtre pendant laquelle les opérations ultérieures de langage de manipulation de données (DML) sont bloquées.
Prérequis
Avant de commencer, assurez-vous de disposer :
D'un cluster PolarDB for MySQL répondant aux exigences de version ci-dessous
La création d'index secondaires nécessite l'une des versions de cluster suivantes :
PolarDB for MySQL 8.0.2, version de révision 8.0.2.1.7 ou ultérieure
PolarDB for MySQL 8.0.1, version de révision 8.0.1.1.10 ou ultérieure
PolarDB for MySQL 5.7, version de révision 5.7.1.0.7 ou ultérieure
La création d'index de clé primaire requiert l'une des versions de cluster suivantes :
PolarDB for MySQL 8.0.2, version de révision 8.0.2.2.9 ou ultérieure
PolarDB for MySQL 8.0.1, version de révision 8.0.1.1.31 ou ultérieure
Pour vérifier la version de votre cluster, consultez la rubrique Interroger le numéro de version.
Limites
Le DDL parallèle prend en charge la création d'index de clé primaire et d'index secondaires. Il ne permet pas de créer :
Des index plein texte
Des index spatiaux
Des index secondaires sur des colonnes virtuelles
Impact sur les ressources
Le DDL parallèle augmente l'utilisation des threads, ce qui accroît la consommation de CPU, de mémoire et d'E/S. Exécutez les opérations DDL parallèles pendant les heures creuses ou lorsque le cluster dispose de ressources matérielles suffisantes afin d'éviter toute incidence sur les opérations SQL concurrentes.
Activer le DDL parallèle
Définir le nombre de threads pour la création d'index secondaires
Le paramètre innodb_polar_parallel_ddl_threads détermine le nombre de threads exécutés en parallèle pour chaque opération DDL.
| Paramètre | Niveau | Description |
|---|---|---|
innodb_polar_parallel_ddl_threads | Session | Nombre de threads parallèles par opération DDL. Plage : 1–16. Valeur par défaut : 1 (monthread). Définissez une valeur différente de 1 pour activer le DDL parallèle lors de la création d'index secondaires. Remarque Lorsque cette valeur est définie sur 1, le système utilise tout de même deux threads parallèles en interne. |
Exemple :
-- Use 8 parallel threads for the current session
SET innodb_polar_parallel_ddl_threads = 8;
-- Create a secondary index using the configured thread count
ALTER TABLE t0 ADD INDEX idx_b (b);
Activer la création parallèle d'index de clé primaire
L'utilisation du DDL parallèle pour les index de clé primaire nécessite une activation préalable à titre d'essai.
Pour utiliser cette fonctionnalité, accédez au Centre de quotas. Recherchez le quota dont l'Quota ID est polardb_mysql_pddl_for_pk, puis cliquez sur Apply dans la colonne Actions pour demander un accès d'essai.
| Paramètre | Niveau | Description |
|---|---|---|
innodb_parallel_build_primary_index |
Global | Contrôle l'autorisation du DDL parallèle pour la création d'index de clé primaire. Valeurs valides : ON (autorisé), OFF (par défaut, non autorisé). |
Optimiser la phase de tri
Si le parallélisme de threads par défaut ne répond pas à vos exigences de performance, activez le tri par échantillonnage pour optimiser davantage la phase de tri.
| Paramètre | Niveau | Description |
|---|---|---|
innodb_polar_use_sample_sort |
Session | Active l'optimisation par tri d'échantillonnage lors de la création d'index. Valeurs valides : ON, OFF (par défaut). |
Exemple :
SET innodb_polar_parallel_ddl_threads = 8;
SET innodb_polar_use_sample_sort = ON;
ALTER TABLE t0 ADD INDEX idx_b (b);
Optimiser la phase de chargement
Pour accélérer encore la construction de l'arborescence d'index, activez le chargement en masse parallèle.
| Paramètre | Niveau | Description |
|---|---|---|
innodb_polar_use_parallel_bulk_load |
Session | Active l'optimisation par chargement en masse parallèle pour la création de l'arborescence d'index. Valeurs valides : ON, OFF (par défaut). |
Exemple — activation simultanée des trois optimisations :
SET innodb_polar_parallel_ddl_threads = 8;
SET innodb_polar_use_sample_sort = ON;
SET innodb_polar_use_parallel_bulk_load = ON;
ALTER TABLE t0 ADD INDEX idx_b (b);
Test de performance
Environnement de test
Cluster : PolarDB for MySQL édition Standard 8.0, 16 cœurs, 128 Go de mémoire
Stockage : 50 To
Table de test
CREATE TABLE t0(
a INT PRIMARY KEY,
b INT) ENGINE=InnoDB;
Les données de test ont été générées selon la procédure suivante :
DELIMITER //
CREATE PROCEDURE populate_t0()
BEGIN
DECLARE i int DEFAULT 1;
WHILE (i <= $table_size) DO
INSERT INTO t0 VALUES (i, 1000000 * RAND());
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
CALL populate_t0();
Remplacez $table_size par le nombre de lignes souhaité, par exemple 1000000. Le test utilise des tables contenant 1 000 000, 10 000 000, 100 000 000 et 1 000 000 000 lignes, ainsi qu'une table de 1 To générée avec Sysbench. Pour plus de détails sur la configuration de Sysbench, consultez la rubrique Outils de test.
Méthode de test
Chaque test mesure le temps nécessaire pour créer un index secondaire sur la colonne b (type INT) dans des tables de taille croissante, avec le paramètre innodb_polar_parallel_ddl_threads défini successivement sur 1, 2, 4, 8, 16 et 32.
Résultats des tests
Les graphiques ci-dessous illustrent le facteur d'accélération obtenu par rapport au DDL monothread (nombre de threads = 1) pour trois combinaisons de paramètres.
Parallélisme de threads uniquement (innodb_polar_parallel_ddl_threads) :

Parallélisme de threads + tri par échantillonnage (innodb_polar_parallel_ddl_threads + innodb_polar_use_sample_sort) :

Combinaison des trois paramètres (innodb_polar_parallel_ddl_threads + innodb_polar_use_sample_sort + innodb_polar_use_parallel_bulk_load) :

Nous contacter
Si vous avez des questions concernant les opérations DDL, n'hésitez pas à contacter le support technique.
Ressources associées
En cas de questions sur les opérations DDL, contactez le support technique.