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

Administration SQL Server Discussion :

Suppression des index


Sujet :

Administration SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2016
    Messages : 144
    Points : 62
    Points
    62
    Par défaut Suppression des index
    bonjour a tous

    j'ai besoin de récupérer plus d'espace dans ma base de donné pour minimiser autogrowth

    j'ai penser a faire un petit audit sur mes index pour supprimer les index non utilisée et qui occupe un espace important j'ai mis ce critère pour le

    recherche (user_seeks=0 and user_scans=0 and user_lookups=0 )

    autres que ces colonnes il existes un autre colonne qui s'appelle user_updates et qui a des valeurs différents du zéro

    est ce que ce colonne doit être aussi pris en considération ,il doit avoir aussi la valeur zéro si je pend la décision supprimer l'index

    merci pour vos aides
    Images attachées Images attachées  

  2. #2
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut
    Bonjour,

    Regarde aussi ce que donne cette requète. Ca te donnera aussi une idée des tables qui ne sont plus très utilisées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT DB_NAME() AS DataBaseName
    ,t.name
    ,user_seeks
    ,user_scans
    ,user_lookups
    ,user_updates
    ,last_user_seek
    ,last_user_scan AS last_read
    ,last_user_update AS last_write
    ,last_user_lookup
    FROM sys.dm_db_index_usage_stats i 
    	JOIN sys.tables t ON (t.object_id = i.object_id)
    WHERE database_id = db_id()
    ORDER BY name
    Ce que nous avons fait pour nous-même meurt avec nous, ce que nous avons fait pour les autres et le monde est immortel. Albert Pike

    http://www.datacrossroad.be

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Attention à ces deux requêtes basées sur des DMV...

    En effet les données collectées par ces vues sont remise à zéro à chaque démarrage de SQL Server.
    Ce qui fait que si vous venez juste de redémarrez le serveur, vous n'avez pas assez de recul pour réellement décider de supprimer tel ou tel index, qui peut être utilisé de manière intensive que pour certaines requêtes mensuelles !!! (comme la paye, la facturation...

    Il faut donc s'interdire de supprimer des index si l'on a moins de 31 jours d'historique d'activité continue et pour cela je vous recommande d'ajouter dans le where le membre suivant à votre prédicat de restriction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXISTS(SELECT * FROM sys.dm_os_sys_info WHERE sqlserver_start_time < DATEADD(day, -31, CURRENT_TIMESTAMP))
    En sus certains index peuvent n'avoir été créé que très récemment.... Pour la même raison, il serait stupide de les supprimer !!!

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

  4. #4
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut
    Ce probleme m'interesse car je me posais la question aussi la derniere fois

    Cette colonne user_updates est elle alors importante ? car personne répond

    MErci a Vous et bonne journée

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par olivtone Voir le message
    Ce probleme m'interesse car je me posais la question aussi la derniere fois

    Cette colonne user_updates est elle alors importante ? car personne répond

    MErci a Vous et bonne journée
    user_updates compte le nombre de modif effectuées sur l'index. Autant l'index apporte un gain important s'il est utilisé en seek, moyen s'il est utilisé en lookup et faible s'il est utilisé en scan, autant un update est toujours pénalisant.

    Il faut donc chercher à supprimer les index ayant beaucoup de mise à jour (update) et aucune lecture (seek, lookup et scan).

    ENFIN, il est très important de ne JAMAIS supprimer les index sémantiques ! (primary key, unique...) ou organisés en table (clustered)

    J'ai l'habitude de donner cette formule plus adaptée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT s.name AS TABLE_SCHEMA, o.name AS TABLE_NAME, i.name AS INDEX_NAME, 
           user_updates, 
           'DROP INDEX [' + i.name + '] ON [' +s.name +'].[' + o.name +'];' AS DROP_COMMAND
    FROM   sys.dm_db_index_usage_stats AS ius
           INNER JOIN sys.objects AS o              ON ius.object_id = o.object_id
                 INNER JOIN sys.schemas AS s        ON o.schema_id = s.schema_id
           INNER JOIN sys.indexes AS i              ON ius.object_id = i.object_id AND
                                                       ius.index_id = i.index_id
    WHERE  database_id = DB_ID()
    AND    (SELECT sqlserver_start_time 
            FROM   sys.dm_os_sys_info) < DATEADD(day, -31, CURRENT_TIMESTAMP)
    AND    ius.index_id BETWEEN 2 AND 999
    AND    user_seeks + user_lookups + user_scans = 0
    AND    i.is_primary_key = 0
    AND    i.is_unique = 0
    AND    i.is_unique_constraint = 0;
    Valable dans le contexte d'une base précise.

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

  6. #6
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut
    merci SQL Pro c'est top !!!!

Discussions similaires

  1. [2008R2] Suppression des index obèses
    Par Boubou2020 dans le forum Administration
    Réponses: 8
    Dernier message: 17/12/2015, 11h23
  2. Réponses: 6
    Dernier message: 20/05/2009, 09h35
  3. Suppression des index FullText
    Par balmeyer dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/11/2007, 16h15
  4. [Technique] Intérêt des index
    Par ddams dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 04/11/2002, 15h11
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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