|
|||||||
| Optimisations Forum de conseils pour les optimisations des performances SGBD |
|
|
Publicité ' | |||||||||||||||||||||||||
|
|
|
Outils de la discussion |
|
|
#1 |
|
Membre émérite
![]() ![]() Inscription : juillet 2006 Messages : 1 331 ![]() |
Bonjour.
J'aimerais avoir votre avis et connaître vos habitudes pour un cas pratique : J'ai besoin de gérer des messages à envoyer à des utilisateurs. Chaque message est ordonné du plus ancien au plus récent et ne concerne/n'intéresse qu'un seul et unique utilisateur. Il y a deux scénarios à comparer : 1) Une seule table (userid, messageid, ...) pour tous les utilisateurs 2) Une table (messageid, ...) par utilisateur (table_user001, table_user002, ...) Sachant que les messages seront des données très mouvementés (par insertion principalement) et par soucis de performance, laquelle de ces solutions préfériez-vous et pourquoi ? Merci pour votre avis. |
|
|
01
|
|
|
#2 |
|
Membre émérite
![]() ![]() Inscription : juillet 2006 Messages : 1 331 ![]() |
Moi, je pense qu'une table par utilisateur est préférable ainsi, le SGBD aura très peu à faire pour maintenir les indexes (ces derniers ne portant dès lors plus que sur un identifiant de message exclusivement croissant).
Je ne pense pas que d'avoir beaucoup de tables ainsi que beaucoup de création de tables crée une forte charge pour un SGBD. |
|
|
00
|
|
|
#3 |
|
Membre chevronné
![]() Administrateur de bases de données Inscription : août 2009 Messages : 407 ![]() |
De quels "soucis de performances" parlez-vous ?
Vous avez estimé la taille de la table et des indexs ? La recherche par exemple, de tous les messages d'un utilisateur ne serait-pas performante ? J'en doute très fortement. |
|
|
10
|
|
|
#4 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 128 ![]() |
Sans aucune hesitation, réponse n°1 !
Une seule table. Pour plusieures raisons : 1) C'est le modele le plus propre 2) C'est le plus maintenable 3) C'est le plus optimisé Il n'y a pas de relation entre architecture et données, en effet ajouter un utilisateur ne demandera pas l'intervention du DBA (en esperant qu'il ne soit pas en vacances) pour créer une (ou plusieurs) table(s) pour le nouvel arrivant. Vous n'aurez pas a vous trimbaler des requetes dynamiques en fonction de l'utilisateur. En ce qui concerne les performances, les SGBDR ont été developpés et optimisés pour ce genre de choses. Apres il existe encore des procédés d'optimisation pour les indexes (partionnement entre autre), et surtout une bonne écriture de vos requetes devrait ammener a des performances optimales (ou pas tres loin).
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
10
|
|
|
#5 |
|
Membre émérite
![]() ![]() Inscription : juillet 2006 Messages : 1 331 ![]() |
Si on a une seule table et une insertion tous les dixièmes de secondes, ça fait quand même beaucoup de recalcule sur la totalité de l'indexe.
Je trouve ça un peu dommage. |
|
|
00
|
|
|
#6 |
![]() ![]() |
J'aime bien utiliser ce genre de structure :http://fr.wikipedia.org/wiki/Objet_composite
Ainsi, on peut archiver les messages et naviguer entre eux! A voir mais je pense qu'une seul table est le moyen le plus propre!
__________________
![]()
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 128 ![]() |
cela ne sera que deplacer le probleme, car si vos insertions n'ont lieu que pour 1 seul utilisateur, cela revient a la meme chose !
La solution de partitionnement d'indexes peut etre une solution dans ce cas.
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#8 |
|
Membre émérite
![]() olivier ThiébautChef de projet/Architecte Inscription : mai 2004 Messages : 705 ![]() |
Bonjour,
Il faut rentrer plusieurs critères dans cette réflexion : - Quel SGBD ? sur quelle machine ? - Type de réseau ? proxy, bande passante ? - criticité ? - redondance ? Si on s'en tient à une formalisation simple Un utilisateur (nom prénom ...) reçoit/envoie des messages Je vois trois tables users, messages, type de messages à l'extrème. Bref dans la table messages, il y aura un test sur la clef étrangère de l'utilisateur et encore .... , je ne suis pas sûr que cela soit risqué. On reçoit en moyenne, 100 message/jour on en envoie 20 en étant optimiste sur 200 utilisateurs sur 2 actions création (insert), delete soit (100 + 20)*200 * 2 non ? 48 000 requêtes/jours, c'est pas franchement la mort ... C'est une question de dimensionnement et cela peut/doit être projeté. Le modèle peut être imparfait, mais cela permet de se poser les bonnes questions. Souvent on modélise (académique ), on teste ( vrai test ) on optimise, identification des goulots d'étranglements (dénormalisation). C'est comme dire avec le dernier GSXR full power à Carol, je vous mets, faux. Le circuits est sinueux et technique, donc un super motard avec un bon pilote te met out . J'adore ;=) Olivier
__________________
Architecte déstructurant, be cool, be free J2EE - PHP - Free OS |
|
|
10
|
|
|
#9 |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 141 ![]() |
J'appellerais ça de la suroptimisation. Les données de même structures se trouvent dans une et une seule table. A la limite, on pourrait envisager une vue union de deux tables de même structure et une recopie de l'une dans l'autre pour optimiser le calcul d'index, sinon cette approche est implémentée de façon transparente sur la version Enterprise de SQL server.
|
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 630 ![]() |
Citation:
Citation:
Dans le contexte des très grosses applications de gestion avec un nombre de tables qui peut atteindre les 2000 (banque, assurance, caisses de retraites, etc.) on modélise toujours, sinon on est mort ; ne pas modéliser relève de la faute professionnelle et, croyez-moi, on est loin des cercles académiques, ce sont les sous de l’entreprise qui sont en jeu. Les goulots d’étranglement n’ont rien à voir avec la normalisation, et en tant que DBA depuis les années soixante-dix, j’en sais quelque chose. Vous avez raison concernant les tests, et pour cela on met en œuvre des prototypes de performance, lesquels sont révélateurs de problèmes d’I/O bound qui, eux, font patiner le système, et correspondent en général aux goulots d’étranglement auxquels vous faites allusion.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
||
|
|
00
|
|
|
#11 | |
|
Membre émérite
![]() olivier ThiébautChef de projet/Architecte Inscription : mai 2004 Messages : 705 ![]() |
Bonjour,
Effectivement, vous avez raison, j'ai pris des raccourcis. Pour ce qui est de la modélisation, je voulais simplement dire que l'on doit s'appuyer sur des normes ou des les langages communs type UML. Comme je suis sur la partie applicative, nous devons souvent prendre en compte cette couche. Car même avec un SGBD de qualité et un modèle bien étudié, il arrive souvent que les personnes qui exploite cette partie fassent n'importe quoi ( boucle infinie, requête de sous requête imbriquées dans un sous select, etc ... ) LA partie I/O fait partie de ces pb sous les grosses applis. Citation:
Olivier
__________________
Architecte déstructurant, be cool, be free J2EE - PHP - Free OS |
|
|
|
00
|
|
|
#12 | |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 141 ![]() |
Citation:
2) Ensuite il faut calibrer la base de données par rapport aux besoins. Sinon, c'est toujours intéressant de voir les approches de l'un et de l'autre. PS: Si table = 10 000 000 d'enregistrements alors rien à calculer, faut-il le comprendre de cette manière. |
|
|
|
00
|
|
|
#13 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 630 ![]() |
Bonjour,
Citation:
Mais dans une organisation des services digne de ce nom, ce sont les DBA qui auditent les requêtes et les programmes avant leur mise en production, ils diagnostiquent les problèmes de performance et indiquent aux équipes de développement les aménagements à apporter aux programmes pour résoudre ces problèmes. Ce sont deux conditions nécessaires mais non suffisantes. A quoi sert un modèle exemplaire, conforme aux canons de la modélisation si le recueil des règles de gestion des données se révèle incomplet alors que le projet est bien avancé dans sa réalisation ? La non complétude des règles peut conduire à l’échec du projet, et cela peut être dramatique s’il est sensible, j’ai pu le constater. Quant à la normalisation, si j’ai pris la peine d’écrire plus de 150 pages sur le sujet, c’est bien parce qu’en tant que baroudeur, j’ai très tôt compris qu’on avait là une des clés du succès, nécessaire, même si bien sûr elle n'est pas non plus la panacée à elle seule.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|
|
|
00
|
|
|
#14 |
|
Membre émérite
![]() olivier ThiébautChef de projet/Architecte Inscription : mai 2004 Messages : 705 ![]() |
Bonjour,
Respect Monsieur fsmrel, j'avais commencé la lecture de votre article sur la normalisation, j'avoue j'ai pas tout compris, je ne suis expert SGBD. Mais effectivement je m'appuie sur les compétences des dits maîtres dans le domaine. d'accord pour l'expertise des professionelles admin SGBD, mais de plus en plus les SSII utilisent des frameworks avec une couche ORM ( pas de SQL natif) et là cela se complique... Bref, tout cela pour dire que le sujet est complexe mais que les solutions existent, il faut cependant penser qu'on a pas tous un expert SGBD, Réseau et ou applicatif du framework X sous la main. Et cela, c'est du vécu ... Olivier
__________________
Architecte déstructurant, be cool, be free J2EE - PHP - Free OS |
|
|
00
|
|
|
#15 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 630 ![]() |
Citation:
Mais encore ? Citation:
Cette réponse va-t-elle dans le sens de ce que vous attendiez ?
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
||
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 141 ![]() |
A chaque insertion d'un enregistrement dans la table, une valeur va être insérée dans l'index, et plus l'index est grand plus il faudra de temps pour mettre à jour l'index. En bref, il y a une stratégie à adopter, j'ai la réponse, elle va dans le sens de ma question. Si l'index est un arbre, il doit rester équilibré, il faut donc le régénérer.
Par calibrer, j'entends dimensionner la base de données, version SGBDR/matériel. |
|
|
00
|
|
|
#17 | |
|
Membre chevronné
![]() Administrateur de bases de données Inscription : août 2009 Messages : 407 ![]() |
Citation:
Cela dépend de beaucoup de facteurs; il faut prendre en compte le type de l'index (cluster ou non), sa clé, le taux de fragmentation de celui-ci, et il me manque peut-être d'autres éléments. Quelques exemples : Si la clé de l'index est un entier auto-incrémenté, peu importe la taille de l'index, le SGBD (celui sur lequel je travail est SQL Server) ira insérer l'enregistrement dans la dernière page de l'index, ou au pire il en créera une nouvelle. Si vous avez spécifié un seuil de remplissage (FILLFACTOR), peu importe la taille de l'index; s'il reste de la place dans la page d'index visée, le SGBD n'aura qu'une simple insertion d'enregistrement à effectuer (pas de split). |
|
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 141 ![]() |
Il y a bien un index qui est utilisé pour le champ utilisateur, il faut constamment le mettre à jour.
Finalement, il faut comprendre que chaque SGBDR possède un ensemble de stratégies pour tout simplement gérer l'index, notamment en faisant un paramétrage sur DB2. |
|
|
00
|
|
|
#19 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 630 ![]() |
Bonsoir,
Citation:
Si la clé à insérer dans l’index n’y existe pas déjà, DB2 insérera effectivement dans une page feuille (le plus bas niveau de l’index) cette valeur + un pointeur (appelé RID) vers la page physique hébergeant la table. Si cette clé existe déjà dans l’index, DB2 se contentera d’ajouter le pointeur. Supposons qu’il s’agisse d’insérer (INSERT) une nouvelle clé Ki. DB2 cherchera à insérer cette clé physiquement entre les clés Ki-1 et Ki+1. S’il y a de la place (PCTFREE jouant son rôle), l’opération est terminée, car les niveaux supérieurs de l’index ne sont pas impactés. S’il n’y a plus assez de place, DB2 mettra à profit le FREEPAGE et consommera une page feuille supplémentaire, physiquement contiguë à la page cible, avec mise à jour du niveau supérieur de l’index. Si le FREEPAGE a été consommé, DB2 utilisera une page ailleurs. Mais dans tout cela, que l’index contienne un million ou cent millions de clés, la durée de l'ajout d'une clé dans l'index est la même à un pouième près, ce sont les paramètres PCTFREE et FREEPAGE qui sont déterminants ès matière. Quant à savoir si une réorganisation de l’index s’impose, je demande un rafraichissement des statistiques du catalogue relationnel pour l’index en cause et décide en conséquence. Citation:
J’espère que, sans être exhaustif, ce qui précède vous apporte quelques précisions.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
||
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 141 ![]() |
Oui je comprends mieux, merci fsmrel.
La réorganisation consiste à faire quoi au juste, si l'index est équilibré ? |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com