web-dev-qa-db-fra.com

Partitionner sur un seul groupe de fichiers

J'ai des tables très grandes dans ma base de données, mais une partie substantielle de ces données est "ancienne".

En raison de circonstances au-delà de mon contrôle, je ne suis pas autorisé à supprimer cette "vieille" données. L'autre limitation est que je ne peux pas modifier la base de données, ce qui signifie ajouter des groupes de fichiers. La façon dont les choses se présentent maintenant, tout réside sur le groupe de fichiers PRIMARY.

Je pensais à partitionner ces tables en quelques partitions, telles que "Nouveau", "Vieux", "Archivé" et similaire. J'ai une colonne "statut" que je voudrais utiliser à cette fin.

Compte tenu du scénario et des limitations décrites, je me demandais si le partitionnement a un sens ici. En d'autres termes, si ma table est partitionnée de cette manière, mais toutes les partitions sont assis sur le même groupe de fichiers, SQL Server sera suffisamment intelligente pour trouver cette zone spéciale dans le fichier sous-jacent où mes "nouvelles" données résident et ne touchent pas la zone avec "vieille" données?

Pour le dire différemment, si, disons, 80% de mes données sont "anciennes". SQL Server dispose-t-il d'un mécanisme permettant d'accéder à 100% des fichiers sous-jacents et d'accès à seulement 20% contenant des "nouvelles" données (en supposant, bien sûr, je spécifie ma colonne de partitionnement dans la clause WHERE des requêtes) .

Je suppose que vous devez répondre à cela, il faudrait comprendre comment le partitionnement est mis en œuvre en interne. J'apprécie tous les indicateurs.

10
Michael Neymit

Il y a deux avantages à partitionnement d'une table dans le même groupe de fichiers:

  1. Autoriser des portions d'un grand indice à reconstruire de manière incrémentielle, permettant une maintenance plus efficace. Revoir le ALTER INDEX [foo] REBUILD PARTITION=n Pour plus de détails.
  2. Tirer parti de la partition d'élimination et (éventuellement) Verrouillage de niveau de partition pour améliorer la maintenance de la requête. Je discute de cela sur mon blog .

Il y a plusieurs choses à garder à l'esprit si vous partitionnez.

  • Si votre table a un index en cluster (et cela devrait-il vraiment), votre clé de partitionnement doit faire partie de l'index en cluster.
  • Pour éviter les problèmes de performance, vous devriez aligner vos partitions. Cela signifie que tous vos index doivent inclure votre clé de partition, que ce soit comme une partie ou dans le cadre de l'index lui-même.
  • Les reconstructions de l'index des partitions sont hors ligne dans les versions actuelles de SQL Server (2005-2012). Si vos partitions sont grandes et votre reconstruction par la partition, cela pourrait entraîner une blocage de problèmes.

Je recommande de faire des recherches approfondies sur la partition avant de la mettre en œuvre. Kendra Little a une excellente liste de ressources où vous pouvez commencer.

6
Mike Fal