2010-03-26 7 views
1

J'ai une table qui a des millions d'enregistrements et nous cherchons à implémenter le partitionnement de table. En regardant cela, nous avons une clé étrangère "GroupID" que nous aimerions partitionner. Est-ce possible?Partitionnement de serveur SQL

Le groupe aura plus d'entrées ajoutées, alors que de nouveaux ID de groupe sont ajoutés, la partition peut-elle être dynamisée?

Répondre

1

Oui, vous pouvez utiliser le partitionnement, oui, de nouvelles partitions peuvent être créées dynamiquement. Il est plus facile d'utiliser un schéma de partitionnement qui n'a pas besoin d'être mis à jour.

SQL Enterprise 2005 & jusqu'à:

SQL 2005 et jusqu'à a un support intégré pour le partitionnement transparent si vous utilisez l'édition de développement SQL ou édition d'entreprise. L'ajout dynamique de plusieurs partitions signifie que vous devrez créer une nouvelle fonction de partitionnement, de nouveaux schémas de partition et probablement de nouveaux groupes de fichiers.

Vous pouvez modifier une fonction de partition à l'aide SPLIT:

ALTER PARTITION FUNCTION MyPartitionFunction() 
SPLIT RANGE (2); 

SQL 2000 ou SQL 2005 & en non-entreprise:

utiliser Sinon, vous pouvez toujours le partitionnement mais vous devez le faire l'ancienne façon MS SQL 2000. À l'ancienne, vous devez créer physiquement plusieurs tables, puis une vue qui est UNION ALL de chacune des tables. Donc, vous avez besoin de connaissances sur le schéma avant la main. La bonne nouvelle concernant l'ancien mode de partitionnement est qu'il est encore plus facile de créer de nouvelles partitions dynamiquement. Vous avez juste besoin de créer une nouvelle table avec une nouvelle contrainte et de mettre à jour votre vue.

Il existe cependant certaines limites, votre colonne de partitionnement doit faire partie de votre clé primaire. Pour insérer des insertions directement dans votre vue, vous n'avez PAS besoin d'une colonne Identité (incrémentée automatiquement par MS SQL)

+0

2005 Standard n'a pas intégré? –

+0

@durilai: C'est vrai, vous devrez utiliser l'ancien mode de partitionnement. L'entreprise est chère (pour les budgets de certaines personnes) et malheureusement, elle n'inclut pas le partitionnement en standard. –

+0

@durilai: J'ai ajouté quelques pièges plus communs sur l'ancien mode de partitionnement pour vous aussi. –

1

L'ID de groupe n'est peut-être pas le meilleur élément à partitionner, le partitionnement convient à un effet de fenêtre mobile et est conçu plus pour supprimer des données périmées et l'introduction de nouvelles données.

En groupant sur ID, vous vous autorisez uniquement à ajouter/supprimer des groupes, par ex. aucun élément de temps/longévité des données. Il y a aussi une limite dure de 1000 partitions par table parrtitionnée, vous limitant à 1000 groupes. Puisque vous avez l'intention d'ajouter des ID de groupe et qu'il n'est pas indiqué comme un nombre statique, vous risquez d'atteindre cette limite.

La seule option permettant d'étendre cette limite de 1000 consiste à placer une vue partitionnée sur plusieurs tables partitionnées.

La question que je voudrais poser est de savoir ce qui entraîne l'ajout de nouvelles données ou l'élimination de données plus anciennes et sur quelle base cela est-il effectué. Ce n'est pas parce que la table est composée de millions de lignes qu'elle est un candidat immédiat au partitionnement, et c'est pourquoi je poserais la question.

En termes de les ajouter dynamiquement - cette fonctionnalité n'existe pas, vous devez écrire les procédures stockées et la logique pour gérer l'allocation de nouveaux groupes de fichiers/ensemble suivant utilisé et la division de la fonction de partition. Cela peut être fait, mais SQL ne le fera pas pour vous.

+0

Comment partitionner sur des groupes, utilisez-vous toujours RANGE? –

+0

Vous pouvez partitionner sur un int, donc le partitionnement sur GroupID est bien, ce que vous devez vérifier est de savoir si vous aurez plus de 1000 groupes, à quel point vous commencez à faire des plages de sorte qu'il est 10 par partition, puis vous devez arrêter et demander - quel avantage en retire-t-on, l'élimination des partitions seulement - et vous n'avez pas de test instrumenté pour montrer que cela vous aidera - cela nuira à certaines requêtes. – Andrew

+0

Je suis d'accord. Nous en avons plus de 1000. Nous voulons partitionner les trois premiers groupes. –

Questions connexes