


Comment modifier une grande table sans le verrouiller (DDL en ligne)?
Jun 14, 2025 am 12:36 AMPour modifier une grande table de production sans verrouillage longues, utilisez des techniques DDL en ligne. 1) Identifiez si votre opération de modification est rapide (par exemple, ajoutant / supprimer les colonnes, modifiant null / non nul) ou lent (par exemple, modification des types de données, réorganisant les colonnes, ajoutant des index sur de grandes données). 2) Utilisez des fonctionnalités spécifiques à la base de données: dans MySQL, appliquez un algorithme = Inplace et Lock = Aucun; Dans PostgreSQL, utilisez Create Index simultanément pour la création d'index non bloquante. 3) Pour les changements non pris en charge, utilisez des outils tiers comme Pt-online-Schema-Change qui crée une table d'ombre, copie les données en morceaux et échange des tables avec un verrouillage minimal. 4) Assurer un espace disque suffisant, tester en stadification et éviter les conflits avec la réplication ou les déclencheurs. 5) Planifiez le comportement d'application en planifiant pendant un trafic bas, en surveillant les performances et en utilisant des drapeaux de fonction pour gérer les transitions de schéma en douceur.
Lorsque vous devez modifier une grande table dans une base de données de production, la dernière chose que vous voulez est de la verrouiller pendant une période prolongée. Les blocs de verrouillage des lectures et des écritures, ce qui mène à des problèmes de temps d'arrêt ou de performances. La solution? DDL en ligne - apporter des modifications sans verrouiller la table pendant longtemps. Voici comment vous pouvez le faire efficacement.
Comprendre ce qui fait un alter l'opération bloquant
Toutes les opérations ALTER TABLE
ne sont pas égales. Certains sont des changements rapides sur les métadonnées uniquement, tandis que d'autres nécessitent de reconstruire l'ensemble du tableau.
- Les opérations rapides (non bloquantes ou blocage minimale) comprennent:
- Ajout de colonnes / abandon à la fin
- Modification de la colonne NULL / NON NULL
- Renommer des colonnes ou des index
- Les opérations lents (le blocage souvent) comprennent:
- Modification des types de données de colonne
- Réorganiser les colonnes
- Ajout d'index sur les grands ensembles de données
Si votre opération entre dans la catégorie lente, vous devrez utiliser des outils ou des techniques qui vous permettent d'appliquer des modifications de schéma en ligne.
Utilisez des fonctionnalités DDL en ligne spécifiques à la base de données
Les bases de données modernes ont une prise en charge intégrée pour le DDL en ligne, surtout si vous utilisez MySQL ou PostgreSQL.
Dans MySQL (5.6 avec InNODB):
Utiliser ALGORITHM=INPLACE
et LOCK=NONE
dans la mesure du possible:
Alter Table Users Ajouter la colonne NEW_COL VARCHAR (255), Algorithme = inplace, lock = aucun;
- Vérifiez si votre changement spécifique prend en charge ces options.
- Si
ALGORITHM=INPLACE
n'est pas pris en charge, vous aurez besoin d'un outil tiers.
Dans PostgreSQL:
La plupart des commandes ALTER TABLE
sont déjà non bloquantes par défaut, mais l'ajout d'index peut être effectué simultanément:
Créer un index simultanément idx_users_email sur les utilisateurs (e-mail);
Cela évite de verrouiller le tableau pendant la création d'index.
Utilisez des outils tiers pour des changements complexes
Lorsque le support natif ne suffit pas, des outils comme Pt-online-Schema-Change (pour MySQL) ou Liquibase / Flyway avec des stratégies personnalisées peuvent aider.
Pt-online-Schema-Change (exemple MySQL):
Pt-online-Schema-Change --alter "Ajouter une colonne active boolean" d = mydb, t = utilisateurs --execute
Comment ?a marche:
- Crée une copie d'ombre de la table
- Applique des modifications à la copie
- Copie les données en morceaux
- échange des tables lorsque vous êtes prêt
- évite les longues serrures et maintient la disponibilité
S'assurer:
- Vous avez suffisamment d'espace disque
- Les déclencheurs ou la réplication ne causeront pas de problèmes
- Vous le testez en premier
Planifiez le comportement d'application
Même avec le DDL en ligne, il y a des cas de bord:
- Les transactions de longue date pourraient entrer en conflit avec les changements de schéma
- Un retard de réplication peut se produire pendant de grandes modifications
- Le code d'application doit tolérer temporairement les schémas anciens et nouveaux
Quelques conseils:
- Planifier les modifications pendant les périodes de trafic bas si possible
- Surveiller la réplication et les performances de requête pendant le changement
- Considérez les drapeaux de fonction ou les API versés pour gérer les transitions de schéma en douceur
C'est essentiellement ?a. La modification de grandes tables sans les verrouiller revient à comprendre les capacités de votre base de données, à utiliser les bons outils et à planifier le comportement d'application du monde réel. Ce n'est pas magique, juste une exécution minutieuse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Pour réinitialiser le mot de passe racine de MySQL, veuillez suivre les étapes suivantes: 1. Arrêtez le serveur MySQL, utilisez SudosystemCTlStopmysql ou SudosystemctlStopMysQLD; 2. Démarrez MySQL en - Skip-Grant-Tables, exécutez SudomysQld-Skip-Grant-Tables &; 3. Connectez-vous à MySQL et exécutez la commande SQL correspondante pour modifier le mot de passe en fonction de la version, telle que Flushprivileges; alterUser'root '@' localhost'identifiedby'your_new

ToseCurelyConnectToAremotemysQlServer, Usesshtunneling, ConfigureMysqlForremoteAccess, Setfirewallrules et Considersslincryption . Premier, établianshtunnelwithssh-l3307: localhost: 3306User @ Remote-Server-NandConnectViamysql-H127.0.0.1-P3307.Second, Editmys

MySQLDump est un outil commun pour effectuer des sauvegardes logiques des bases de données MySQL. Il génère des fichiers SQL contenant des instructions de création et d'insertion pour reconstruire la base de données. 1. Il ne sauvegarde pas le fichier d'origine, mais convertit la structure de la base de données et le contenu en commandes SQL portables; 2. Il convient aux petites bases de données ou à la récupération sélective et ne convient pas à la récupération rapide des données de niveau TB; 3. 4. Utilisez la commande MySQL pour importer pendant la récupération et peut désactiver les vérifications des clés étrangères pour améliorer la vitesse; 5. Il est recommandé de tester régulièrement la sauvegarde, d'utiliser la compression et de régler automatiquement.

Lors de la gestion des valeurs nuls dans MySQL, veuillez noter: 1. Lors de la conception du tableau, les champs clés sont définis sur Notnull et les champs facultatifs sont autorisés nuls; 2. ISNULL ou ISNOTNULL doit être utilisé avec = ou! =; 3. Les fonctions IFNULL ou Coalesce peuvent être utilisées pour remplacer les valeurs par défaut d'affichage; 4. Soyez prudent lorsque vous utilisez des valeurs nulles directement lors de l'insertion ou de la mise à jour, et faites attention aux méthodes de traitement de la source de données et du cadre ORM. NULL représente une valeur inconnue et n'égale aucune valeur, y compris lui-même. Par conséquent, soyez prudent lorsque vous interrogez, comptez et connectez les tables pour éviter les données manquantes ou les erreurs logiques. L'utilisation rationnelle des fonctions et des contraintes peut réduire efficacement les interférences causées par NULL.

Allumez les journaux de requête lente MySQL et analysez les problèmes de performances localisés. 1. Modifiez le fichier de configuration ou définissez dynamiquement Slow_Query_Log et Long_Query_time; 2. Le journal contient des champs clés tels que Query_time, Lock_time, ROWS_EXAMINE pour aider à juger les goulots d'étranglement de l'efficacité; 3. Utilisez les outils MySqlDumpSlow ou Pt-Query-digest pour analyser efficacement les journaux; 4. Les suggestions d'optimisation incluent l'ajout d'index, d'éviter la sélection *, le fractionnement des requêtes complexes, etc. Par exemple, l'ajout d'un index à user_id peut réduire considérablement le nombre de lignes numérisées et améliorer l'efficacité de la requête.

GroupBy est utilisé pour regrouper les données par champ et effectuer des opérations d'agrégation, et avoir une utilisation est utilisée pour filtrer les résultats après le regroupement. Par exemple, l'utilisation de groupByCustomer_ID peut calculer la quantité de consommation totale de chaque client; L'utilisation d'avoir peut filtrer les clients avec une consommation totale de plus de 1 000. Les champs non agrégés après sélection doivent appara?tre dans GroupBY, et avoir peut être filtré conditionnellement à l'aide d'un alias ou d'expressions d'origine. Les techniques courantes incluent le comptage du nombre de chaque groupe, le regroupement de plusieurs champs et le filtrage avec plusieurs conditions.

Les transactions MySQL et les mécanismes de verrouillage sont essentielles pour le contr?le et le réglage des performances simultanés. 1. Lorsque vous utilisez des transactions, assurez-vous d'exciter explicitement et de maintenir les transactions à court pour éviter l'occupation des ressources et les ballonnements undolog en raison de longues transactions; 2. Les opérations de verrouillage incluent des verrous partagés et des verrous exclusifs, SELECT ... Forupdate Plus X Locks, SELECT ... LOCKINSHAREMODE plus les verrous S, les opérations d'écriture automatiquement et les index doivent être utilisés pour réduire la granularité des verrous; 3. Le niveau d'isolement est lisible de manière répétitive par défaut, adapté à la plupart des scénarios et les modifications devraient être prudentes; 4. L'inspection de blocage peut analyser les détails de la dernière impasse via la commande showEngineInNodbStatus, et les méthodes d'optimisation incluent l'ordre d'exécution unifié, augmentent les index et introduisent des systèmes de file d'attente.

La pagination MySQL est généralement mise en ?uvre en utilisant la limite et le décalage, mais ses performances sont médiocres sous un grand volume de données. 1. Limit contr?le le nombre de chaque page, le décalage contr?le la position de départ et la syntaxe est limitedoffsetm; 2. Les problèmes de performance sont causés par des enregistrements excessifs et la suppression des analyses de décalage, entra?nant une faible efficacité; 3. Les suggestions d'optimisation incluent l'utilisation de la pagination du curseur, de l'accélération d'index et du chargement paresseux; 4. Le curseur Paging localise le point de départ de la page suivante à travers la valeur unique du dernier enregistrement de la page précédente, en évitant le décalage, ce qui convient à l'opération "page suivante", et ne convient pas aux sauts aléatoires.
