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

Requêtes MySQL Discussion :

Table partitionnée : éviter le full scan à l'INSERT / ajout ou suppression de partition


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Table partitionnée : éviter le full scan à l'INSERT / ajout ou suppression de partition
    Bonjour,

    Nous disposons d'une base de données SQL qui est partitionnée pour chaque client selon un ID (ce n'est pas une partition par RANGE).

    Mon problème est double : lorsqu'on crée ou supprime une partition, avec les requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE "table_name" ADD PARTITION (PARTITION "client_id_value" VALUES IN ("client_id_value")); 
     
    ALTER TABLE "table_name" DROP PARTITION "client_id_value";
    SQL réalise un full scan de la table même s'il n'y a encore aucune ligne qui corresponde à la nouvelle partition. C'est gênant dans la mesure où nos tests fitnesse commencent par créer un client test (et ajoutent une nouvelle partition), et finissent en supprimant le client (et la partition), donc les changements dans le partitionnement sont relativement fréquents.

    Le deuxième problème est plus gênant, c'est que le full scan est aussi effectué lors d'un INSERT. Le code est dans une procédure stockée de la forme générale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    START TRANSACTION;
    INSERT INTO "table_name" (column_names) VALUES (values) ON DUPLICATE KEY UPDATE (updated_values)
    COMMIT;
    Selon la documentation, ajouter l'argument PARTITION dans un INSERT ne fait que vérifier que la ligne à insérer appartient bien à la partition.

    Avez vous des pistes ?
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Les limitations du partitionnement selon MySQL sont légions et sont très loin d'égaler ce que font nativement Oracle ou SQL Server...
    Quelques exemples :
    https://stackoverflow.com/questions/...instead-of-one
    https://stackoverflow.com/questions/...ull-scan-table
    La doc :
    https://dev.mysql.com/doc/internals/...g-related.html

    Un outil gratuit ayant a peu près 100 années/homme en R&D est loin d'être comparable à un outil comme SQL Server qui compte aujourd'hui plus de 2500 années/homme en R&D... Ce qui en explique le coût !

    Pensez simplement que le parallélisme des requêtes n'existe toujours pas dans MySQL....

    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/ * * * * *

  3. #3
    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 381
    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 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut BubbleD.

    Citation Envoyé par BubbleD
    SQL réalise un full scan de la table
    SQL est un langage de requête. MySql est le nom de votre SGBDR. Ne mélangez pas tout !
    Qu'est-ce que vous entendez pas un "full scan" ?

    Citation Envoyé par BubbleD
    Nous disposons d'une base de données SQL qui est partitionnée pour chaque client selon un ID (ce n'est pas une partition par RANGE).
    Vous devriez nous donner le descriptif de vos tables partitionnées afin que nous sachions le type de partition que vous utilisez.
    Sans plus de précision de votre part, nous ne pouvons pas répondre avec exactitude à votre problématique.

    De ce que je constate, vous ne pouvez pas insérer une ligne dans une table partitionnée, si cette ligne ne possède pas le critère utilisée, ici la colonne "id".
    Donc la lenteur de l'insertion est tout à fait normale car vous n'utilisez pas correctement le partitionnement de votre table.

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

Discussions similaires

  1. [2012] Full scan d'index : à éviter absolument ?
    Par Batou69 dans le forum Administration
    Réponses: 8
    Dernier message: 20/08/2015, 16h16
  2. Réponses: 18
    Dernier message: 10/07/2015, 14h24
  3. Comment éviter un FULL SCAN au niveau d'une sous requete
    Par ora_home dans le forum Administration
    Réponses: 1
    Dernier message: 07/09/2014, 18h19
  4. insertion en parallèle dans une table partitionnée
    Par ncoutant dans le forum Oracle
    Réponses: 4
    Dernier message: 10/09/2009, 15h33
  5. Performance insertion dans une table partitionnée
    Par regal dans le forum Administration
    Réponses: 6
    Dernier message: 10/04/2008, 18h06

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