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

MS SQL Server Discussion :

[2K5] problème de volume


Sujet :

MS SQL Server

  1. #1
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut [2K5] problème de volume
    bonjour,

    je viens de calculer la volumétrie... et un de mes tables de relation (id1, id2, value) va contenir 690 milliards de lignes. Et je vais faire des jointures avec une table qui contient juste moitié moins de lignes... Est-ce que SQL Serveur va tenir le coup ou vais-je le faire exploser ?

  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 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Cela parait beaucoup... Mais avez-vous le choix ??? Le nombre de ligne n'est pas ce qu'il y a de plus significatif. C'est le volume qui importe...
    Ce qui sera important c'est la structure de la table et la construction des index. Si la table est chrono ordonnée ou en série monotone, alors mettre un index cluster (soit avec un IDENTITY sur BIGINT, soit sur DATETIME).
    Les index de la jointure seront aussi important, comme les index pour les requêtes (couvrants si possible).

    Vous pouvez aussi penser au partitionnement de table ou aux vues partitionnées indexées.

    Enfin, pour certaines requêtes d'agrégation, vous pouvez penser aux vues indexées

    Bref il existe un panel d'outil largement suffisant en général pour répondre aux fortes volumétries.

    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 confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    mettre un index cluster (soit avec un IDENTITY sur BIGINT, soit sur DATETIME)
    Hello !

    Rajoutons une info : si sur du DATETIME, éviter l'index clustered non unique. SQL Server doit rajouter un unifiant, ce qui alourdit la colonne.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  4. #4
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    Cela parait beaucoup... Mais avez-vous le choix ???
    J'ai peut-être le choix si je trouve comment modéliser différement, mais de toutes façons, il restera de gros volumes. Et de toutes façons, le sujet est interressant pour ma culcure personnelle.
    D'ailleurs, j'ai aussi le choix dans le sens ou c'est un projet personnel, on ne me demande pas ça au boulot ^^ La seule fois où j'ai eu beaucoup de données, j'avais un datawarehouse Netezza pour le supporter. Mais je n'en ai pas à la maison, bien sur

    Voici donc une nouvelle question :

    Cluster :
    Vaut-il mieux faire
    table(id, fk1, fk2, value) avec un index cluster unique sur id
    ou table(fk1, fk2, value) avec un index cluster unique sur fk1,fk2 ?
    Le 1er cas rajoute du volume, non ? Cette table ne "bougera" plus une fois remplie avec la colonne "value" calculée, il s'agit d'un "cross join" entre 2 autres tables.

    Je vais jeter un coup d'oeil au "partitionnement de table" et aux "vues partionnées indexées".

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    table(id, fk1, fk2, value) avec un index cluster unique sur id
    ou table(fk1, fk2, value) avec un index cluster unique sur fk1,fk2 ?

    Le cas 1 présente un avantage si tu accèdes à l'enregistrement de façon unitaire, dans une site web de gestion des tables de bases par exemple. Tu peux accèder aux informations de la ligne plus simplement sans te trimbaler toute ta clé composée... Je parle sur le plan fonctionnelle uniquement. L'usage d'un gridview et d'un formview en asp.net l'impose pratiquement...

    le cas 2 est le cas universitaire, il est donc recommandé en matière de modélisation!

  6. #6
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Es-tu sûr qu'il s'agit d'un CROSS JOIN ? Si oui, les performances risquent d'être horribles.
    Par principe, essaie de maintenir des index clustered sur des valeurs uniques, et aussi petits que possible, et surtout pas sur des colonnes où les valeurs s'insèrent de façon aléatoire. La taille de la clé de l'index clustered influe sur la taille de tous les autres index de la table, puisqu'ils la contiennent.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  7. #7
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    Ce que je voulais dire, c'est que la table est le résultat d'un cross join. En fait, il s'agit d'un cross join et d'une valeur calculée (dépendant des 2 clefs), mais vu les volumes et la taille du calcul, je garde le résultat dans cette table (c'est un résultat intermédiaire...)

    Concernant le type d'accès que je vais avoir sur cette table :
    j'ai sur ma table 1 un select avec une clause where renvoyant environ 2500 lignes, je fais ma jointure sur la fk1 de la table relationnelle (la grosse là), puis un join avec la fk2 sur une troisième table. Je n'accède jamais à "une ligne", mais à l'ensemble des lignes de même fk1.

Discussions similaires

  1. [SSAS][2k5] Problème ParralelPeriod
    Par arasium dans le forum SSAS
    Réponses: 3
    Dernier message: 19/03/2008, 09h17
  2. Réponses: 4
    Dernier message: 06/03/2008, 17h32
  3. Réponses: 4
    Dernier message: 04/02/2008, 16h35
  4. problème de volume
    Par kawther dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 09/07/2007, 11h01
  5. [FEDORA] Problème de volume logique
    Par Grimmjow dans le forum RedHat / CentOS / Fedora
    Réponses: 14
    Dernier message: 04/06/2007, 10h42

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