Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2012, 17h45   #1
Expert Confirmé Sénior
 
Avatar de Pol63
 
Homme Sébastien
Développeur informatique
Inscription : avril 2007
Messages : 9 201
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 30
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : avril 2007
Messages : 9 201
Points : 13 428
Points : 13 428
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
__________________
si vous ne comprenez pas ce que je dis, demandez à google
Pol63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 08h48   #2
Expert Confirmé Sénior
 
Avatar de Pol63
 
Homme Sébastien
Développeur informatique
Inscription : avril 2007
Messages : 9 201
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 30
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : avril 2007
Messages : 9 201
Points : 13 428
Points : 13 428
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 ^^
__________________
si vous ne comprenez pas ce que je dis, demandez à google
Pol63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 09h06   #3
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 159
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

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

Informations forums :
Inscription : août 2007
Messages : 1 159
Points : 1 611
Points : 1 611
Hello,

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

Bonne journee
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 09h27   #4
Expert Confirmé Sénior
 
Avatar de Pol63
 
Homme Sébastien
Développeur informatique
Inscription : avril 2007
Messages : 9 201
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 30
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : avril 2007
Messages : 9 201
Points : 13 428
Points : 13 428
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 ?
__________________
si vous ne comprenez pas ce que je dis, demandez à google
Pol63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 09h31   #5
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 724
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 724
Points : 6 848
Points : 6 848
Citation:
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.

Citation:
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).

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 09h34   #6
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 724
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 724
Points : 6 848
Points : 6 848
Citation:
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 ....

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 09h53   #7
Expert Confirmé Sénior
 
Avatar de Pol63
 
Homme Sébastien
Développeur informatique
Inscription : avril 2007
Messages : 9 201
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 30
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : avril 2007
Messages : 9 201
Points : 13 428
Points : 13 428
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
__________________
si vous ne comprenez pas ce que je dis, demandez à google
Pol63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 13h47   #8
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 670
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 670
Points : 8 732
Points : 8 732
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.

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h11.


 
 
 
 
Partenaires

Hébergement Web