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 :

Dégradation de la performance SQL pour les tables contenant plusieurs colonnes


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Août 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Dégradation de la performance SQL pour les tables contenant plusieurs colonnes
    * Bonjour, *

    j'ai un soucie avec un traitement de chargement de données dans SQL Server 2008.
    Le problème est le suivant: j'ai une table qui contient 118 colonnes (type nvarchar + numeric ...)
    au niveau de la sélection il n'y a aucun problème de perf
    par contre quand je lance une opération de mise à jour j'ai un vrai problème de performance
    en gros pour updater la table avec 1 millions d'enregistrements il me faut 7 heurs ce qui est trop

    j'ai pensé à splitter la table mais cela impacte plusieurs process déjà développer. et ça n'a pas de sens en modélisation.

    avez vous des suggestions svp?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par hackeddb Voir le message
    j'ai une table qui contient 118 colonnes (type nvarchar + numeric ...)
    C'est beaucoup !
    L'on peut penser que vous avez effectivement un problème de modélisation, mais sans la structure des tables, difficile à dire.

    Dites en plus sur cette table, ce qu'elle contient,...Les types sont-t-ils adaptés ? (pas besoin de NVARCHAR là ou du VARCHAR suffit, pas besoin de NUMERIC là où du INT suffit,...)
    et postez la DDL de la table en question
    Citation Envoyé par hackeddb Voir le message
    en gros pour updater la table avec 1 millions d'enregistrements il me faut 7 heurs
    Vous pourriez désactiver les index avant cette mise à jour, et les reconstruire ensuite, mais là encore, sans connaitre le contexte, on ne peut pas trop détailler

    Citation Envoyé par hackeddb Voir le message
    mais cela impacte plusieurs process déjà développer
    Vous pouvez réduire l'impact de votre changement de modèle en créant des vues...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Août 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci pour le feedback aieeeuuuuu!

    en faite c'est une table qui stocke les informations relatives à des individus.
    A part les infos classiques (Nom,Prenom ,email ,adresse et tel...) il y a 50 colonnes en plus pour stocker des scores et des colonnes réservées pour des segmentations et de la géolocalisation ...

    Il y a plusieurs colonnes qui peuvent être déclarées en VRACHAR alors qu'elles sont actuellement déclarées en NVARCHAR.

    Déjà cela permettra de réduire la taille de chaque ligne dans les pages SQL mais bon ce n'est pas grande chose au final...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Août 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Concernant la désactivation des index c'est déjà fait.
    Je garde que l'indexe par défaut celui de la clé primaire. ==> toujours 7 heurs de MAJ
    La taille de cette table est de 30 millions d'enregistrements.
    sachant que la base est hébergée sur un serveur dédié Dell PowerEdge T610 de 8 cores et 16 Go de RAM ...

    Merci encore.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 698
    Points : 586
    Points
    586
    Par défaut
    Citation Envoyé par hackeddb Voir le message
    j'ai pensé à splitter la table mais cela impacte plusieurs process déjà développer. et ça n'a pas de sens en modélisation.
    (juste une parenthèse)

    Je pense au contraire qu'il y a un nœud dans la modélisation. Difficile d'imaginer 118 colonnes pour définir un seul "Sujet". A cette taille ça ressemble plus a une de ces tables obèses qui évoluent sur plusieurs années et ou les développeur ajoutent des colonnes sans se soucier de la performance a long terme...

  6. #6
    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
    Citation Envoyé par hackeddb Voir le message
    ça n'a pas de sens en modélisation
    Si la table en cause ne respecte pas la 3e forme normale, alors du point de vue de la modélisation elle est peccamineuse.
    (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.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Août 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    en fait c'est une table qui vient d'un datawarhouse fait avec l'approche data-vault.
    Cette table se trouve dans un datamart qui est l'agrégation des hub-satellites liés à aux individus.

    en gros cette table va être exploiter par des analystes qui n'ont pas forcément des connaissances en SQL...

    Cordialement,
    hackeddb.

  8. #8
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    et en quoi consiste l'update ?
    à defaut de spliter la table on peut peut etre splitter l'update ...

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par hackeddb Voir le message
    Concernant la désactivation des index c'est déjà fait.
    Je garde que l'indexe par défaut celui de la clé primaire. ==> toujours 7 heurs de MAJ
    Il faut malgré tout s'assurer que certains index ne sont pas utiles à l'update.
    Contrairement à une idée répandue, les index peuvent accélérer certaines opérations de mise à jour. Mais là encore, tout dépend des index et de la requête update...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Premièrement, il faut utiliser les bon outils.

    Pour ma part, dès que j'ai un problème de performance, j'inspecte le plan d'exécution. Tu n'as pas à connaitre toutes les parties mais au moins les éléments de base. En bonus, le système va même te suggérer des index s'il en manque.

    Autre chose à vérifier sont:

    - Le niveau de FILLFACTOR (pour un environnement BI, il devrait être à 100).
    - La fragmentation des index
    - La mise à jour des statistiques de la table
    - La présence ou non de partitions.

    Un autre outil intéressant, les statistiques d'éxécution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET STATISTICS IO ON
    SET STATISTICS TIME ON
    Tu vas peut-être te rendre compte que le bottleneck est au niveau de la mémoire ou bien du disque.

    Pour ce qui est de la structure, j'ajouterais aux précédentes interventions qu'il serait bien de vérifier le pourcentage de valeurs nulles ou par défaut dans les colonnes 'secondaires'. Cela peut grandement influencer la capacité du moteur à composer un plan d'exécution efficace...

  11. #11
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Je garde que l'indexe par défaut celui de la clé primaire
    Quelle est justement c'est PK? sur quelle colonne pointe t'elle?

    ESt-elle définit comme cluster de la table?

    Il nous manque beaucoup d'infos:
    • Est-ce une base en production (sollicité pendant l'update)
    • DDL de la table
    • Texte de la requète de mise à jour
    • Statistics (IO et time)
    • Plan d'execution
    • Wait stats pendant l'execution...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/04/2006, 15h13
  2. Requêtes SQL pour les Dates et numériques
    Par Ramage03 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2006, 17h26
  3. alias ou synonymes pour les tables ou les champs ?
    Par nanou9999 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2006, 11h04
  4. Réponses: 1
    Dernier message: 23/10/2005, 00h55
  5. [ODBC] erreur SQL pour les unions qui renvoient vide
    Par fabriceMerc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/11/2003, 11h06

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