IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration MySQL Discussion :

Question pour éviter copy_table_tmp


Sujet :

Administration MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    décembre 2008
    Messages
    724
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2008
    Messages : 724
    Points : 257
    Points
    257
    Par défaut Question pour éviter copy_table_tmp
    Bonjour,

    Pour éviter le bloquage d'une table pendant une opération d'ALTER TABLE ...
    J'ai pensé à utiliser l'option : ALGORITHM=INPLACE, LOCK=NONE
    D'après ma lecture, cette option permet de ne pas "locker" la table par contre je me pose la question sur les risques
    comme perte de données ou autres ...
    un autre point, je m attendais à ce que MySQL utilise son "tempdir" mais non ce n'est pas le cas ...

    Merci.

    A+

  2. #2
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    juillet 2021
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : juillet 2021
    Messages : 176
    Points : 238
    Points
    238
    Par défaut
    tu peux développer un peu plus, pourquoi faire un ALTER TABLE ? la structure de table ne peut pas être correct dès le début?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    décembre 2008
    Messages
    724
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2008
    Messages : 724
    Points : 257
    Points
    257
    Par défaut
    Bonjour licardentaistor,

    Suite à une évolution applicative/éditeur, une mise à jour impose un drop colonnes et add colonnes avec création de nouveaux index.

    Je cherche donc un moyen pour réduire au max la durée de l'indisponibilité de la base actuellement c'est plus d'une demi-journée ...

    Merci.

    A+

  4. #4
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    juillet 2021
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : juillet 2021
    Messages : 176
    Points : 238
    Points
    238
    Par défaut
    a priori vu ta version pas de soucis: https://dev.mysql.com/doc/refman/5.6...perations.html

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    5 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 5 948
    Points : 17 272
    Points
    17 272
    Par défaut
    Salut à tous.

    Citation Envoyé par dari68
    Pour éviter le blocage d'une table pendant une opération d'ALTER TABLE ...
    Mauvaise idée !!! Et si ta bidouille se passe mal, tu fais quoi ?

    Citation Envoyé par dari68
    Je cherche donc un moyen pour réduire au max la durée de l'indisponibilité de la base actuellement c'est plus d'une demi-journée ...
    En premier lieu, on ne bidouille pas dans une base de données qui est en production.
    Je suis d'accord que rendre une base de données indisponible durant une demi-journée est insupportable.

    Le critère est que ta bidouille doit prendre le moins de temps, disons moins de cinq minutes.
    Au delà de ce temps, c'est pas bon, car comme dit l'adage, le temps c'est de l'argent.
    Comment fait-on ? Deux cas :

    1) tu vas créer un script mysql qui va effectuer ta bidouille, en admettant que cela soit simple à faire.

    Tu arrêtes la base de données en production.
    Tu lances ton script de bidouille, en admettant que tu ne vas pas rencontrer des problèmes non prévus.
    Puis tu redémarres ta base de données.
    C'est une manipulation qui aura été testé (pas en production) avant de le faire car c'est très dangereux.

    2) Par duplication, tu vas créer une nouvelle base de données.
    J'espère que tu as installé le mode de réplication.
    Tu vas devoir créer un point de sauvegarde.
    Disons que ce point se fait, le matin à 10H00.

    Durant ta journée, et tu prends ton temps, tu fais tes bidouilles sur ta base dupliquée.

    Quand tu es prêt pour basculer, tu procèdes :
    --> arrêt de la base de données en production.
    --> tu bascules en production, celle sur laquelle tu viens de bidouiller.
    --> tu recopies par réplication, tout ce qui a été fait depuis 10:00 du matin.
    --> s'il y a encore de la bidouille à faire sur cette partie répliquer, tu dois le faire au travers d'un script mysql.
    --> puis tu redémarres ta base de données.

    3) ce n'est plus une bidouille, c'est une migration de données et de traitements.
    Il faut le faire à des heures où tu impacteras le moins possible tes utilisateurs, soit la nuit, ou soit le weekend.

    C'est ainsi que l'on travaille, en automatisant les bidouilles, et en les testant aupréalable avant de le faire en production.

    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    décembre 2008
    Messages
    724
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2008
    Messages : 724
    Points : 257
    Points
    257
    Par défaut
    Merci à vous 2 de vos retour,

    Je cherchais un équivalent à l'option "ONLINE" d'Oracle et SQL Server qui permet de créer un index par exemple sans bloquer les accès à la table ...

    A+

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    5 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 5 948
    Points : 17 272
    Points
    17 272
    Par défaut
    Salut à tous.

    Citation Envoyé par dari68
    Suite à une évolution applicative/éditeur, une mise à jour impose un drop colonnes et add colonnes avec création de nouveaux index.
    Cela ne prend pas une demi-journée pour faire cela.
    Créer un index se fait en désactivant les contrôles puis en les rétablissant après :
    Code mysql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET UNIQUE_CHECKS=0;
    ALTER TABLE `nom_de_la_table` DISABLE KEYS;
    Puis après avoir créé vos index, vous faites :
    Code mysql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE `nom_de_la_table` order by id;
    ALTER TABLE `nom_de_la_table` ENABLE KEYS;
    SET UNIQUE_CHECKS=1;
    Ce sont les contrôles qui prennent du temps, pas la création en elle-même.
    Maintenant, j'espère que vous n'allez pas créer un "unique index" sur une colonne qui contient des doublons.

    Citation Envoyé par dari68
    Pour éviter le blocage d'une table pendant une opération d'ALTER TABLE ...
    J'ai pensé à utiliser l'option : ALGORITHM=INPLACE, LOCK=NONE
    Vous n'aurez pas de blockage mais carrément un plantage si l'un de vos traitements vient à interroger la table qui ne contient plus la colonne que vous venez de supprimer.
    Cette astuce fonctionne que si vous ne modifiez pas la structure de votre table.

    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    21 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 21 421
    Points : 51 414
    Points
    51 414
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dari68 Voir le message
    Merci à vous 2 de vos retour,

    Je cherchais un équivalent à l'option "ONLINE" d'Oracle et SQL Server qui permet de créer un index par exemple sans bloquer les accès à la table ...

    A+
    Tu penses sérieusement qu'un outil gratuit hyper bugué est capable de faire ce que fais Oracle ou SQL Server ???*

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    décembre 2008
    Messages
    724
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2008
    Messages : 724
    Points : 257
    Points
    257
    Par défaut
    Hello,

    Artemus24, Merci de ces précieuses infos

    J'ai fait un tests pour la création des UNIQUE INDEX avec la désactivation de la containte unicité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mysql> SET UNIQUE_CHECKS=0;
    Query OK, 0 rows affected (0.00 sec)
    CREATE UNIQUE INDEX .....
    CREATE UNIQUE INDEX .....
    CREATE UNIQUE INDEX .....
    mysql> ALTER TABLE STSTAK  DISABLE KEYS;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    Je ne comprends pas , les temps d'exécutions sont multipliés par 2 !!!

    et pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE xxxxx ,ALGORITHM=INPLACE, LOCK=NONE
    J'ai lancé une série d'insert en // de ALter table add column ...et la table et la table reste verouillée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Waiting for table metadata lock
    @SQLPro, je découvre MySQL mais SQL Server commence à me manquer

    A+

Discussions similaires

  1. [XL-2007] Question simple pour éviter les if
    Par Thebeginner dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/10/2011, 10h34
  2. Réponses: 3
    Dernier message: 07/07/2008, 11h46
  3. [QUESTION] Langages à éviter ?
    Par Shadowritter dans le forum Langages de programmation
    Réponses: 28
    Dernier message: 12/01/2005, 10h34
  4. Petite question pour Backup
    Par chicken92000 dans le forum Administration
    Réponses: 2
    Dernier message: 16/09/2004, 16h10
  5. [MIB] Questions pour construire une mib
    Par fadoua dans le forum Développement
    Réponses: 4
    Dernier message: 11/03/2004, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo