PolarDB for MySQL prend en charge les opérations DDL réparties en six catégories : index, clés primaires, colonnes, tables, clés étrangères, colonnes générées et partitions. Avant d'exécuter une modification de schéma en production, comprenez bien le comportement de chaque opération : verrouillage de la table, reconstruction complète ou achèvement en quelques secondes par simple modification des métadonnées.
Risques liés aux opérations DDL
Une seule instruction ALTER TABLE peut avoir les conséquences suivantes :
Maintenir un verrou exclusif sur la table pendant toute sa durée, bloquant ainsi toutes les lectures et écritures.
Déclencher une reconstruction complète de la table, ce qui peut prendre plusieurs heures pour les tables volumineuses.
Provoquer une file d'attente de connexions : les requêtes suivantes s'accumulent derrière l'opération DDL, entraînant des délais d'expiration ou des perturbations applicatives.
Générer des pics d'utilisation des IOPS et du CPU, affectant les autres charges de travail du même cluster.
PolarDB for MySQL a considérablement amélioré les performances DDL et la gestion des verrous au fil des versions. Ce guide vous aide à identifier le profil de risque de chaque opération avant son exécution.
Algorithmes d'exécution DDL
PolarDB sélectionne automatiquement l'algorithme le plus efficace selon l'ordre suivant : INSTANT → INPLACE → COPY. Comprendre chaque algorithme permet d'anticiper l'impact d'une opération DDL.
| Algorithme | Fonctionnement | Impact |
|---|---|---|
| INSTANT | Modifie uniquement les métadonnées dans le dictionnaire de données. Aucune donnée n'est copiée ni reconstruite. | S'achève en quelques secondes, indépendamment de la taille de la table. Les lectures et écritures simultanées sont autorisées. |
| INPLACE | Reconstruit ou réorganise les données au sein du moteur de stockage. La plupart des opérations INPLACE autorisent les lectures et écritures simultanées. Certaines opérations INPLACE (par exemple, RENAME TABLE et ADD COMMENT) ne touchent que les métadonnées et s'achèvent en quelques secondes. |
Impact minimal. Le DML simultané est généralement autorisé. |
| COPY | Copie toutes les données de la table d'origine vers une nouvelle table. Maintient un verrou partagé sans écriture (SNW) pendant toute la durée de l'opération. | Bloque toutes les écritures pendant toute la durée de l'opération. Les lectures restent autorisées. |
Les opérations DDL qui autorisent les lectures et écritures simultanées lors de leur exécution sont appelées Online DDL. Cette approche minimise l'impact sur la production.
Contrôler la sélection de l'algorithme avec les clauses ALTER TABLE
Pour remplacer la sélection automatique d'algorithme ou imposer un comportement de verrouillage spécifique, utilisez les clauses ALGORITHM et LOCK dans ALTER TABLE :
Clause ALGORITHM : impose un algorithme spécifique. Si l'opération DDL ne prend pas en charge l'algorithme spécifié, une erreur est renvoyée immédiatement. Valeurs valides : DEFAULT, INSTANT, INPLACE, COPY.
Clause LOCK : contrôle l'accès simultané pendant l'exécution du DDL. Valeurs valides :
| Valeur | Comportement |
|---|---|
DEFAULT |
Accorde le niveau maximal d'accès simultané pris en charge par le type de DDL. |
NONE |
Exige des lectures et écritures simultanées. Renvoie une erreur si cela n'est pas pris en charge. |
SHARED |
Autorise les lectures simultanées, mais bloque les écritures. Renvoie une erreur si les lectures simultanées ne sont pas prises en charge. |
EXCLUSIVE |
Bloque toutes les lectures et écritures simultanées. |
Spécifier LOCK empêche la table de devenir inaccessible pendant l'exécution : si le comportement de verrouillage réel ne répond pas à l'exigence spécifiée, l'opération s'arrête immédiatement.
PolarDB prend en charge le DDL parallèle pour les opérations sur les tables volumineuses, telles que la création d'index et la reconstruction de tables. Le DDL parallèle utilise plusieurs threads et peut améliorer la vitesse d'exécution jusqu'à 15-20 fois par rapport à une exécution monothread. Pour plus d'informations, consultez DDL parallèle .
Nous contacter
Si vous avez des questions concernant les opérations DDL, contactez le support technique.
Prévisualiser le comportement DDL avant l'exécution
Le comportement DDL pouvant être influencé par la structure de la table, la configuration des paramètres et les fonctionnalités activées, le comportement réel peut différer des tableaux présentés dans ce guide. Utilisez EXPLAIN DDL pour prévisualiser exactement comment une instruction DDL sera exécutée avant de la lancer.
{ EXPLAIN | DESCRIBE | DESC } ALTER TABLE ...
EXPLAIN DDL renvoie les informations suivantes :
Si le DDL peut s'exécuter avec succès.
L'algorithme qui sera utilisé (INSTANT, INPLACE ou COPY).
Si l'opération entraînera une reconstruction complète de la table.
Si le DML simultané est autorisé pendant l'exécution.
Si l'opération sera bloquée par des transactions non validées.
Si l'accélération par DDL parallèle est prise en charge et, le cas échéant, le degré de parallélisme.
Pour plus d'informations, consultez EXPLAIN DDL.
Comportement DDL par opération
Les tableaux ci-dessous détaillent le comportement des opérations DDL selon les versions de PolarDB for MySQL. Quatre colonnes décrivent le comportement de chaque opération :
DML simultané : indique si les lectures et écritures simultanées sont autorisées pendant l'exécution.
Reconstruction de la table : indique si l'opération déclenche une reconstruction complète de la table (opération longue pour les tables volumineuses).
Métadonnées uniquement : indique si l'opération modifie uniquement les métadonnées (s'achève en quelques secondes).
DDL parallèle : indique si l'opération prend en charge l'accélération par DDL parallèle.
Opérations sur les index
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Créer un index secondaire | Oui | Non | Non | 8.0.2 / 8.0.1 / 5.7 : Pris en charge ; 5.6 : Non pris en charge |
| Supprimer un index secondaire | Oui | Non | Oui | Non applicable |
| Renommer un index secondaire | Oui | Non | Oui | Non applicable |
| Ajouter un index texte intégral (FULLTEXT) | Non | Non¹ | Non | Non pris en charge |
| Ajouter un index spatial (SPATIAL) | Non | Non | Non | Non pris en charge |
¹ Lors de l'ajout du premier index texte intégral à une table, une reconstruction supplémentaire de la table est déclenchée s'il n'existe pas de colonne FTS_DOC_ID définie par l'utilisateur.
Opérations sur les clés primaires
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une clé primaire | Oui¹ | Oui | Non | 8.0.2 / 8.0.1 / 5.7 : Pris en charge ; 5.6 : Non pris en charge |
| Supprimer une clé primaire | Non | Oui | Non | Non pris en charge |
| Supprimer la clé primaire d'origine et en ajouter une nouvelle | Oui¹ | Oui | Non | 8.0.2 / 8.0.1 / 5.7 : Pris en charge ; 5.6 : Non pris en charge |
¹ Le DML simultané est autorisé uniquement lorsque le paramètre de cluster sql_mode inclut STRICT_TRANS_TABLES ou STRICT_ALL_TABLES.
Opérations sur les colonnes
Les tableaux ci-dessous répertorient le comportement spécifique à chaque version. Consultez la section Limitations et exceptions après les tableaux pour connaître les contraintes importantes concernant l'ajout instantané de colonne, l'extension de longueur VARCHAR et la conversion de jeu de caractères.
PolarDB for MySQL 8.0.2
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une colonne | Oui | Non¹ | Oui¹ | Pris en charge¹ |
| Supprimer une colonne | Oui | Oui | Non | Pris en charge |
| Renommer une colonne | Oui | Non | Oui | Non applicable |
| Réordonner les colonnes | Oui | Oui | Non | Pris en charge |
| Définir la valeur par défaut d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier le commentaire d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier le type d'une colonne | Non | Oui | Non | Non pris en charge |
| Étendre la longueur VARCHAR | Oui² | Non | Oui | Non applicable |
| Changer le jeu de caractères de UTF8mb3 à UTF8mb4 | Non | Non³ | Oui³ | Non pris en charge |
| Supprimer la valeur par défaut d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier la valeur d'auto-incrémentation | Oui | Non | Oui | Non applicable |
| Passer une colonne à NULL | Oui | Oui | Non | Pris en charge |
| Passer une colonne à NOT NULL | Non | Oui | Non | Non pris en charge |
| Modifier la définition d'une colonne ENUM/SET | Oui | Non | Oui⁴ | Non applicable |
PolarDB for MySQL 8.0.1
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une colonne | Oui | Non¹ | Oui¹ | Pris en charge¹ |
| Supprimer une colonne | Oui | Oui | Non | Pris en charge |
| Renommer une colonne | Oui | Non | Oui | Non applicable |
| Réordonner les colonnes | Oui | Oui | Non | Pris en charge |
| Définir la valeur par défaut d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier le commentaire d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier le type d'une colonne | Non | Oui | Non | Non pris en charge |
| Étendre la longueur VARCHAR | Oui² | Non | Oui | Non applicable |
| Changer le jeu de caractères de UTF8mb3 à UTF8mb4 | Non | Non³ | Oui³ | Non pris en charge |
| Supprimer la valeur par défaut d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier la valeur d'auto-incrémentation | Oui | Non | Oui | Non applicable |
| Passer une colonne à NULL | Oui | Oui | Non | Pris en charge |
| Passer une colonne à NOT NULL | Non | Oui | Non | Non pris en charge |
| Modifier la définition d'une colonne ENUM/SET | Oui | Non | Oui⁴ | Non applicable |
PolarDB for MySQL 5.7
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une colonne | Oui | Non¹ | Oui¹ | Pris en charge¹ |
| Supprimer une colonne | Oui | Oui | Non | Pris en charge |
| Renommer une colonne | Oui | Non | Oui | Non applicable |
| Réordonner les colonnes | Oui | Oui | Non | Pris en charge |
| Définir la valeur par défaut d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier le commentaire d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier le type d'une colonne | Non | Oui | Non | Non pris en charge |
| Étendre la longueur VARCHAR | Oui² | Non | Oui | Non applicable |
| Changer le jeu de caractères de UTF8mb3 à UTF8mb4 | Non | Oui | Non | Non pris en charge |
| Supprimer la valeur par défaut d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier la valeur d'auto-incrémentation | Oui | Non | Oui | Non applicable |
| Passer une colonne à NULL | Oui | Oui | Non | Pris en charge |
| Passer une colonne à NOT NULL | Non | Oui | Non | Non pris en charge |
| Modifier la définition d'une colonne ENUM/SET | Oui | Non | Oui³ | Non applicable |
PolarDB for MySQL 5.6
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une colonne | Oui | Non¹ | Oui¹ | Non pris en charge |
| Supprimer une colonne | Oui | Oui | Non | Non pris en charge |
| Renommer une colonne | Oui | Non | Oui | Non applicable |
| Réordonner les colonnes | Oui | Oui | Non | Non pris en charge |
| Définir la valeur par défaut d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier le commentaire d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier le type d'une colonne | Non | Oui | Non | Non pris en charge |
| Étendre la longueur VARCHAR | Non | Oui | Non | Non pris en charge |
| Changer le jeu de caractères de UTF8mb3 à UTF8mb4 | Non | Oui | Non | Non pris en charge |
| Supprimer la valeur par défaut d'une colonne | Oui | Non | Oui | Non applicable |
| Modifier la valeur d'auto-incrémentation | Oui | Non | Oui | Non applicable |
| Passer une colonne à NULL | Oui | Oui | Non | Non pris en charge |
| Passer une colonne à NOT NULL | Non | Oui | Non | Non pris en charge |
| Modifier la définition d'une colonne ENUM/SET | Oui | Non | Oui² | Non applicable |
Limitations et exceptions
Ajout instantané de colonne
Lorsque la fonctionnalité d'ajout instantané de colonne est disponible, l'ajout d'une colonne modifie uniquement les métadonnées et s'achève en quelques secondes, quelle que soit la taille de la table. Le comportement varie selon la version :
| Version | Activation | Notes supplémentaires |
|---|---|---|
| 8.0.2 | Activé par défaut | — |
| 8.0.1 | Activé par défaut | Si la table possède un index columnstore, définissez loose_imci_enable_add_column_instant_ddl sur ON. PolarDB reconstruit alors l'index columnstore de manière asynchrone en arrière-plan. Pendant cette reconstruction, l'index columnstore est temporairement indisponible. |
| 5.7 | Définir loose_innodb_support_instant_add_column sur ON |
— |
| 5.6 | Définir loose_innodb_support_instant_add_column sur ON |
Actuellement en version canari. Pour l'activer, accédez au Centre de quotas, recherchez l'ID de quota polardb_mysql_iac_56, et cliquez sur Apply. Non pris en charge sur les tables partitionnées. |
Toutes les versions partagent les contraintes suivantes :
Les colonnes ne peuvent être ajoutées qu'à la fin de la table.
Si la table ne possède pas de clé primaire, définissez
implicit_primary_keysur OFF afin d'éviter l'échec de l'opération dû à une clé primaire implicite en fin de table.Non pris en charge sur les tables compressées (
ROW_FORMAT=COMPRESSED), les tables avec index texte intégral ou les tables temporaires.
Lorsque l'ajout instantané de colonne n'est pas pris en charge, le système revient à l'algorithme INPLACE, déclenchant ainsi une reconstruction de la table. Les lectures et écritures simultanées restent autorisées pendant la reconstruction, et le DDL parallèle peut être utilisé pour l'accélérer.
Pour plus d'informations, consultez Ajout instantané de colonne.
Extension de la longueur VARCHAR
PolarDB stocke la longueur d'une colonne VARCHAR sur 1 octet pour les colonnes jusqu'à 255 octets, et sur 2 octets pour les colonnes de 256 octets ou plus. L'extension d'une colonne VARCHAR ne modifie que les métadonnées lorsque l'extension reste dans la même plage de longueur (0–255 octets, ou 256 octets vers une taille supérieure). Si l'extension franchit la limite (passant de moins de 256 octets à 256 octets ou plus), PolarDB utilise l'algorithme COPY par défaut, verrouillant la table pendant toute la durée de l'opération. Les écritures sont bloquées, tandis que les lectures restent autorisées.
Pour vérifier qu'une modification VARCHAR est éligible à une opération sur métadonnées uniquement, spécifiez ALGORITHM=INPLACE. Si l'algorithme INPLACE n'est pas pris en charge, une erreur est renvoyée immédiatement au lieu de revenir à l'algorithme COPY :
ALTER TABLE table_name ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256);
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
Pour éviter cette situation à l'avenir, définissez la longueur maximale des colonnes VARCHAR à 256 octets ou plus lors de la conception de votre schéma.
Changement de jeu de caractères de UTF8mb3 à UTF8mb4
Sur la version 8.0.2, le changement du jeu de caractères d'une colonne de UTF8mb3 à UTF8mb4 ne modifie que les métadonnées lorsque toutes les conditions suivantes sont remplies :
Le type de colonne est CHAR, VARCHAR, ENUM ou TEXT.
Aucun index n'existe sur la colonne modifiée.
La longueur de stockage maximale de la colonne se situe dans la même plage avant et après la conversion (toutes deux inférieures à 256 octets, ou toutes deux égales ou supérieures à 256 octets).
Sur la version 8.0.1, les mêmes conditions s'appliquent, et le paramètre loose_innodb_support_instant_modify_charset doit en outre être défini sur ON.
Sur les versions 5.7 et 5.6, l'algorithme COPY est toujours utilisé, ce qui entraîne la reconstruction de la table pendant toute la durée de l'opération.
Si les conditions ne sont pas remplies sur les versions 8.0.2 ou 8.0.1, l'algorithme COPY est utilisé. Pour confirmer si une modification est éligible à une opération sur métadonnées uniquement, spécifiez ALGORITHM=INPLACE. Si cela n'est pas pris en charge, une erreur est renvoyée immédiatement :
ALTER TABLE test MODIFY COLUMN b char(1) CHARACTER SET utf8mb4 DEFAULT NULL, ALGORITHM=INPLACE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
Modifications de définition de colonnes ENUM/SET
La modification d'une colonne ENUM ou SET ne touche que les métadonnées lorsque la taille de stockage du type de données ne change pas et que vous ajoutez des éléments à la fin de l'ENUM ou du SET. Toute autre modification nécessite l'algorithme COPY pour reconstruire la table.
Opérations sur les tables
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Modifier ROW_FORMAT | Oui | Oui | Non | 8.0.2 / 8.0.1 / 5.7 : Pris en charge ; 5.6 : Non pris en charge |
| Modifier KEY_BLOCK_SIZE | Oui | Oui | Non | 8.0.2 / 8.0.1 / 5.7 : Pris en charge ; 5.6 : Non pris en charge |
| Définir des statistiques persistantes | Oui | Non | Oui | Non applicable |
| Déclarer un jeu de caractères | Oui | Non | Oui | Non applicable |
| Convertir un jeu de caractères | Non | Oui | Non | Non pris en charge |
| Optimiser une table¹ | Oui | Oui | Non | 8.0.2 / 8.0.1 / 5.7 : Pris en charge ; 5.6 : Non pris en charge |
| Reconstruire une table | Oui | Oui | Non | 8.0.2 / 8.0.1 / 5.7 : Pris en charge ; 5.6 : Non pris en charge |
| Renommer une table | Oui | Non | Oui | Non applicable |
| Modifier le commentaire d'une table | Oui | Non | Oui | Non applicable |
¹ Lors de la défragmentation d'une table avec ALTER TABLE table_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE, l'algorithme INPLACE n'est pas pris en charge pour les tables possédant des index texte intégral.
Opérations sur les colonnes générées
PolarDB for MySQL 5.6 ne prend pas en charge les colonnes générées.
Les versions 8.0.2, 8.0.1 et 5.7 présentent un comportement identique :
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une colonne STORED | Non¹ | Oui | Non | Non pris en charge |
| Modifier l'ordre d'une colonne STORED | Non | Oui | Non | Non pris en charge |
| Supprimer une colonne STORED | Oui | Oui | Non | Pris en charge |
| Ajouter une colonne VIRTUAL | Oui | Non | Oui | Non applicable |
| Modifier l'ordre d'une colonne VIRTUAL | Non | Oui | Non | Non pris en charge |
| Supprimer une colonne VIRTUAL | Oui | Non | Oui | Non applicable |
¹ L'ajout d'une colonne STORED implique la couche SQL/Server, le Online DDL n'est donc pas pris en charge.
Opérations sur les clés étrangères
Le comportement est identique pour toutes les versions (8.0.2, 8.0.1, 5.7, 5.6) :
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une clé étrangère | Oui¹ | Non¹ | Oui¹ | Non applicable |
| Supprimer une clé étrangère | Oui¹ | Non¹ | Oui¹ | Non applicable |
¹ Le DDL INPLACE est pris en charge uniquement lorsque foreign_key_checks est désactivé et que seules les métadonnées sont modifiées. Dans le cas contraire, seul l'algorithme COPY est pris en charge, verrouillant la table pendant toute la durée de l'opération.
Opérations sur les tables partitionnées
PolarDB for MySQL 8.0.2
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une partition (ADD) | Oui¹ | Non² | Oui | Non pris en charge |
| Supprimer une partition (DROP) | Oui¹ | Non² | Non | Non pris en charge |
| Abandonner un espace de table de partition (DISCARD) | Non | Non | Non | Non pris en charge |
| Importer un espace de table de partition (IMPORT) | Non | Non | Non | Non pris en charge |
| Tronquer une partition (TRUNCATE) | Oui | Non | Non | Non pris en charge |
| Fusionner des partitions (COALESCE) | Non | Oui³ | Non | Non pris en charge |
| Réorganiser une partition (REORGANIZE) | Oui¹ | Non⁴ | Non | Non pris en charge |
| Échanger une partition (EXCHANGE) | Oui¹ | Non | Oui | Non pris en charge |
| Analyser une partition (ANALYZE) | Oui | Non | Non⁵ | Non pris en charge |
| Vérifier une partition (CHECK) | Oui | Non | Non⁶ | Non pris en charge |
| Optimiser une partition (OPTIMIZE) | Oui⁷ | Oui⁷ | Non | Pris en charge⁷ |
| Reconstruire une partition (REBUILD) | Oui¹ | Non⁴ | Non | Non pris en charge |
| Réparer une partition (REPAIR) | Oui | Non⁸ | Non | Non pris en charge |
| Convertir une table en table partitionnée | Non | Oui | Oui⁹ | Non pris en charge |
| Convertir une table partitionnée en table standard | Non | Oui | Non | Non pris en charge |
| Créer un index partiel | Oui | Non¹⁰ | Non | Pris en charge |
¹ Lorsque loose_partition_level_mdl_enabled est défini sur true, les verrous de métadonnées (MDL) au niveau de la partition garantissent que les opérations DDL n'affectent pas le DML sur les partitions non concernées. Pour plus d'informations, consultez Maintenance de partition en ligne.
² Pour les tables partitionnées RANGE et LIST, l'ajout ou la suppression de partitions ne nécessite pas de reconstruction de la table. Pour les tables partitionnées HASH et KEY, l'ajout de partitions nécessite une reconstruction de la table. La suppression de partitions dans les tables partitionnées HASH et KEY n'est pas prise en charge.
³ Seules les partitions HASH et KEY sont prises en charge.
⁴ La réorganisation ou la reconstruction d'une partition ne reconstruit que les partitions spécifiées nécessitant une redistribution et une reconstruction des données. Les autres partitions ne sont pas affectées.
⁵ L'analyse d'une partition modifie uniquement les statistiques, et non les métadonnées ou les données de la table.
⁶ La vérification d'une partition ne modifie ni les métadonnées ni les données.
⁷ Lors de l'exécution de OPTIMIZE PARTITION sur une table InnoDB, l'ensemble de la table partitionnée est reconstruit. Les lectures et écritures sont autorisées pendant la reconstruction. Définissez innodb_parallel_build_primary_index sur ON pour utiliser le DDL parallèle afin d'accélérer la reconstruction.
⁸ La réparation d'une partition ne reconstruit que les partitions spécifiées nécessitant une réparation.
⁹ La conversion instantanée prend uniquement en charge la conversion rapide d'une table standard en table partitionnée par plage.
¹⁰ PolarDB for MySQL prend en charge la création et la suppression d'index au niveau de la partition. Pour plus d'informations, consultez Index partiel.
PolarDB for MySQL 8.0.1
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une partition (ADD) | Non | Non¹ | Oui | Non pris en charge |
| Supprimer une partition (DROP) | Non | Non² | Non | Non pris en charge |
| Abandonner un espace de table de partition (DISCARD) | Non | Non | Non | Non pris en charge |
| Importer un espace de table de partition (IMPORT) | Non | Non | Non | Non pris en charge |
| Tronquer une partition (TRUNCATE) | Oui | Non | Non | Non pris en charge |
| Fusionner des partitions (COALESCE) | Non | Oui | Non | Non pris en charge |
| Réorganiser une partition (REORGANIZE) | Non | Non³ | Non | Non pris en charge |
| Échanger une partition (EXCHANGE) | Oui | Oui | Oui | Non pris en charge |
| Analyser une partition (ANALYZE) | Oui | Oui | Non⁴ | Non pris en charge |
| Vérifier une partition (CHECK) | Oui | Non | Non⁵ | Non pris en charge |
| Optimiser une partition (OPTIMIZE) | Oui⁶ | Oui⁶ | Non | Pris en charge⁶ |
| Reconstruire une partition (REBUILD) | Non | Non³ | Non | Non pris en charge |
| Réparer une partition (REPAIR) | Oui | Non³ | Non | Non pris en charge |
| Convertir une table en table partitionnée | Non | Oui | Non | Non pris en charge |
| Convertir une table partitionnée en table standard | Non | Oui | Non | Non pris en charge |
¹ Pour les tables partitionnées RANGE et LIST, l'ajout de partitions ne nécessite pas de reconstruction de la table. Pour les tables partitionnées HASH et KEY, l'ajout de partitions nécessite une reconstruction de la table.
² La suppression de partitions dans les tables partitionnées HASH et KEY n'est pas prise en charge.
³ La réorganisation, la reconstruction et la réparation d'une partition ne reconstruisent que les partitions spécifiées. Les autres partitions ne sont pas affectées.
⁴ L'analyse d'une partition modifie uniquement les statistiques, et non les métadonnées ou les données de la table.
⁵ La vérification d'une partition ne modifie ni les métadonnées ni les données.
⁶ Lors de l'exécution de OPTIMIZE PARTITION sur une table InnoDB, l'ensemble de la table partitionnée est reconstruit. Les lectures et écritures sont autorisées pendant la reconstruction. Définissez innodb_parallel_build_primary_index sur ON pour utiliser le DDL parallèle afin d'accélérer la reconstruction.
PolarDB for MySQL 5.7
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une partition (ADD) | Non | Non¹ | Oui | Non pris en charge |
| Supprimer une partition (DROP) | Non | Non¹ | Non | Non pris en charge |
| Abandonner un espace de table de partition (DISCARD) | Non | Non | Non | Non pris en charge |
| Importer un espace de table de partition (IMPORT) | Non | Non | Non | Non pris en charge |
| Tronquer une partition (TRUNCATE) | Oui | Non | Non | Non pris en charge |
| Fusionner des partitions (COALESCE) | Non | Oui | Non | Non pris en charge |
| Réorganiser une partition (REORGANIZE) | Non | Non² | Non | Non pris en charge |
| Permuter une partition | Oui | Non | Oui | Non pris en charge |
| Analyser une partition (ANALYZE) | Oui | Non | Non³ | Non pris en charge |
| Vérifier une partition (CHECK) | Oui | Non | Non⁴ | Non pris en charge |
| Optimiser une partition (OPTIMIZE) | Non | Oui | Non | Non pris en charge |
| Reconstruire une partition (REBUILD) | Non | Non² | Non | Non pris en charge |
| Réparer une partition (REPAIR) | Oui | Non² | Non | Non pris en charge |
| Convertir une table en table partitionnée | Non | Oui | Non | Non pris en charge |
| Convertir une table partitionnée en table standard | Non | Oui | Non | Non pris en charge |
¹ Pour les tables partitionnées RANGE et LIST, l'ajout ou la suppression de partitions ne nécessite pas de reconstruction de la table. Pour les tables partitionnées HASH et KEY, l'ajout de partitions nécessite une reconstruction de la table. La suppression de partitions dans les tables partitionnées HASH et KEY n'est pas prise en charge.
² La réorganisation, la reconstruction et la réparation d'une partition ne reconstruisent que les partitions spécifiées. Les autres partitions ne sont pas affectées.
³ L'analyse d'une partition modifie uniquement les statistiques, et non les métadonnées ou les données de la table.
⁴ La vérification d'une partition ne modifie ni les métadonnées ni les données.
PolarDB for MySQL 5.6
| Opération | DML simultané | Reconstruction de la table | Métadonnées uniquement | DDL parallèle |
|---|---|---|---|---|
| Ajouter une partition (ADD) | Non | Non¹ | Oui | Non pris en charge |
| Supprimer une partition (DROP) | Non | Non¹ | Non | Non pris en charge |
| Abandonner un espace de table de partition (DISCARD) | Non | Non | Non | Non pris en charge |
| Importer un espace de table de partition (IMPORT) | Non | Non | Non | Non pris en charge |
| Tronquer une partition (TRUNCATE) | Oui | Non | Non | Non pris en charge |
| Fusionner des partitions (COALESCE) | Non | Oui | Non | Non pris en charge |
| Réorganiser une partition (REORGANIZE) | Non | Non² | Non | Non pris en charge |
| Échanger une partition (EXCHANGE) | Oui | Non | Oui | Non pris en charge |
| Analyser une partition (ANALYZE) | Oui | Non | Non³ | Non pris en charge |
| Vérifier une partition (CHECK) | Oui | Non | Non⁴ | Non pris en charge |
| Optimiser une partition (OPTIMIZE) | Non | Oui | Non | Non pris en charge |
| Reconstruire une partition (REBUILD) | Non | Non² | Non | Non pris en charge |
| Réparer une partition (REPAIR) | Oui | Non² | Non | Non pris en charge |
| Convertir une table en table partitionnée | Non | Oui | Non | Non pris en charge |
| Convertir une table partitionnée en table standard | Non | Oui | Non | Non pris en charge |
¹ Pour les tables partitionnées RANGE et LIST, l'ajout ou la suppression de partitions ne nécessite pas de reconstruction de la table. Pour les tables partitionnées HASH et KEY, l'ajout de partitions nécessite une reconstruction de la table. La suppression de partitions dans les tables partitionnées HASH et KEY n'est pas prise en charge.
² La réorganisation, la reconstruction et la réparation d'une partition ne reconstruisent que les partitions spécifiées. Les autres partitions ne sont pas affectées.
³ L'analyse d'une partition modifie uniquement les statistiques, et non les métadonnées ou les données de la table.
⁴ La vérification d'une partition ne modifie ni les métadonnées ni les données.
Choisir une méthode d'exécution
Lorsqu'une opération DDL utilise l'algorithme INSTANT ou INPLACE, exécutez-la directement via le noyau (Online DDL). C'est l'approche la plus rapide et la plus stable.
Lorsqu'une opération DDL utilise l'algorithme COPY, la table est verrouillée pendant toute la durée de l'opération. Dans ce cas, envisagez d'utiliser le DDL sans verrouillage dans DMS ou un outil tel que gh-ost pour autoriser les lectures et écritures pendant l'exécution. Ces approches sont plus lentes et peuvent échouer sur des tables volumineuses ou des charges de travail à haute concurrence en raison d'un volume excessif de données incrémentielles.
| Méthode | Lectures et écritures simultanées | Vitesse | Journalisation binaire requise | Accélération parallèle |
|---|---|---|---|---|
| Noyau (Online DDL) | Oui | Rapide | Non | Pris en charge |
| DDL sans verrouillage dans DMS, gh-ost | Oui | Lente | Oui | Non pris en charge |
Même avec des outils tiers, un verrou MDL-X est acquis lors du basculement de table (lorsque les métadonnées sont modifiées), bloquant temporairement la table. Pour résoudre ce problème, activez la fonctionnalité DDL non bloquant ou la fonctionnalité DDL préemptif .
Les opérations DDL sans verrouillage peuvent augmenter l'utilisation des IOPS et du CPU. Exécutez-les pendant les heures creuses.
Rubriques connexes
DDL parallèle : accélère les DDL sur tables volumineuses grâce à l'exécution multithread.
EXPLAIN DDL : prévisualise le comportement d'exécution DDL avant de le lancer.
Ajout instantané de colonne : ajoute des colonnes sans reconstruire la table.
Mise en œuvre de l'évolution de schéma sans verrouillage : exécute des DDL avec algorithme COPY sans impacter votre application.
Maintenance de partition en ligne : DDL de partition qui ne bloque pas le DML sur les partitions non concernées.
DDL non bloquant et DDL préemptif : réduisent la contention des verrous MDL lors des changements de schéma.
Si vous avez des questions sur les opérations DDL, contactez le support technique.