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 :

Reconstruction des index


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 175
    Par défaut Reconstruction des index
    Bonjour,

    J'essaye de reconstruire mes index à l'aide du script suivant :

    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
    17
    18
    19
    20
    21
    DECLARE @TableName VARCHAR(255)
    DECLARE @sql NVARCHAR(500)
    DECLARE @fillfactor INT
    SET @fillfactor = 1
    DECLARE TableCursor CURSOR FOR
    SELECT '['+OBJECT_SCHEMA_NAME([object_id])+'].['+name+']' AS TableName
    FROM sys.tables
    WHERE name NOT IN ('master','model','msdb','tempdb','distrbution')   
    ORDER BY 1
    OPEN TableCursor
    FETCH NEXT FROM TableCursor INTO @TableName
    WHILE @@FETCH_STATUS = 0
    BEGIN
    print 'Rebuilding index on table : '+@TableName
    SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
    EXEC (@sql)
    FETCH NEXT FROM TableCursor INTO @TableName
    END
    CLOSE TableCursor
    DEALLOCATE TableCursor
    GO
    Mais lorsque je contrôle la fragmentation avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DB_NAME(database_id) as 'Db name', OBJECT_SCHEMA_NAME([object_id], database_id) as 'Schema name', OBJECT_NAME([object_id], database_id) as 'Table name', avg_fragmentation_in_percent, fragment_count, avg_fragment_size_in_pages FROM sys.dm_db_index_physical_stats(DB_ID('<MABASE>'), NULL, NULL, NULL , NULL)
    	order by avg_fragmentation_in_percent desc
    Mon avg_fragmentation_in_percent ne descend pas en dessous de 50% pour certaines tables.
    Est-ce normal ?

    Une autre question : j'ai essayé plusieurs valeurs pour le fillfactor, comment déterminer la bonne valeur pour mes tables ?

    Merci.

  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
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par rodbeck Voir le message
    Bonjour,

    J'essaye de reconstruire mes index à l'aide du script suivant :
    [...]

    Mais lorsque je contrôle la fragmentation avec :

    [...]
    Mon avg_fragmentation_in_percent ne descend pas en dessous de 50% pour certaines tables.
    Est-ce normal ?

    Une autre question : j'ai essayé plusieurs valeurs pour le fillfactor, comment déterminer la bonne valeur pour mes tables ?

    Merci.
    1) oui, car pour les petits index, la ils peuvent apparaître fragmentés alors qu'il ne le sont pas. Explication : les données (lignes de table ou d'index) sont stockées dans des pages de 8 Ko. Si un table ou un index fait moins de 8 Ko, alors il est très probable qu'elle apparaisse toujours fragmentée. Exemple : table de 4 ko, fragmentation 50%. De plus certains taux de fragmentation sont calculés à l'extension que constitue 8 pages. Dans le précédent cas, la fragmentation d'extension sera de 4Ko sur 64 (8 pages de 8Ko) = 93,75 % !
    Donc, en général on filtre sur les index d'au moins 16 pages !

    2) le fill factor optimal doit correspondre au nombre de mise à jour effectué par unité de temps par rapport au nombre de ligne que contient l'index.
    Ainsi, au début de la vie de la base on peut mettre un FILLFACTOR élevé (60%), alors que lorsqu'elle est vieille et contient beaucoup de données, ce FILLFACTOR peut être très bas (90%).
    A défaut mettez entre 80 et 90%

    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
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 175
    Par défaut
    Merci beaucoup pour ces précision.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 175
    Par défaut
    Ok, en plus la procédure décrite ici le prend déjà en compte

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

Discussions similaires

  1. Pb lors de la reconstruction des indexes
    Par dily0403 dans le forum Administration
    Réponses: 2
    Dernier message: 28/11/2009, 10h48
  2. Reidexation ou reconstruction des index ?
    Par SILO dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/10/2008, 17h47
  3. Reconstruction d'index
    Par superfly dans le forum Oracle
    Réponses: 22
    Dernier message: 23/03/2006, 16h58
  4. Réponses: 4
    Dernier message: 16/03/2004, 14h16
  5. [Technique] Intérêt des index
    Par ddams dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 04/11/2002, 15h11

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