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 :

Défragmenter une table


Sujet :

Administration SQL Server

  1. #1
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut Défragmenter une table
    bonjour

    pour défragmenter des indexes je trouve pas mal d'infos sur le net, à priori la reconstruction serait le plus efficace

    mais concernant les tables, est-ce utile que les pages soient contigües ? comment défragmente-t-on une table ? (comment trouve-t-on le niveau de fragmentation ?)
    toutes mes tables ont un index clustered, je ne pense pas que ca entre en compte mais je le précise quand même ...

    merci
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    je pense avoir trouvé ce qu'il faut sur smo (dll du modèle objet d'sql server)
    on peut faire rebuild ou rebuildindexes sur un objet table
    je regarderais au passage la requete qui passe dans profiler ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

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

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Hello,

    La table est votre index clustered.
    Si vous defragmentez celui-ci, vous defragmentez votre table.

    Bonne journee

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    ok, ca ne me serait pas venu à l'idée, bien que d'un côté ca peut paraitre logique
    et ca explique pourquoi tous les sites qui parlent de défragmentation de table disent de défragmenter les indexes ^^
    et sur une table sans index clustered ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    mais concernant les tables, est-ce utile que les pages soient contigües ? comment défragmente-t-on une table ? (comment trouve-t-on le niveau de fragmentation ?)
    Pour le niveau de fragmentation la DMF sys.dm_db_index_physical_stats peut vous aider.

    pour défragmenter des indexes je trouve pas mal d'infos sur le net, à priori la reconstruction serait le plus efficace
    Oui la reconstruction regènère un index tout neuf. Cependant c'est une opération beaucoup agressive que la défragmentation car le verrouillage n'est pas le même et risque de géner vos utilisateurs à ce moment. (si vous êtes en édition Enterprise vous pouvez cependant bénéficier d'une reconstruction en ligne).

    ++

  6. #6
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    et ca explique pourquoi tous les sites qui parlent de défragmentation de table disent de défragmenter les indexes ^^
    En général ce qu'on trouve sur la toile parle de défragmentation des indexes. Défragmenter un index cluster c'est défragmenter la table elle même car l'index cluster est la table triée. Cependant défragmenter un index non cluster ne veut pas dire que cela défragmente votre table car un index non cluster duplique les données de la table en fonction de la définition de celui-ci. La défragmentation concerne unique ces données dupliqués.

    On peut parler également de reconstruction de tables sans index cluster. On appelle cela reconstruire une table HEAP. Dans ce cas la notion de fragmentation n'est pas la même que pour les indexes. Il y a différentes méthodes pour défragmenter une table HEAP comme la création d'un index cluster sur la table, l'utilisation de la commande ALTER TABLE REBUILD depuis SQL Server 2008, l'export des données de la table HEAP vers une nouvelle table ....

    ++

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    merci bien à vous 2 pour ces infos

    ces reconstructions seront faites seulement en cas d'arrêt chez les clients, sinon ca sera une réorganisation des indexes seulement, qui doit être moins verrouillant qu'un rebuild
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    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 : 44
    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,

    Une réorganisation d'index (ALTER INDEX ... REORGANIZE ou DBCC INDEXDEFRAG sous SQL Server 2000) ne fait que réorganiser logiquement le niveau feuille de l'index, et ce en conservant le FILLFACTOR s'il y en a un qui a été spécifié (sinon c'est celui par défaut, zéro : page remplie au maximum).
    C'est-à-dire que seul le chaînage des pages est affecté, de façon à éviter les aller-retours lors des parcours d'index, et qu'aucune nouvelle page n'est allouée.
    Cela convient souvent dans le cas où l'index est fragmenté à mois de 20/30%.
    C'est ce qui fait que le niveau de verrouillage est faible, et que l'opération se fait de toute façon en ligne.

    Une défragmentation d'index (ALTER INDEX ... REBUILD ou DBCC DBREINDEX sous SQL Server 2000) reconstruit littéralement l'index.
    Si la reconstruction est faite ONLINE, un index est créé et maintenu en parallèle de l'index existant, ce qui fait que de nouvelles pages sont allouées.
    A la fin de la défragmentation, le vieil index est supprimé et remplacé par le nouveau, et cela nécessite un verrou de modification de schéma (le plus strict qui existe) et cela peut poser des petits problèmes.
    Cela dit ce verrou est pris sur un très court laps de temps, et l'accès aux colonnes sous-jacentes est toujours possible durant la reconstruction.

    Si la défragmentation se fait OFFLINE, l'accès aux colonnes sous-jacentes n'est pas possible, et s'il s'agit de l'index cluster, l'accès à la table est impossible. L'index est détruit puis recréé.

    Notez qu'un index cluster d'une table ayant des colonnes LOB (de type image, text ou ntext sous SQL Server 2000, et varbinary(max), varchar(max) ou nvarchar(max) sous SQL Server 2005 et suivants) ne peut pas être reconstruit ONLINE.
    Il en va de même si vous reconstruisez une partition d'un index, qu'il soit cluster ou non-cluster.

    Pour en savoir plus sur la différence entre un index cluster et un index non-cluster, je vous invite à lire le billet que j'ai écrit à ce sujet.

    @++

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

Discussions similaires

  1. Défragmenter les indexes d'une table
    Par ben_harper dans le forum Administration
    Réponses: 3
    Dernier message: 28/11/2008, 12h24
  2. Défragmenter une table
    Par Doctor Z dans le forum Administration
    Réponses: 14
    Dernier message: 09/06/2004, 17h57
  3. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  4. Pb d'auto-incrément sur une table v7
    Par Nivux dans le forum Paradox
    Réponses: 9
    Dernier message: 26/12/2002, 12h05
  5. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 13h55

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