81 votes

SQL Server : le nombre maximum de lignes dans la table

Je développe un logiciel qui stocke beaucoup de données dans une de ses tables de base de données (SQL Server version 8, 9 ou 10). Disons qu'environ 100 000 enregistrements sont insérés dans cette table par jour. Cela représente environ 36 millions d'enregistrements par an. De peur de perdre en performance, j'ai décidé de créer une nouvelle table chaque jour (une table dont le nom contient la date du jour) pour réduire le nombre d'enregistrements par table.

Pouvez-vous me dire si c'était une bonne idée ? Y a-t-il une limite d'enregistrement pour les tables du serveur SQL ? Ou savez-vous combien d'enregistrements (plus ou moins) peuvent être stockés dans une table avant que les performances ne diminuent de manière significative ?

36 votes

"Les programmeurs perdent énormément de temps à penser ou à s'inquiéter de la vitesse des parties non critiques de leurs programmes, et ces tentatives d'efficacité ont en fait un impact négatif important lorsque le débogage et la maintenance sont pris en compte. Nous devrions oublier les petits gains d'efficacité, disons environ 97% du temps : l'optimisation prématurée est la racine de tous les maux. Pourtant, nous ne devrions pas laisser passer nos chances dans ces 3% critiques". Knuth 1974

1 votes

Mots vrais, mauvais endroit. Un indicateur pour savoir si une partie d'un programme est "critique" ou non, est que son exécution peut influencer de manière significative les performances de mon application. Donc, même s'il est vrai que les développeurs s'inquiètent des mauvaises choses la plupart du temps (je ne sais pas), celle-ci n'est définitivement pas une de ces mauvaises choses.

95voto

Malak Gerges Points 471

Voici quelques exemples Spécifications de capacité maximale pour SQL Server 2008 R2

  • Taille de la base de données : 524,272 téraoctets
  • Bases de données par instance de SQL Server : 32,767
  • Groupes de fichiers par base de données : 32,767
  • Fichiers par base de données : 32,767
  • Taille du fichier (données) : 16 téraoctets
  • Taille du fichier (journal) : 2 téraoctets
  • Rangs par table : Limité par le stockage disponible
  • Tables par base de données : Limité par le nombre d'objets dans une base de données

23 votes

Je pense que si vous avez plus de 9 223 372 036 854 775 807 lignes, vous rencontrerez des problèmes (la taille maximale d'un fichier de type bigint )

12 votes

Avez-vous déjà calculé le nombre d'années qu'il faudrait pour atteindre ce nombre de lignes à raison de 100 000 lignes/jour comme le mentionne le PO ?

77 votes

Je mets ça pour les paresseux : 252 695 124 ans.

37voto

Rashack Points 3344

Il est difficile de donner une réponse générique à cette question. Cela dépend vraiment d'un certain nombre de facteurs :

  • quelle est la taille de votre rangée
  • le type de données que vous stockez (chaînes de caractères, blobs, nombres)
  • que faites-vous de vos données (gardez-les simplement comme archives, interrogez-les régulièrement) ?
  • Avez-vous des index sur votre table - combien ?
  • Quelles sont les spécifications de votre serveur ?

etc.

Comme il a été répondu ailleurs ici, 100 000 par jour et donc par table, c'est exagéré - je suggérerais une fréquence mensuelle ou hebdomadaire, voire trimestrielle. Plus vous avez de tables, plus la maintenance et les requêtes deviennent un cauchemar.

13 votes

J'aimerais renforcer l'idée d'une maintenance plus importante et d'un cauchemar en matière de requêtes. D'après mon expérience personnelle, j'éviterais comme la peste la division en tables.

20voto

Sascha Points 6482

Je ne connais pas de limite de rangs, mais je connais des tables comportant plus de 170 millions de rangs. Vous pouvez accélérer le processus en utilisant des tables partitionnées (2005+) ou des vues qui connectent plusieurs tables.

20voto

paxdiablo Points 341644

Je ne connais pas spécifiquement MSSQL, mais 36 millions de lignes, ce n'est pas énorme pour une base de données d'entreprise. Ayant travaillé avec des bases de données de gros ordinateurs, 100 000 lignes me semblent être une table de configuration :-).

Bien que je ne sois pas un grand fan de un peu de des logiciels de Microsoft, ce n'est pas d'Access dont nous parlons ici : Je suppose qu'ils peuvent gérer des tailles de bases de données assez importantes avec leur SGBD d'entreprise.

Je soupçonne que les jours étaient une résolution trop fine pour la diviser, si tant est qu'elle ait besoin d'être divisée.

6voto

Chris Lively Points 59564

Nous avons des tables dans SQL Server 2005 et 2008 qui contiennent plus d'un milliard de lignes (30 millions sont ajoutées chaque jour). Je ne peux pas m'imaginer faire le parcours du combattant en répartissant tout cela dans une nouvelle table chaque jour.

Il est beaucoup moins coûteux d'ajouter l'espace disque approprié (dont vous avez besoin de toute façon) et la RAM.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X