2010-11-25 6 views
0

Je vais probablement implémenter le partitionnement sur une énorme table (des milliards de lignes).Comment implémenter le partitionnement mod sur sql server 2008 r2?

Chaque ligne de table a un certain type d'état sur un périphérique particulier, qui est inséré de minute en minute. Par conséquent, il y aura 1440 (24 x 60) lignes par jour et par appareil. Chaque appareil a un identifiant unique (DeviceID).

Je pensais à la partition en utilisant DeviceID MOD {TheNumberOfPartitionsThatIwant}, je pense que TheNumberOfPartitionsThatIwant étant 250 est un bon compromis. En utilisant cette stratégie, je peux également distribuer les périphériques à travers les partitions, et aussi, lors d'une requête pour un périphérique particulier, le moteur de requête a juste besoin de toucher une partition, et pas toutes les 250 partitions. Le problème est que j'ai besoin d'ajouter une colonne supplémentaire à ma table, juste pour indiquer la partition à laquelle la ligne appartient, de sorte que je puisse définir la table sur un schéma de partition utilisant cette colonne. Il serait préférable de fournir (DeviceID MOD 250) au schéma de partition au lieu d'avoir cette colonne avec cette expression si simple. Y at-il une solution de contournement pour cela?

+0

J'ai vu sur votre [question] précédente (http://stackoverflow.com/questions/4249073/partitioning-for-query-performance-in-sql-server-2008) un commentaire que vous avez ** 2 ** disques. Utilisez 2 partitions .. non? Si vous voulez gérer ce type de volumes, vous ne faites pas de * du tout * sur le matériel. – gbn

+0

C'était juste une expérience. Dans la solution finale, nous utiliserons probablement une configuration DAS ou SAN. – gsb

+0

Quel est le but de votre stratégie de partitionnement? Est-ce pour atteindre l'élimination des partitions dans les requêtes, pour supporter les charges de données rapides ou pour permettre l'archivage sélectif des anciennes données? Vous pouvez partitionner sur une colonne calculée basée sur DeviceID pour créer 250 plages mais il n'est pas évident que ce serait une stratégie de partitionnement raisonnable, étant donné que toutes les partitions seraient probablement mises à jour chaque jour. Aussi, quelle est la taille attendue de la table en Mo/Go par jour? – sqlvogel

Répondre

2

Vous pouvez partitionner sur une colonne calculée liée à un schéma basée sur une fonction - cependant, pendant que cela fonctionne, les avantages vont être limités et je voudrais voir un test à l'échelle. Il exige également que chaque accès à cette table utilise la même fonction dans les critères where. Le point clé est fait par dportas - le partitionnement est conçu pour rendre le vieillissement des données une opération triviale, à un moment donné les données dans le système devront être purgées en raison d'être trop vieux/sans valeur, à quel point vous êtes réduit à des suppressions à long terme pour supprimer ces données.

En ce qui concerne la répartition des données sur plusieurs disques, le partitionnement n'offre rien de particulièrement significatif aux fonctions de groupes de fichiers/fichiers existants.

0

Une indexation appropriée vous donnera probablement de meilleurs résultats que le partitionnement. Comme le dit @Andrew, le partitionnement est principalement pour le chargement et le déchargement rapides des données (c'est-à-dire, la commutation des entrées et des sorties).

0

J'ai créé une colonne calculée, résout le problème.

Questions connexes