PolarDB prend désormais en charge le DDL parallèle. Lorsque les ressources matérielles de votre base de données sont inactives, utilisez le DDL parallèle pour accélérer l'exécution des instructions DDL, éviter le blocage des opérations DML connexes ultérieures et réduire la fenêtre d'exécution des opérations DDL.
Champ d'application
Pour créer un index secondaire, la version du cluster PolarDB doit répondre à l'une des conditions 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.
Pour créer un index de clé primaire, la version du cluster PolarDB doit répondre à l'une des conditions 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 plus d'informations sur la vérification de la version du cluster, consultez la rubrique Interroger la version du moteur.
Considérations
L'activation du DDL parallèle accroît la consommation de ressources matérielles (CPU, mémoire, E/S) proportionnellement au nombre de threads parallèles. Cela peut affecter les autres opérations SQL exécutées simultanément. Un nombre élevé de threads parallèles augmente l'utilisation de la mémoire. En cas de mémoire disponible insuffisante, une erreur d'épuisement de la mémoire (OOM) peut survenir et compromettre la stabilité du cluster. Utilisez donc le DDL parallèle pendant les heures creuses ou lorsque les ressources matérielles sont suffisantes.
Limites
L'accélération par DDL parallèle prend en charge les opérations DDL créant des index de clé primaire et des index secondaires (à l'exclusion des index full-text, des index spatiaux et des index secondaires sur des colonnes virtuelles).
Informations contextuelles
Les opérations DDL traditionnelles reposent sur un cœur unique et des disques durs classiques ; elles prennent donc beaucoup de temps sur les grandes tables et génèrent une latence excessivement élevée. Par exemple, lors de la création d'un index secondaire, une opération DDL à forte latence bloque les requêtes DML ultérieures dépendant du nouvel index. Le développement des processeurs multicœurs offre le support matériel nécessaire au DDL parallèle pour exploiter davantage de threads, tandis que l'adoption de disques SSD réduit la latence d'accès aléatoire à un niveau proche de celle de l'accès séquentiel. L'utilisation du DDL parallèle pour accélérer la création d'index sur les grandes tables revêt donc une importance particulière.
Utilisation
-
innodb_polar_parallel_ddl_threads
Activez le DDL parallèle à l'aide du paramètre innodb_polar_parallel_ddl_threads suivant :
Paramètre
Niveau
Description
innodb_polar_parallel_ddl_threads
Session
Nombre de threads parallèles pour chaque opération DDL. Valeurs possibles : 1 à 16. Valeur par défaut : 1, ce qui indique que le DDL est exécuté en mode monothread.
Si la valeur de ce paramètre n'est pas 1, le DDL parallèle est automatiquement activé lors de la création d'un index secondaire.
RemarqueLorsque la valeur de ce paramètre est 1, le système active deux threads parallèles par défaut.
-
innodb_parallel_build_primary_index
Contrôlez l'autorisation du DDL parallèle lors de la création d'un index de clé primaire à l'aide du paramètre innodb_parallel_build_primary_index suivant :
RemarquePour utiliser la fonctionnalité de création d'index de clé primaire parallèle, accédez au Centre de quotas. Recherchez la ligne dont l'ID de quota Quota ID est polardb_mysql_pddl_for_pk polardb_mysql_pddl_for_pk, puis dans la colonne Actions Actions, cliquez sur Demander Apply pour solliciter un essai.
Paramètre
Niveau
Description
innodb_parallel_build_primary_index
Global
Indique si le DDL parallèle est autorisé lors de la création d'un index de clé primaire. Valeurs possibles :
ON : autorise le DDL parallèle lors de la création d'un index de clé primaire
OFF : n'autorise pas le DDL parallèle lors de la création d'un index de clé primaire (par défaut)
-
innodb_polar_use_sample_sort
Si l'activation seule du DDL parallèle ne répond pas à vos besoins, utilisez le paramètre innodb_polar_use_sample_sort pour optimiser davantage le tri effectué lors de la création de l'index.
Paramètre
Niveau
Description
innodb_polar_use_sample_sort
Session
Indique s'il faut activer la fonctionnalité d'optimisation du tri par échantillonnage. Valeurs possibles :
ON : active la fonctionnalité d'optimisation du tri par échantillonnage
OFF : désactive la fonctionnalité d'optimisation du tri par échantillonnage (par défaut)
-
innodb_polar_use_parallel_bulk_load
Si les fonctionnalités précédentes ne satisfont toujours pas vos exigences, utilisez également le paramètre innodb_polar_use_parallel_bulk_load pour optimiser davantage la construction de l'arbre d'index.
Paramètre
Niveau
Description
innodb_polar_use_parallel_bulk_load
Session
Indique s'il faut activer la fonctionnalité d'optimisation du chargement groupé parallèle. Valeurs possibles :
ON : active la fonctionnalité d'optimisation du chargement groupé parallèle
OFF : désactive la fonctionnalité d'optimisation du chargement groupé parallèle (par défaut)
Test de performance
-
Environnement de test
Un cluster PolarDB for MySQL 8,0 Édition Standard doté de 16 cœurs et de 128 Go de mémoire.
La capacité de stockage du cluster est de 50 To.
-
Schéma de la table de test
Créez une table nommée
t0t0à l'aide de l'instruction suivante :CREATE TABLE t0( a INT PRIMARY KEY, b INT) ENGINE=InnoDB; -
Données de la table de test
Générez les données de test à l'aide de l'instruction 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() ;RemarqueLors d'un test réel, remplacez
$table_size$table_sizepar le nombre réel d'enregistrements dans la table, par exemple10000001000000.Ce test utilise des tables contenant 1 000 000, 10 000 000, 100 000 000 et 1 000 000 000 d'enregistrements, ainsi qu'une table contenant 1 To de données.
La table de test contenant 1 To de données est générée à l'aide de Sysbench. Pour plus d'informations sur l'utilisation de Sysbench, consultez la rubrique Outils de test.
-
Méthode de test
Ce test utilise différents nombres de threads parallèles (c'est-à-dire qu'il définit le paramètre innodb_polar_parallel_ddl_threads sur 1, 2, 4, 8, 16 et 32). Pour des tables de volumes de données différents, le test mesure le ratio d'amélioration de l'efficacité d'exécution des DDL obtenu en activant le DDL parallèle pour créer un index secondaire. L'index est créé sur une colonne dont le type de données est
INTINTet dont le nom estbb. -
Résultats des tests
La figure suivante illustre le ratio d'accélération du DDL parallèle lorsque seul le paramètre innodb_polar_parallel_ddl_threads est activé.

La figure suivante présente le ratio d'accélération du DDL parallèle lorsque les paramètres innodb_polar_parallel_ddl_threads et innodb_polar_use_sample_sort sont tous deux activés.

La figure ci-dessous montre le ratio d'accélération du DDL parallèle lorsque les paramètres innodb_polar_parallel_ddl_threads, innodb_polar_use_sample_sort et innodb_polar_use_parallel_bulk_load sont activés.

Nous contacter
Si vous avez des questions sur les opérations DDL, Contactez-nous.