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

Développement SQL Server Discussion :

[SQL Serveur 2005] Deux index sur le même champ


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 37
    Par défaut [SQL Serveur 2005] Deux index sur le même champ
    Bonjour à tous,

    Tout d'abord désolé si la question a déjà été posée et répondue, j'ai cherché sur le forum et je n'ai pas trouvé la réponse qui convenait.

    Chez un client nous éprouvons des lenteurs incroyables dans des requêtes sur une table. Lorsque l'on exécute un DBCC Reindex le tout revient à la normale, mais le lendemain matin les lenteurs reviennent, nous devons exécuter la commande de nouveau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC sp_msForEachTable @COMMAND1= 'DBCC DBREINDEX ( "?")'
    À priori nous avons remarqué que pour un champ donné dans la table il existe deux index sur le dit champ. Dans la version précédente de notre logiciel nous n'avions pas les problèmes de lenteur, et seulement un index était présent.

    Ma question étant, est-ce deux index sur un même champ peut faire en sorte de créer un tel genre de problème de performance?

    Le premier index est sur une colonne mais avec une clause "include" contenant plusieurs autres colonnes. Alors que le deuxième index (qui était absent autrefois) est sur la colonne uniquement, sans clause "include".

    Merci d'avance de l'aide que vous pourrez m'apporter.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Je vois que vous utilisez la clause INCLUDE, donc c'est que vous êtes au moins sous SQL Server 2005, ce qui signifie que vous pouvez utiliser l'instruction ALTER INDEX monIndex REBUILD.
    Elle permet en outre de reconstruire l'index "en ligne", avec l'option WITH (ONLINE= ON).

    À priori nous avons remarqué que pour un champ donné dans la table il existe deux index sur le dit champ
    Cela n'est pas bon et c'est très probablement à l'origine de votre problème de performances, puisque pour toute nouvelle valeur insérée ou modifiée, vous devez mettre à jour également ces deux indexes.

    Le premier index est sur une colonne mais avec une clause "include" contenant plusieurs autres colonnes. Alors que le deuxième index (qui était absent autrefois) est sur la colonne uniquement, sans clause "include".
    Donc vous pouvez le supprimer, il est inutile.
    Vous pouvez le voir à l'aide de la vue de gestion dynamique sys.dm_db_index_usage_stats.

    Les lenteurs peuvent aussi être dues à taux de fragmentation de votre index, si votre table est très souvent modifiée (INSERT / UPDATE / DELETE).
    Si elle est massivement insérée, utilisez le paramètre FILLFACTOR à la prochaine reconstruction de votre index.

    Malheureusement sans la structure de la table, ses index, et une requête type sujette à lenteurs, je ne peux pas aller plus loin.

    @++

  3. #3
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 37
    Par défaut
    Merci beaucoup pour ton feedback!

    Je vais valider avec les conseils que tu m'as donné, je te reviens dès que possible.

    Merci encore!

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Il y a probablement une fragmentation importante de cet index. Quelles sont les opérations DML faites en une journée ? Ne pouvez vous mettre un FILL FACTOR important ???

    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/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/03/2012, 17h02
  2. Réponses: 5
    Dernier message: 27/05/2010, 08h31
  3. Deux squid sur le même serveur
    Par photorelief dans le forum Administration système
    Réponses: 5
    Dernier message: 21/07/2009, 11h39
  4. Sql serveur 2005 et index full texte
    Par gueguenkevin dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/01/2008, 21h12
  5. Eviter les doublons sur un champ SQL Serveur 2005
    Par crashyear dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/12/2006, 08h02

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