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 :

Performances du partitionnement


Sujet :

Administration MySQL

  1. #1
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut Performances du partitionnement
    Bonjour,

    Je dois administrer plusieurs bases MySQL d'environ 200Go chacune, réparties équitablement dans une vingtaine de tables MyISAM partitionnées par tranche de quelques heures pour une profondeur d'environ 2 mois (appli externe, je ne peux pas y toucher)

    Chaque jour un process vient supprimer les partitions trop anciennes, et créer celles nécessaires pour la journée courante... Cette tâche prend presque une heure

    Sauriez-vous quels paramètres de MySQL pourraient optimiser cette opération ?
    (RAM disponibles pour MySQL, environ 32Go)


    par avance
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  2. #2
    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
    6 344
    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 344
    Points : 18 919
    Points
    18 919
    Par défaut
    Salut gorgonite.

    Citation Envoyé par gorgonite
    Chaque jour un process vient supprimer les partitions trop anciennes, et créer celles nécessaires pour la journée courante...
    Peux-tu nous dire comment le process fait pour supprimer les partitions anciennes. Et aussi comment les recréer.

    Citation Envoyé par gorgonite
    Cette tâche prend presque une heure
    Cela me parait extrêmement long. Je supprime physiquement la partition. Puis je la recrée à vide. Cela prend quelques instants.

    Je suppose, que tu ne fais pas que recréer à vide tes partitions. Il est probable que le process remplie aussi ces partitions et c'est cela qui prend une heure.
    Ton problème est purement applicatif, non ?

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

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Peux-tu nous dire comment le process fait pour supprimer les partitions anciennes. Et aussi comment les recréer.

    Le process connait la structure de la base, et chaque jour sait qu'il faut supprimer les partitions x,y,z
    Il fait l'unique commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE DROP PARTITION p_???????, ...
    De la même manière, il crée ensuite les nouvelles partitions via la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE ADD PARTITION (PARTITION p_?????? VALUES LESS THAN ***, ... )
    Citation Envoyé par Artemus24 Voir le message
    Cela me parait extrêmement long. Je supprime physiquement la partition. Puis je la recrée à vide. Cela prend quelques instants.

    Je suppose, que tu ne fais pas que recréer à vide tes partitions. Il est probable que le process remplie aussi ces partitions et c'est cela qui prend une heure.
    Ton problème est purement applicatif, non ?
    Non justement, cette phase ne fait que créer des partitions vides... je concède qu'on peut faire mieux qu'une boucle pour chaque partition

    Le remplissage est assuré par d'autres tâches, qui sont lancées automatiquement à la fin de celle-ci, bien plus tard justement


    EDIT :
    En revanche, il s'agit d'un partitionnement par range sur un cast d'un datetime en unix timestamp et non un simple entier directement
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    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
    6 344
    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 344
    Points : 18 919
    Points
    18 919
    Par défaut
    Salut gorgonite.

    Citation Envoyé par gorgonite
    Non justement, cette phase ne fait que créer des partitions vides...
    Je ne sais pas pourquoi, j'avais imaginé que tu procédais autrement. Donc cette phase est courte. C'est bien cela ?
    Je ne fais pas de 'truncate' sur les partitions car j'essaye toujours de récupérer l'espace inoccupé sur le disque dur.

    Citation Envoyé par gorgonite
    je concède qu'on peut faire mieux qu'une boucle pour chaque partition
    Je ne comprends pas bien, mais pour une base de données, tu crées combien de partitions ?

    Citation Envoyé par gorgonite
    Le remplissage est assuré par d'autres tâches, qui sont lancées automatiquement à la fin de celle-ci, bien plus tard justement
    Dans ton premier message, j'avais compris que la phase de suppression / création de la partition était trop longue.
    Mais alors qu'est-ce qui dure une heure ? Le remplissage ? Autre chose ?

    Si tu ne précises pas exactement la nature de cette lenteur, il me sera difficile de te conseiller.

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

  5. #5
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Donc cette phase est courte. C'est bien cela ?
    Je ne fais pas de 'truncate' sur les partitions car j'essaye toujours de récupérer l'espace inoccupé sur le disque dur.
    Non justement... le partitionnement en lui-même est déjà super lent

    En supprimant les partitions, cela supprime bien les fichiers correspondant sur le disque (conception MySQL), mais cet espace sera réutilisé par les nouvelles partitions (initialement vides...) une fois toutes les tâches quotidiennes terminées

    Citation Envoyé par Artemus24 Voir le message
    Je ne comprends pas bien, mais pour une base de données, tu crées combien de partitions ?
    20 tables, des tranches de 4 à 8 heures par table (je ne connais pas les paramètres par coeur...)
    donc au pire 6*20 = 120 partitions à créer chaque matin

    Citation Envoyé par Artemus24 Voir le message
    Dans ton premier message, j'avais compris que la phase de suppression / création de la partition était trop longue.
    Mais alors qu'est-ce qui dure une heure ? Le remplissage ? Autre chose ?
    comme annoncé, le partitionnement prend à lui seul une heure

    ensuite plusieurs gigaoctets de données en hexadécimal sont décodées et stockées... cela prend du temps, mais rien d'anormal (cela vient du design de l'appli purement séquentielle )
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  6. #6
    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
    6 344
    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 344
    Points : 18 919
    Points
    18 919
    Par défaut
    Salut gorgonite.

    J'ai procédé à quelques tests sur la création et la suppression des partitions dans mon environnement et cela s'est toujours avéré rapide.

    Ce qui me vient à l'esprit est ce paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    innodb_file_per_table = 1
    Ceci permet de créer un 'tablespace' pour chaque 'table' et non un 'table' qui sera contenu dans le 'tablespace system'.
    Ainsi je peux récupérer l'espace (le 'tablespace') lorsque je fais un 'drop partition', ce qui ne sera pas le cas si c'est un 'tablespace system'.

    De même, le contenu de la table et des index sont au même endroit, c'est-à-dire dans le 'tablespace'.
    Donc suppression ('truncate table') plus rapide de la table et des index.
    On peut exécuter 'OPTIMIZE TABLE' pour compacter l'espace de la table, c'est-à-dire récupérer l'espace inutilisé.

    On peut déplacer les 'tablespace' séparément et les mettre sur des disques différents.
    Au lieu d'une séquentialisation des lectures, elles peuvent se faire en parallèle sur des disques séparées, donc pas sur les mêmes contrôleurs de disque.

    J'utilise aussi ce paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    innodb_file_format = Barracuda
    Avec ce format, on peut compresser et obtenir un format de ligne dynamique. C'est très utile dans le cas des blob.

    C'est tout ce que je sais. Je ne sais pas très bien si cela aura un impact sur la performance. Le paramétrage des tables innodb est très complexe.

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

  7. #7
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    L'appli est uniquement en MyISAM et non en InnoDB.
    Quels paramètres s'appliqueraient ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  8. #8
    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
    6 344
    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 344
    Points : 18 919
    Points
    18 919
    Par défaut
    Salut Gorgonite.

    Désolé Gorgonite, je n'utilise pas MyIsam.

    Voici un lien qui pourrait-être utilie : https://dev.mysql.com/doc/refman/5.6...mitations.html

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

  9. #9
    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
    6 344
    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 344
    Points : 18 919
    Points
    18 919
    Par défaut
    Salut Gorgonite.

    Ce que je peux faire, c'est jeté un coup d’œil sur ton fichier "my.ini". Peux-tu communiquer son contenu, SVP ?

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

Discussions similaires

  1. Mauvaise performance sur table partitionnée
    Par Bilna dans le forum Oracle
    Réponses: 3
    Dernier message: 14/02/2011, 18h25
  2. [DB2 v8 z/OS] Performance d'un LOAD sur TS partitionné
    Par Peut-êtreUneRéponse dans le forum DB2
    Réponses: 15
    Dernier message: 23/02/2010, 21h46
  3. Problème de performance avec le partitionnement de table
    Par Grifos dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/05/2009, 01h34
  4. Performance insertion dans une table partitionnée
    Par regal dans le forum Administration
    Réponses: 6
    Dernier message: 10/04/2008, 19h06
  5. Partitionnement Hdd vs. performances ?
    Par kimz dans le forum Composants
    Réponses: 3
    Dernier message: 12/11/2007, 16h26

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