Rebuild l'index sur la table avec 128 millions de lignes

J'ai une table de database avec plus de 128 millions de lignes.

Le problème auquel je dois faire face est celui des index, la database fonctionne très mal au fil du time, je l'ai en partie réduite à la fragmentation des index. L'un des index actuels sur la grande table est d'environ 50% de fragmentation totale.

La réorganisation a fait environ 1% en 1 heure, donc cela prendrait trop de time.

Sur une telle table, un ré-index peut prendre jusqu'à 5 heures voire plus, et je n'ai pas trouvé de véritable moyen de suivre les progrès. Quel serait le moyen le meilleur et le plus rapide de rebuild un indice sur une si grande table? Devrais-je définir la database sur "OFFLINE"?

La database gère également un site Web très volumineux et très occupé. J'ai donc prévu un time d'indisponibilité maximal de 6 heures pour y arriver, mais j'ai besoin de la méthode la plus rapide et la plus efficace possible.

J'ai également besoin de mettre à jour tous les autres index sur la database, mais cette table est la plus difficile.

Si vous n'avez pas mesuré les 2 choses suivantes sur cet index particulier, vous n'avez probablement pas encore de raison de rebuild.

  1. Combien (le cas échéant) vos requêtes s'améliorent-elles immédiatement après la reconstruction?
  2. Combien de time dure l'amélioration (c'est-à-dire combien de time votre indice prend pour revenir à un état stable de fragmentation de 50% après une reconstruction.

Les index B-Tree sont conçus pour avoir une fragmentation / ballonnement / espace libre. Les index reviennent souvent rapidement à leur état stable de fragmentation. Ils agissent généralement décemment dans cet état ont tendance à vouloir revenir à l'état d'équilibre.