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 :

Recreate table


Sujet :

Administration MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2020
    Messages : 29
    Par défaut Recreate table
    Bonjour à tous,

    J'ai une base de données qui prend de plus en plus de place sur un vieux serveur.
    Je souhaiterais recréer les tables et pouvoir ainsi récupérer de l'espace.

    En test, en recopiant une table de 2M, j'obtiens une nouvelle de 64ko (datas comprises).

    Et j'aimerais donc faire la même chose sur des tables plus grosses, de l'ordre du Go.

    Cependant, comme il s'agit d'une machine de production, je dois la mettre en "maintenance".
    Voici donc comment je souhaite m'y prendre :
    - bloquer tout appel à cette base (arrêt des applications qui pointent sur la base) => lock tables ?
    - copier la table
    - supprimer l'original
    - rouvrir la base aux applications => unlock tables

    Est ce que cela vous semble correct ? Y voyez vous quelque chose à rajouter ?

    Merci pour vos conseils.

    Erwann

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Un OPTIMIZE TABLE devrait suffire
    La doc => https://mariadb.com/kb/en/optimize-table

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2020
    Messages : 29
    Par défaut Optimize
    Bonjour

    Justement, l'optimize ne fonctionne pas

    J'ai le message suivant :

    Table does not support optimize, doing recreate + analyze instead.

    Erwann

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Table does not support optimize, doing recreate + analyze instead.
    Alors si MariaDB fonctionne comme MySQL, ce message (trompeur) indique que la table a été recréée et analysée au lieu d'être optimisée.
    Bon, au final ça revient au même, c'est juste le procédé qui est différent.

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2020
    Messages : 29
    Par défaut Optimize
    OK. Mais comment récupérer de l'espace alors ?

    Parce que les tables font la même taille.
    Or si j'en fais une copie, la seconde est moins grosse. Je passe par exemple d'une table à 33M à 28M.
    Pas exceptionnel, mais en attendant une machine plus puissante, je cours après les mégas ...

    Chose curieuse car j'avais mis l'option innodb_per_fil pour avoir un ibdata de taille normal.. Il fait plus de 21G aujourd'hui ...

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 816
    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 : 6 816
    Par défaut
    Salut à tous.

    Citation Envoyé par erwann56
    Cependant, comme il s'agit d'une machine de production, je dois la mettre en "maintenance".
    Si ta base de données est en hors service pendant quelques heures est-ce que cela pose un grave problème ?
    Le mieux est de faire la maintenance à un moment de la journée, voir de la semaine où il y a le moins de monde qui accède à celle-ci, afin de pénaliser le moins de monde.

    Citation Envoyé par erwann56
    Est ce que cela vous semble correct ?
    L'intégrité de la base de données est un problème cruciale.
    Je pense qu'il vaut mieux arrêter totalement l'accès durant la maintenance.
    De faire un script par table, surtout si celle-ci est très volumineuse.
    Et de les lancer en parallèle afin de gagner du temps.

    Citation Envoyé par erwann56
    Y voyez vous quelque chose à rajouter ?
    Quelle version de MariaDB utilisez vous ?
    Est-ce que toutes vos tables utilisent le moteur InnoDB ?

    Citation Envoyé par erwann56
    Justement, l'optimize ne fonctionne pas
    L'important est le status de la table ! S'il est OK, tout va bien.

    Son équivalent est de :
    --> créer une nouvelle table identique à l'ancienne : "create table <new_table> like <old_table>".
    --> effectuer la recopie : insert into <new_table> select * from <old_table>".
    --> supprimer l'ancienne : "drop table <old_table>".
    --> renommer la nouvelle : "rename table <new_table> to <old_table>".

    Cette méthode à l'inconvenient de prendre beaucoup de temps surtout sur les très grosses tables.
    Le mieux est de déactiver tout ce qui doit l'être puis après les insert de les réactiver.
    L'autre problème est de disposer au moins du double de la volumérie sur vos diques.

    Si cela prend trop de temps à l'exéution de votre insert, vous risquez d'obtenir un "Lost connection to MySQL server during query".

    Cordialement.
    Artemus24.
    @+

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Réparation table/entête endommagée
    Par tbesrour dans le forum Paradox
    Réponses: 15
    Dernier message: 27/11/2007, 10h42
  3. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 13h55
  4. Newbie......compilateur et table de caractères
    Par Cyberf dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 21/08/2002, 14h29
  5. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31

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