Cette rubrique décrit la fonctionnalité Faster DDL, qui propose un mécanisme optimisé de gestion du buffer pool. Ce mécanisme réduit l'impact des opérations de langage de définition de données (DDL) et augmente le nombre d'opérations DDL simultanées autorisées.
Prérequis
Votre instance RDS exécute l'une des versions MySQL suivantes :
MySQL 8.0 (avec une version mineure du moteur 20200630 ou ultérieure.)
MySQL 5.7 (avec une version mineure du moteur 20200630 ou ultérieure.)
MySQL 5.6 (avec une version mineure du moteur 20200630 ou ultérieure.)
Contexte
Les opérations DDL sont courantes sur les instances RDS. Lors de l'utilisation de votre instance RDS, vous pouvez rencontrer des problèmes liés aux opérations DDL. Par exemple, les situations suivantes peuvent se produire :
Lorsque vous ajoutez des index, pourquoi observez-vous une instabilité des performances qui interrompt les opérations de lecture et d'écriture sur votre instance RDS ?
Pourquoi l'exécution d'une opération DDL sur une table de moins de 1 Go prend-elle plus de 10 minutes ?
Lorsqu'une connexion générant des tables temporaires est fermée, pourquoi constatez-vous une instabilité des performances ?
L'équipe du moteur de base de données d'ApsaraDB for RDS a réalisé des analyses approfondies et des tests intensifs pour identifier la cause de ces problèmes. Sur la base des résultats obtenus, l'équipe a mis en évidence des défauts dans la logique de maintenance du cache utilisée pour gérer les opérations DDL. Pour corriger ces problèmes, l'équipe a développé la fonctionnalité Faster DDL. Le mécanisme optimisé de gestion du buffer pool fourni par cette fonctionnalité réduit la contention des verrous déclenchée par les opérations DDL. Lorsque votre instance RDS traite une charge de travail normale, cela garantit le maintien des performances de l'instance pendant les opérations DDL.
Activer Faster DDL
Définissez le paramètre loose_innodb_rds_faster_ddl sur ON dans la console ApsaraDB for RDS pour activer la fonctionnalité Faster DDL. Pour plus d'informations, consultez la rubrique Modifier les paramètres de l'instance.
Test avec des opérations DDL
-
Scénario de test
Utilisez l'algorithme in-place pour effectuer des opérations DDL en ligne en exécutant les instructions suivantes, prises en charge par MySQL 8.0 : CREATE INDEX et OPTIMIZE TABLE. L'instruction CREATE INDEX crée un index sur une table sans nécessiter la reconstruction de celle-ci. L'instruction OPTIMIZE TABLE crée un index sur une table en nécessitant la reconstruction de celle-ci.
Opération Instantané In-place Reconstruit la table Autorise les opérations DML simultanées Modifie uniquement les métadonnées CREATE INDEX Non Oui Non Oui Non OPTIMIZE TABLE Non Oui Oui Oui Non -
Instance de test
L'instance RDS utilisée pour le test exécute MySQL 8.0. Elle dispose de 8 cœurs CPU et de 64 Go de mémoire. La taille de la table sur laquelle vous effectuez les opérations DDL est de 600 Mo.
-
Procédure de test
Utilisez SysBench pour effectuer un test de charge. Durant ce test, effectuez des opérations DDL en ligne et comparez les résultats.
-
Résultat du test
Opération Durée d'exécution moyenne (avec Faster DDL désactivé) Durée d'exécution moyenne (avec Faster DDL activé) Facteur d'amélioration des performances CREATE INDEX 56 secondes 4,9 secondes 11,4 OPTIMIZE TABLE 220 secondes 17 secondes 12,9 -
Résumé du test
La fonctionnalité Faster DDL permet à ApsaraDB RDS for MySQL avec AliSQL de réduire la durée d'exécution d'une opération DDL de plus de 90 % par rapport à MySQL Community Edition.
Test avec des tables temporaires
Les tables temporaires sont courantes dans MySQL. Par exemple, le système crée des tables temporaires utilisées pour interroger les tables de la base de données information_schema ou pour accélérer l'exécution d'instructions SQL complexes. Lorsqu'un thread se termine, toutes les tables temporaires associées sont supprimées. Il s'agit d'un type spécifique d'opération DDL qui provoque une instabilité des performances sur votre instance RDS. Pour plus d'informations, consultez la page Temp ibt tablespace truncation at disconnection stuck InnoDB under large BP.
-
Instance de test
L'instance RDS utilisée pour le test exécute MySQL 8.0. Elle dispose de 8 cœurs CPU et de 64 Go de mémoire.
-
Procédure de test
Utilisez tpcc-mysql pour effectuer un test de charge. Durant ce test, exécutez des requêtes afin de vous assurer que le buffer pool atteint une capacité proche de sa limite maximale. Ensuite, initiez des requêtes monothread via des connexions éphémères pour générer des tables temporaires.
-
Résultat du test
Élément de comparaison Opérations DDL non incluses Faster DDL activé Faster DDL désactivé Transactions par seconde (TPS) 42 000 40 000 < 10 000 La figure suivante présente les données de performance au niveau de la seconde obtenues lors du test de charge. Les parties mises en évidence en rouge indiquent les TPS pris en charge par l'instance RDS lorsque la fonctionnalité Faster DDL est désactivée.

-
Résumé du test
Chaque fois qu'un thread générant des tables temporaires se termine, MySQL natif provoque une forte instabilité des performances. Cette instabilité réduit les TPS de plus de 70 %. Une fois la fonctionnalité Faster DDL activée, la baisse des TPS est ramenée à 5 %.
Effet de l'optimisation
La fonctionnalité Faster DDL prend en charge MySQL 5.6, 5,7 et 8,0. Toutefois, les opérations DDL prises en charge peuvent varier selon la version MySQL sélectionnée.
| Catégorie | Opération DDL | MySQL 5.6 | MySQL 5.7 | MySQL 8.0 |
| DDL in-place | Pour plus d'informations, consultez les pages Opérations DDL en ligne de MySQL 8.0 et Opérations DDL en ligne de MySQL 5.7. | Non | Oui | Oui |
| Gestion des tablespaces | Active ou désactive le chiffrement des tablespaces. | Non | Oui | Oui |
| Libère ou supprime un tablespace. | Non | Oui | Oui | |
| Ignore un tablespace. | Oui | Oui | Oui | |
| Suppression de table | Libère ou supprime une table. | Oui | Oui | Oui |
| Opération d'annulation | Libère ou supprime un tablespace d'annulation. | Non | Non | Oui |
| Actualisation de table | Actualise une table et ses pages sales. | Oui | Oui | Oui |
Défauts corrigés par Faster DDL
La fonctionnalité Faster DDL corrige les défauts suivants :