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

Optimisations SGBD Discussion :

Différence entre partitionnement et index


Sujet :

Optimisations SGBD

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 19
    Points
    19
    Par défaut Différence entre partitionnement et index
    Bonjour,

    J'ai des problèmes de perfs
    J'ai une base de données avec des tables partitionnées selon la date.
    Je me demandais si rajouter un index sur cette date apporterait quelque chose, ou si cela revient au même, le partitionnement et l'indexation?

    Merci d'avance de vos réponses.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Le partitionnement va séparer physiquement votre table en plusieurs sous-table.

    Vous avez tout à fait le droit d'indexer la colonne de partition, faites bien un index local.

    Par exemple, si vous partitionnez par année et que vous faites une requête sur un jour précis, vous aurez un très bon gain de performance.

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup!

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    En fait j'ai encore une petite question à laquelle je ne trouve pas la réponse dans les tuto...

    Quelle est la meilleure façon de créer un index? J'ai vu que certains créaient systématiquement un index sur la clef primaire. Est il plus intelligent de créer un index sur les colonnes les plus consultées lors des recherches (par exemple, j'ai 2000 registre par jour, pour 10 paramétrages différents (200 chaque) chacun avec un identifiant différent. Quel est l'index le plus pertinant, date + idf, date+idf+param, date+param? sachant que lors d'une requête qui me pose problème je le recherche par date, idf et param.

    J'ai un peu du mal à cerner comment bien se servir des indexs. Si quelqu'un a une bonne page/ un bon tuto la dessus je suis prenneuse!

    Merci d'avance

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par audklie2 Voir le message
    J'ai vu que certains créaient systématiquement un index sur la clef primaire.
    Vous n'avez pas le choix, la clef primaire se traduit toujours par un index unique combiné à une clef non nulle.

    Citation Envoyé par audklie2 Voir le message
    Est il plus intelligent de créer un index sur les colonnes les plus consultées lors des recherches
    Oui, c'est l'idée. Plus un index est discriminant et plus votre requête sera rapide. Pour votre exemple, faites un index sur le triplet (date, idf, param).

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    J'y vois plus clair, merci beaucoup!

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Un peu de lecture chez SQLPro :
    Quoi indexer ?
    Maintenance des index
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Je vais regarder ça, merci!

    ça me permettra peut être de passer de 1h30 de temps de traitement aux quelques minutes demandées par le client (je suis déjà passé d'une sortie en time out au bout de 10h à 1h30, je progresse )

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par audklie2 Voir le message
    ça me permettra peut être de passer de 1h30 de temps de traitement aux quelques minutes demandées par le client (je suis déjà passé d'une sortie en time out au bout de 10h à 1h30, je progresse )
    2000 registre par jour, pour 10 paramétrages différents (200 chaque)
    Quelques minutes me semblerait encore énorme ! A moins que je ne représente pas bien le volume total de données à examiner ?
    Combien de lignes, de colonnes et de tables concernées par la requête ?

    Un petit tour dans le forum Langage SQL ou celui consacré à votre SGBD pour y proposer la structure de vos tables et la requête effectuée serait peut-être utile !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Oui je sais c'est énorme, mais je compte bien en venir à bout
    J'appelle 2 tables une de 25000 registres ( et bien plus en production bien sur!) un de 50000, et quelques petites tables qui ne contiennent pas grand chose.
    Vous croyez que je peux descendre à moins d'une minute en arrangeant mes requêtes et en ajoutant les index appropriés? Je ne visais pas aussi peu mais je suis novice en BD

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Quand tu dis "25000 registres", tu veux dire 25 000 lignes dans la table ?

    Ce n'est vraiment pas beaucoup pour un SGBD. J'ai travaillé avec des tables e plusieurs dizaines de millions de lignes.

    Soit la structure de ta BDD est à revoir, soit tes tables sont très mal indexées, soit tes requêtes sont mal foutues !

    On peut avoir le schéma de la BDD ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Pour le schéma, je pense que mon client ne serait pas d'accord
    Mais globalement elle est mal indexée, et mal partitionnée, ce qui donne des temps de réponse énormissimes.
    C'est pour ça que je suis en train de -tenter de - remettre tout ça sur pied.
    (Je m'éclate, j'apprends plein de trucs!)
    J'ai appris hier qu'on pouvait partitionner les index! Je suis en train d'en lire plus là dessus
    Mais globalement les seuls indexs qu'il y avait avant que j'y touche étaient ceux sur les PK. Pas suffisant pour l'utilisation qu'on en fait.
    Merci beaucoup Je pense que je reviendrai avec plus de questions!
    Bonne journée

  13. #13
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    J'ai appris hier qu'on pouvait partitionner les index! Je suis en train d'en lire plus là dessus
    Attention cette technique n'est réellement utile que lorsque le volume de données ramené ne peut être traité correctement en mémoire (ce qui est très peu probable en OLTP si l'index est bien posé et si la requête est bien construite avec les restrictions nécessaires) ou lorsque la maintenance des index devient très lourde.

    ++

  14. #14
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Comme le dit Mikedavem, le partitionnement n'a de réel intérêt que lorsque plusieurs conditions sont réunies :
    1) que le volume intrinsèque de la table dépasse
    - a) la RAM pour sa partie active (fenêtre de données)
    - b) la taille des disques physique pour sa totalité
    2) que la gestion des espaces de stockage permettent de faire de la volumétrie prévisionnelle (tailler des espaces préalable de stockage)
    3) que l'on puisse dissocier le partitionnement des données et des index

    En sus, il faut considérer que les plans de requêtes seront plus complexes, donc cela nécessite plus de puissance de calcul (plus de CPU en particulier).

    Enfin, ce n'est pas parce que vous avez partitionner votre table que toutes les requêtes y gagneront. En effet, pour que chacune des requêtes bénéficient du partitionnement il faut :
    1) que le critère de partitionnement soit présent dans toutes les requêtes (INSERT, UPDATE, DELETE, SELECT) en tant que prédicat
    2) que les prédicats de filtrage ou de jointure soient "sargeable"

    Autrement dit, le partitionnement n'est pas du tout la panacée que l'on croit et en production, rares sont les cas ou il est réellement efficace.
    En tout cas en dessous de 30 Go de volume de données de la table et avec un serveur doté de moins de 4 CPU physique il est strictement inutile d'utiliser une telle technique.
    Il y a bien d'autres techniques d'optimisation, nettement plus efficaces. Pour un panagérique complet, lisez les articles que j'ai écrit à ce sujet : http://sqlpro.developpez.com/optimisation/
    (même si c'est spécifique à SQL Server, les concepts d'optimisation des SGBDR sont identiques pour tous les SGBDR à l'exception de 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/ * * * * *

  15. #15
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    @audklie2

    Une bonne connaissance de l'instruction EXPLAIN PLAN (SHOW PLAN et compagnie) est indispensable pour maîtriser les problèmes de performance.

    Quand vous saurez tout le Nested Loop, le Merge scan, le Table scan et autres techniques utilisées par les SGBD, vous verrez que, comme dit CinePhil, vous saurez régler vos requêtes pour qu'elles durent moins d'une seconde.

    Bonne lecture.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

Discussions similaires

  1. La différence entre une clé étrangère et un index
    Par youcef_allaoua dans le forum ALM
    Réponses: 1
    Dernier message: 19/08/2014, 15h05
  2. Différence entre un index Unique et un index primary
    Par hukiro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/02/2013, 15h06
  3. Réponses: 2
    Dernier message: 25/11/2010, 11h52
  4. La différence entre un Index et un fichier LF ?
    Par JauB dans le forum AS/400
    Réponses: 12
    Dernier message: 04/02/2010, 15h19

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