Espace disque requis pour les opérations DDL d'index
L'espace disque est un élément important lors de la création, reconstruction ou suppression d'index. Un espace disque inadéquat peut réduire les performances, voire entraîner l'échec de l'opération d'index. Cette rubrique propose des informations générales qui peuvent vous aider à déterminer la quantité d'espace disque nécessaire pour les opérations DDL d'index.
Opérations d'index ne nécessitant pas d'espace disque supplémentaire
Les opérations d'index suivantes ne nécessitent pas d'espace disque supplémentaire :
ALTER INDEX REORGANIZE ; un espace journal est toutefois nécessaire.
DROP INDEX lors de la suppression d'un index non-cluster.
DROP INDEX lors de la suppression d'un index cluster hors ligne sans spécifier la clause MOVE TO et qu'il n'existe pas d'index non-cluster.
CREATE TABLE (contraintes PRIMARY KEY ou UNIQUE)
Opérations d'index nécessitant de l'espace disque supplémentaire
Toutes les autres opérations DDL d'index nécessitent de l'espace disque temporaire supplémentaire lors de l'exécution de l'opération ainsi que de l'espace disque permanent pour stocker la ou les nouvelles structures d'index. Pour plus d'informations sur les structures d'index, consultez Tables et architecture de structures de données d'index.
Lorsqu'une nouvelle structure d'index est créée, de l'espace disque est nécessaire pour l'ancienne structure (source) et la nouvelle (cible) dans les fichiers et groupes de fichiers appropriés. L'ancienne structure ne peut être désallouée tant que l'opération de création d'index n'est pas terminée.
Les opérations DDL d'index suivantes créent de nouvelles structures d'index et nécessitent de l'espace disque supplémentaire :
CREATE INDEX
CREATE INDEX WITH DROP_EXISTING
ALTER INDEX REBUILD
ALTER TABLE ADD CONSTRAINT (PRIMARY KEY ou UNIQUE)
ALTER TABLE DROP CONSTRAINT (PRIMARY KEY ou UNIQUE) lorsque la contrainte est basée sur un index cluster
DROP INDEX MOVE TO (concerne uniquement les index cluster)
Espace disque temporaire à des fins de tri
Outre l'espace disque nécessaire pour les structures source et cible, de l'espace disque temporaire est nécessaire à des fins de tri, à moins que l'optimiseur de requête trouve un plan d'exécution ne nécessitant pas de tri.
En cas de tri, celui-ci s'applique à un nouvel index à la fois. Par exemple, lorsque vous reconstruisez un index cluster et des index non-cluster associés dans une seule instruction, les index sont triés un après l'autre. La quantité d'espace disque temporaire supplémentaire nécessaire pour le tri doit par conséquent correspondre à l'index le plus volumineux traité. Il s'agit généralement de l'index cluster.
Si l'option SORT_IN_TEMPDB est définie sur ON, l'index le plus volumineux doit tenir dans tempdb. Bien que cette option augmente la quantité d'espace disque temporaire utilisée pour créer un index, elle peut réduire le temps nécessaire pour créer un index lorsque tempdb ne se trouve pas sur le même ensemble de disques que la base de données utilisateur. Pour plus d'informations sur me tri dans tempdb, consultez tempdb et création d'index.
Si l'option SORT_IN_TEMPDB est définie sur OFF (par défaut) chaque index, y compris les index partitionnés, est stocké sur l'espace disque de destination et de l'espace disque n'est nécessaire que pour les nouvelles structures d'index.
Pour un exemple de calcul de l'espace disque, consultez Exemple d'espace disque d'un index.
Espace disque temporaire pour les opérations d'index en ligne
L'exécution d'opérations d'index en ligne nécessite de l'espace disque temporaire supplémentaire.
Lors de la création, reconstruction ou suppression d'un index cluster, un index non-cluster temporaire est créé pour mapper les anciens signets sur les nouveaux. Si l'option SORT_IN_TEMPDB est définie sur ON, cet index temporaire est créé dans tempdb. En revanche, si elle est définie sur OFF, le même groupe de fichiers ou schéma de partition que l'index cible est utilisé. L'index de mappage temporaire contient un enregistrement pour chaque ligne de la table et son contenu constitue un lien entre les anciennes et les nouvelles colonnes à signets, y compris uniqueifiers et identificateurs d'enregistrement ; il ne comprend qu'une seule copie de chaque colonne utilisée dans les deux signets. Pour plus d'informations sur les opérations d'index en ligne, consultez Exécution d'opérations en ligne sur les index.
[!REMARQUE]
L'option SORT_IN_TEMPDB ne peut pas être définie pour les instructions DROP INDEX. L'index de mappage temporaire est toujours créé dans le même groupe de fichiers ou schéma de partition que l'index cible.
Les opérations d'index en ligne utilisent la version de ligne pour isoler l'opération d'index des effets des modifications d'autres transactions. Ceci permet d'éviter de demander des verrous partagés sur des lignes qui ont été lues. Les opérations simultanées de suppression et de mise à jour d'utilisateur lors d'opérations d'index en ligne nécessitent de l'espace pour les enregistrements de version dans tempdb. Pour plus d'informations, consultez Exécution d'opérations en ligne sur les index et Présentation des niveaux d'isolement basés sur le versioning de ligne.
Voir aussi