Manière indolore de créer un index clusterisé sur une immense table?

22

Nous avons donc un site client qui se plaint de performances très lentes. J'ai jeté un coup d'œil et il est évident que le problème est dû au fait que Somebody Else (grrrr) a conçu une table contenant plus de 20 millions d'enregistrements sans index clusterisé.

Maintenant, je veux créer un index cluster sur cette table - mais dans mon environnement de test, ma create indexcommande fonctionne depuis une heure et ce n'est toujours pas fait. Le site client est un atelier qui fonctionne 24h / 24 et 7j / 7, et ne peut pas se permettre une heure d'indisponibilité pendant que je crée un index.

Existe-t-il une méthode moins brutale pour créer l'index qui terminera le travail rapidement ou le fera d'une manière intelligente qui ne tuera pas totalement les performances du serveur lorsqu'il est occupé?

Nous utilisons SQL Server Enterprise Edition.

Shaul dit que je soutiens Monica
la source

Réponses:

26
  • Si votre serveur SQL est l'édition Enterprise + et que la table ne contient aucun champ BLOB - CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • Sinon - il n'y a pas d'autre moyen que de créer la table avec le même schéma sur le côté et de transférer judicieusement les données, y compris toutes les opérations INSERT / UPDATE / DELETE (à l'aide du déclencheur, par exemple), puis de supprimer avec précision l'ancienne table et de la renommer nouveau au même nom que l'ancien - les inconvénients sont: lent, ajoute une charge supplémentaire au serveur et au stockage

Oleg Dok
la source
12

Vous ne savez pas quelle version de SQL Server votre client utilise. Dans l'entreprise, vous pouvez créer l'index avec (ONLINE = ON), de sorte que la table est disponible jusqu'à la création de l'index.


la source
8
  • Créer une nouvelle table identique à l'original (aura évidemment besoin d'un nom différent)
  • Créer un index cluster sur une nouvelle table
  • Charger des données dans une nouvelle table
  • Déposer la table d'origine
  • Renommer une nouvelle table en utilisant le nom d'origine

Assurez-vous d'appliquer toutes les autorisations requises par rapport à l'original.

Bryan
la source