Partitionnement d`un data warehouse relationnel

publicité
Partitionnement d’un data warehouse relationnel
Les sections suivantes décrivent brièvement le concept de data warehouse relationnel, les avantages du
partitionnement de data warehouses relationnels, ainsi que les avantages de la migration vers le
partitionnement dans Microsoft SQL Server 2005.
À propos des data warehouses relationnels
Les data warehouses relationnels offrent une source de données et une infrastructure complètes pour le
développement de solutions d’analyse décisonnelle. En outre, les data warehouses relationnels sont
utilisés par les applications de création de rapports et les requêtes SQL ad hoc complexes.
Un data warehouse relationnel typique est constitué de tables de dimensions et de tables de faits. La
taille des tables de dimensions est généralement inférieure à celle des tables de faits ; les tables de
dimensions offrent des détails sur les attributs qui expliquent les faits. Article, magasin et heure sont des
exemples de dimensions. Les tables de faits représentent les enregistrements métier, tels que les
informations sur les ventes d’articles pour tous les magasins. Les tables de faits sont mises à jour
périodiquement avec les données collectées récemment.
Une implémentation réussie d’une solution de data warehouse relationnel implique une planification
soigneuse et à long terme. Voici quelques-uns des facteurs à prendre en considération lors du
développement d’un data warehouse relationnel :
•
•
•
•
•
•
•
Volume des données
Fenêtre de chargement des données
Fenêtre de maintenance des index
Caractéristiques de la charge de travail
Stratégie d’expiration des données
Stratégie d’archivage et de sauvegarde
Caractéristiques matérielles
Une étude détaillée de ces facteurs est fournie dans les sections suivantes de ce document.
Un data warehouse relationnel peut être implémenté à l’aide d’une approche par partition ou une
approche par table de faits monolithique (énorme). Le choix de conception entre ces deux approches
dépend en grande partie des facteurs détaillés plus haut dans ce document. Les data warehouses
relationnels peuvent tirer parti du partitionnement des données. La section suivante décrit les avantages
du partitionnement des data warehouses relationnels.
Avantages du partitionnement
À mesure que la taille des bases de données d’une organisation augmente, avec des volumes importants
de données, il est essentiel de maintenir la haute disponibilité tout en satisfaisant à la nécessité d'une
petite fenêtre de maintenance de la base de données. Cette exigence fait du partitionnement une
solution naturelle pour les bases de données très volumineuses. Le partitionnement répond à des
problèmes essentiels dans la prise en charge des tables très volumineuses en vous permettant de les
décomposer en partitions plus petites, ce qui facilite la gestion des facteurs tels que le chargement,
l’expiration et l’archivage des données. Microsoft SQL Server prend en charge le partitionnement des
données par l'intermédiaire de vues partitionnées dans SQL Server 7.0/2000, ainsi que la prise en charge
des tables partitionnées dans SQL Server 2005.
Partitionnement dans SQL Server 7.0/2000
SQL Server 7.0 a introduit la prise en charge du partitionnement par l'intermédiaire des vues
partitionnées. Dans SQL Server 2000, la fonctionnalité a été améliorée afin de prendre en charge les
vues partitionnées pouvant être mises à jour. Une vue partitionnée est particulièrement adaptée à un
data warehouse relationnel lorsque la table de faits peut être naturellement partitionnée ou divisée en
tables distinctes par plages de données. Les tables sous-jacentes de la vue partitionnée font l’objet d'une
UNION afin de présenter un ensemble de données unifié. Les vues partitionnées réduisent
considérablement la complexité des applications, car l’implémentation physique est déduite des
méthodes d’accès aux données par l’application.
Dans SQL Server 2000, les vues partitionnées peuvent être étendues afin d’inclure des vues
partitionnées distribuées, ce qui permet la fédération des bases de données sur plusieurs
serveurs/instances. L’étude des vues partitionnées distribuées sort du cadre de ce document. Pour une
étude détaillée, reportez-vous au document « Vues partitionnées distribuées » sur MSDN (Microsoft
Developer Network) à l’adresse http://www.microsoft.com/sql/evaluation/features/distpart.asp
.
Partitionnement dans SQL Server 2005
Le partitionnement de tables et d’index dans SQL Server 2005 limite la complexité liée à la gestion de
bases de données très volumineuses par l'intermédiaire de vues partitionnées. SQL Server 2005 permet
le partitionnement horizontal par plage avec la ligne de données comme plus petite unité de
partitionnement. Les objets pouvant être partitionnés sont les suivants :
•
•
•
Tables de base
Index (en cluster ou non)
Vues indexées
Les partitions par plage sont des partitions de table définies par des plages personnalisables de données.
L’utilisateur définit la fonction de partition avec des valeurs limites, un schéma de partition avec mise en
correspondance des groupes de fichiers, ainsi que des tables mises en correspondance avec le schéma de
partition. Une fonction de partition détermine à quelle partition appartient une ligne particulière d’une
table ou d’un index. Chaque partition définie par une fonction de partition est mise en correspondance
avec un emplacement de stockage (groupe de fichiers) via un schéma de partition. Pour une étude
complète de l’implémentation du partitionnement avec SQL Server 2005, reportez-vous à l’article
« Tables et index partitionnés dans SQL Server 2005 » sur MSDN.
La section suivante explique les avantages du partitionnement dans SQL Server 2005 et offre une
stratégie pour la migration vers les tables partitionnées SQL Server 2005.
Avantages du partitionnement dans SQL Server 2005
Le partitionnement de tables et d’index dans SQL Server 2005 facilite la gestion des bases de données
très volumineuses via la gestion étape par étape des partitions. Cette section décrit quelques-uns des
avantages des tables partitionnées par rapport aux vues partitionnées, s’agissant des data warehouses
relationnels.
Gestion
L’un des inconvénients de l’utilisation de vues partitionnées est que les opérations de base de données
doivent être effectuées sur des objets individuels plutôt que sur la vue proprement dite. Par exemple, si
l’index existant doit être supprimé et qu’un nouvel index doit être créé, l'opération doit être effectuée sur
chaque table sous-jacente.
Dans SQL Server 2005, les opérations de base de données telles que la maintenance des index sont
effectuées sur la table partitionnée proprement dite et non sur les partitions sous-jacentes, ce qui permet
de simplifier considérablement la gestion des index.
Mécanisme de parallélisme plus performant
Dans SQL Server 2000, les opérations sont effectuées sur des tables individuelles et les données sont
agrégées à un niveau de vue partitionnée. Les lignes des tables sous-jacentes sont collectées à l’aide de
l’opérateur de concaténation afin de représenter la vue. Des agrégations sont ensuite effectuées sur les
données résultantes.
Dans SQL Server 2005, les requêtes exécutées sur les tables partitionnées peuvent utiliser un nouvel
opérateur appelé parallélisme de demande. Le parallélisme de demande est influencé par les ressources
système et les paramètres MAXDOP.
Les requêtes qui utilisent des tables partitionnées sont compilées beaucoup plus rapidement que les
requêtes équivalentes utilisant des vues partitionnées. La durée de compilation des requêtes est
proportionnelle au nombre de partitions lors de l’utilisation de vues partitionnées, tandis que la
compilation n’est pas affectée par le nombre de partitions lors de l’utilisation de tables partitionnées.
Les requêtes sur des vues partitionnées peuvent présenter de meilleures performances dans certains cas,
par exemple :
•
La plus petite unité de parallélisme, lorsque le parallélisme de demande est choisi par l’optimiseur, est
une partition. Les performances des requêtes sur une partition unique dans une table partitionnée SQL
Server 2005 peuvent être dégradées en raison du fait que le degré de parallélisme est limité à un. La
même requête sur une vue partitionnée peut offrir de meilleures performances en raison d’un meilleur
parallélisme dans une partition.
•
Les vues partitionnées peuvent offrir de meilleures performances lorsque le nombre de partitions est
inférieur au nombre de processeurs, en raison d’une meilleure utilisation des processeurs disponibles
via le parallélisme. Lorsque le nombre de partitions est supérieur au nombre de processeurs, les
performances des requêtes sur les tables partitionnées peuvent s’en trouver dégradées si les données
ne sont pas réparties uniformément sur les partitions.
•
Les requêtes sur les vues partitionnées peuvent offrir de meilleures performances en cas de nonuniformité de la distribution des données sur les partitions.
Identification du parallélisme de demande dans un plan de requête
Voici un exemple de plan de requête généré à partir d'une requête d'agrégation additive.
La section encerclée en rouge indique la présence du parallélisme de demande dans le plan de requête.
L’enfant de gauche de l’opérateur de boucle imbriquée est représenté par les ID de partition. L’enfant de
droite de l’opérateur de boucle imbriquée est représenté par la table partitionnée proprement dite. Dans
cette illustration, pour chaque ID de partition renvoyé par l’enfant de gauche, un opérateur de recherche
d'index en parallèle génère une itération sur les lignes de la partition appropriée. Toutes les opérations
au-dessus de l’opérateur de boucle imbriquée sont également influencées par le nombre de threads
parallèles défini par le parallélisme de demande. L’enfant de gauche représente uniquement les ID de
partition affectés par la requête lorsque la sélection de partitions est effective par exemple lorsque la
requête filtre les résultats par partition.
Figure 1. Identification du parallélisme de demande
Voir l’image en taille réelle
Migration vers des tables/index partitionnés SQL Server 2005 à partir de vues
partitionnées SQL Server 2000
Une application existante basée sur des vues de tables monolithiques ou des vues partitionnées peut être
restructurée ou migrée vers une solution SQL Server 2005 basée sur le partitionnement. La décision de
restructurer ou de migrer l’application implique une analyse détaillée des exigences en termes de
performances, de gestion et de disponibilité.
Une procédure simple pour la migration de vues partitionnées SQL Server 2000 vers des tables
partitionnées SQL Server 2005 comporte les étapes suivantes :
•
Créez une fonction et un schéma de partition afin de déterminer les points limites et l’emplacement de
stockage physique de chaque partition. Les points limites doivent correspondre à ceux des tables
sous-jacentes de la vue partitionnée.
•
Créez une table partitionnée sur le schéma de partition nouvellement créé. La table doit spécifier la
•
Basculez les tables individuelles sous-jacentes des vues partitionnées dans chaque partition de la table
même structure physique, y compris les index, que les tables sous-jacentes de la vue partitionnée.
de faits partitionnée nouvellement créée. Les groupes de fichiers référencés dans le schéma de
partition doivent correspondre au groupe de fichiers de la table vers laquelle le basculement a lieu. En
outre, les tables à migrer doivent satisfaire aux exigences de l’instruction de basculement. Par
exemple, la table cible ne peut pas être un composant d’une vue avec liaison de schéma. Pour
connaître la liste des exigences de l’instruction de basculement, reportez-vous au document
« Transfert efficace de données avec le changement de partition » dans la documentation en ligne de
SQL Server 2005.
Haut de page
Facteurs qui influencent le partitionnement de data warehouses
relationnels
L’implémentation réussie d’un data warehouse relationnel partitionné implique la planification de la
croissance de la base de données et la simplicité de gestion. Les sections qui suivent expliquent les
facteurs qui influencent le partitionnement pour les data warehouses relationnels et apportent des détails
sur les implémentations de fenêtres glissantes.
Volume des données
Une approche partitionnée rend la gestion plus complexe sans apporter de réelle plus-value lorsque les
tables de faits sont plus petites. Cette taille est basée sur les caractéristiques de l’application et doit être
déterminée pour chaque implémentation. À titre d’information, plusieurs clients ont demandé que la taille
des tables de faits soit au moins égale à 100 Go avant toute implémentation du partitionnement.
Chargement des données
Le chargement des données fait partie intégrante d’un data warehouse. Presque tous les data
warehouses sont périodiquement alimentés avec les données collectées récemment. La gestion réussie
d’un data warehouse dépend de l’efficacité du processus de chargement en masse, au cours duquel les
données existantes doivent continuer d’être disponibles.
Il existe deux options pour la création de votre table de faits :
•
•
Créez une table monolithique unique, ou
Utilisez une approche par partition
L’approche par table monolithique entraîne une disponibilité inférieure par rapport à l’approche par
partition, en raison du chargement incrémentiel en masse effectué dans les environnements de data
warehouse typiques. Par exemple, le chargement incrémentiel en masse peut largement tirer parti d'un
verrou de table sur la table cible. Avec une table unique, aucun utilisateur ne pourra plus accéder à la
table au cours du chargement des données. La solution optimale consiste à planifier la fenêtre de
maintenance pour le chargement incrémentiel des données. Pour une étude complète du chargement en
masse avec l'approche par table monolithique, consultez l'article « Étude de cas d’un chargement en
masse incrémentiel dans SQL Server 2000 » à l’adresse
http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/incbulkload.mspx
.
L’approche par partition implique le chargement en masse des données dans des tables intermédiaires
individuelles, chacune représentant une plage de partitions déterminée. La table intermédiaire est
ensuite ajoutée à la vue partitionnée ou basculée dans la table partitionnée en tant que nouvelle
partition. Étant donné que chaque partition est logiquement représentée par une table intermédiaire
individuelle, les chargements en masse incrémentiels n’affectent pas la disponibilité et les performances
des requêtes sur les données existantes.
Une solution de data warehouse typique inclut la transformation des données en parallèle de leur
chargement en masse. La transformation inclut le nettoyage et/ou l'agrégation des données source afin
d'alimenter le data warehouse de destination.
Une transformation est généralement effectuée à l’aide d’outils tels que Microsoft System Integration
Services. Les clients peuvent choisir d’utiliser SELECT/INTO pour exécuter cette transformation si le
processus ne nécessite pas de workflow complexe.
Indexation
Après le chargement des données dans un data warehouse relationnel, il est courant de créer des index
afin de prendre en charge les requêtes utilisateur. La création et la maintenance des index jouent un rôle
fondamental dans l’architecture des data warehouses relationnels.
Les performances des requêtes sur les tables de faits sont généralement moins bonnes en l’absence
d’index. Pour une table de faits monolithique, une solution optimale peut consister à supprimer tous les
index, à charger les données et à recréer les index. Cette approche entraîne la réduction de la
disponibilité et une fenêtre de maintenance plus importante à mesure que la taille de la table
monolithique augmente, ce qui la rend peu commode dans certains cas.
Les vues partitionnées résolvent ce problème de manière efficace dans SQL Server 2000, car les index
sont créés sur les tables sous-jacentes. SQL Server 2005 prend en charge la recréation et la
réorganisation des index sur les partitions individuelles, ce qui facilite la gestion des index partitionnés.
Expiration des données
Les données anciennes font l’objet d’accès moins fréquents que les données plus récentes. Les lois et
réglementations imposent aux entreprises de conserver les données expirées en ligne en vue d'un accès
immédiat. Il est par conséquent essentiel qu’une entreprise gère efficacement les données anciennes,
tout en préservant la haute disponibilité des données existantes et en facilitant le chargement plus rapide
des nouvelles données. L’expiration des données peut être gérée efficacement via une fenêtre glissante.
Si les données sont partitionnées, l’implémentation d’une fenêtre glissante est possible. Pour plus
d’informations, reportez-vous à la section « Implémentation de fenêtres glissantes » plus loin dans ce
document.
Archivage des données
L’implémentation réussie d’un data warehouse de plusieurs téraoctets ne se borne pas à la création d’un
système performant et linéairement évolutif. Il est également nécessaire de garantir la disponibilité
élevée du système.
Si les données sont partitionnées, une sauvegarde étape par étape peut être implémentée dans
SQL Server. Les opérations de sauvegarde et de restauration étape par étape dans SQL Server offrent
davantage de flexibilité pour la gestion des partitions. Les opérations étape par étape impliquent que les
partitions individuelles, lorsqu’elles sont confinées dans leurs propres groupes de fichiers, peuvent être
sauvegardées et restaurées individuellement sans affecter la base de données entière. Le groupe de
fichiers doit être en mode lecture seule pour que la sauvegarde étape par étape fonctionne dans un
modèle de récupération simple. Dans le cas du modèle de récupération en masse ou du modèle de
récupération complète, il est nécessaire de sauvegarder les journaux de transactions. Cela est essentiel
pour la réussite de la restauration des groupes de fichiers. Pour plus d’informations sur ces restrictions,
reportez-vous à la section « Sauvegarde (Transact-SQL) » dans la documentation en ligne de SQL
Server.
Performances des requêtes
Les requêtes ad hoc font partie intégrante des solutions de data warehouse relationnel. Les
caractéristiques de l’application et la nature des requêtes qui en résultent influencent de manière
importante le partitionnement des data warehouses relationnels. Par exemple, si les requêtes comportent
une clé de filtrage correspondant à la clé de partitionnement, le temps de réponse sera inférieur comparé
à la même requête sur une table monolithique. Cela tient au fait que l’utilisation du partitionnement
encourage l’utilisation d’opérations en parallèle et que la clé de partitionnement dans le prédicat de
requête facilite la sélection des données.
Haut de page
Implémentation de fenêtres glissantes
Les fenêtres glissantes sont l’un des principaux facteurs qui influencent le partitionnement des data
warehouses relationnels, ce qui explique que nous consacrons une section distincte à leur
implémentation.
Le scénario de fenêtre glissante implique l’intégration de nouvelles partitions et l’exclusion des partitions
ayant expiré de la table ou vue partitionnée. Les nouvelles données peuvent être interrogées par les
utilisateurs alors que les données anciennes sont archivées. L’essentiel est de réduire la durée de
l’indisponibilité lors du déplacement des partitions.
Les données ayant expiré peuvent être archivées et extraites lorsque cela s’avère nécessaire via la
restauration des sauvegardes appropriées, ou elles peuvent être déplacées vers un sous-système d’E/S
moins permanent et plus abordable, toujours disponible pour l’interrogation des utilisateurs.
L’illustration suivante représente l'implémentation d'une fenêtre glissante dans notre scénario de test.
Dans ce scénario, le client collecte les données des ventes auprès des magasins de tout le pays. Les
données sont chargées, nettoyées et agrégées afin de prendre en charge les décisions métier. Dans
notre scénario test, une partition représente logiquement une semaine de données. Actuellement, huit
semaines de données sont identifiées comme actives. Les données actives sont interrogées beaucoup
plus fréquemment que les données anciennes. À mesure que de nouvelles données sont incluses, les
données anciennes sont extraites. Il existe une règle qui stipule que les données anciennes doivent
rester en ligne mais être stockées sur un sous-système d’E/S peu coûteux.
Figure 2. Scénario de fenêtre glissante
Voir l’image en taille réelle
Dans SQL Server 2000, les fenêtres glissantes peuvent être implémentées à l’aide de vues partitionnées.
L’inconvénient est que la vue partitionnée doit être reliée afin d’inclure les données nouvellement
intégrées à la vue UNION. La reliaison nécessite un verrou sur les métadonnées et peut être bloquée par
tout accès à la vue existante ou aux tables sous-jacentes.
SQL Server 2005 facilite une meilleure implémentation du scénario de fenêtre glissante en prenant en
charge l’inclusion et l’exclusion de partitions via des instructions Transact-SQL. Le changement de
partition nécessite un verrou de schéma sur la table partitionnée. Les partitions peuvent être incluses et
exclues lorsque aucun autre processus n’a acquis de verrou au niveau table sur la table partitionnée. Si
les partitions sont utilisées par d'autres processus ou si un verrou au niveau table a été acquis par
d'autres processus sur la table partitionnée, l'instruction permettant le changement des partitions attend
jusqu'à la libération du verrou par d'autres processus. Le changement de partition est une opération de
métadonnées qui est très rapide.
La procédure suivante peut être utilisée pour implémenter un scénario de fenêtre glissante dans SQL
Server 2005 à l’aide de tables partitionnées :
•
Créez la fonction de partition, le schéma et la table avec les points limites et les groupes de fichiers
•
•
•
Créez les tables représentant les partitions individuelles.
appropriés. Procédez ensuite au chargement initial décrit dans les quatre étapes qui suivent.
Alimentez les tables individuellement.
Ajoutez des contraintes de vérification aux tables afin de lier la valeur des données aux plages
correspondantes et créez les index appropriés. SQL Server 2005 offre une option supplémentaire
permettant de créer l’index initial après la création de la table partitionnée.
•
•
Déplacez les tables nouvellement alimentées dans chaque partition de la table partitionnée.
Après les chargements initiaux, toute nouvelle donnée est chargée et transformée dans une table ne
faisant pas partie de cette table partitionnée. Lorsque les données sont prêtes, la table est transférée
dans la table partitionnée après la manipulation des points limites appropriés.
•
De la même façon, les données anciennes peuvent être déplacées vers un sous-système d’E/S moins
coûteux, tout en restant disponibles en ligne.
La section suivante traite des méthodes recommandées pour le fractionnement de la table partitionnée et
le changement de partitions dans la table partitionnée.
Méthodes recommandées pour le changement de partitions
Le scénario de fenêtre glissante fonctionne uniquement lorsque la table ou partition cible est vide. Par
exemple, si une partition P appartenant à la table partitionnée PT doit être sortie vers la table T, la table
cible T doit être vide. De la même façon, lors du transfert de la table T dans la partition P de la table
partitionnée PT, la partition cible P doit être vide.
Le scénario de fenêtre glissante fonctionne le mieux lorsque les déplacements de données entre
partitions est limité. Le code suivant définit la fonction de partition et le schéma de partition. Lorsqu’une
table est créée sur ce schéma de partition, la table partitionnée comporte trois partitions. La première
partition contient les données avec les valeurs de clé <=200401, la deuxième avec les valeurs de clé
>200401 et <=200403, la troisième avec les valeurs de clé >200403.
CREATE PARTITION FUNCTION SALES_MONTHLY_PARTITION_FUNCTION (INT)
AS RANGE LEFT FOR VALUES ( 200401, 200403 )
GO
CREATE PARTITION SCHEME SALES_MONTHLY_PARTITION_SCHEME AS
PARTITION SALES_MONTHLY_PARTITION_FUNCTION ALL TO ([PRIMARY])
GO
CREATE TABLE t
(
col1 INT
)ON SALES_MONTHLY_PARTITION_SCHEME(col1)
GO
Lorsqu’une nouvelle limite avec une valeur de 200402 est ajoutée à l’aide de la fonctionnalité de
fractionnement de la fonction ALTER PARTITION, les lignes sont déplacées entre les partitions
appropriées.
ALTER PARTITION FUNCTION PARTITION_FUNCTION()
SPLIT RANGE (200402)
GO
Les lignes sont déplacées entre les partitions via la suppression des lignes à la position d’origine, et
l’insertion des lignes à la nouvelle position. Les partitions impliquées dans ce transfert sont inaccessibles
au cours de cette période. Dans cet exemple, la nouvelle deuxième partition contient les données avec
les valeurs de clé >200401 et <=200402. Les données avec les valeurs de clé appropriées sont
supprimées de la deuxième partition et insérées dans la nouvelle partition. La nouvelle partition
(>200401 et <=200402) et la troisième partition (>200402 et <=200403) sont inaccessibles au cours
de cette période.
Dans notre exemple de scénario, les nouvelles données sont ajoutées en fractionnant la fonction de
partition à l’extrémité active. Les anciennes données sont supprimées par fusion de la fonction de
partition à l’extrémité ancienne. Cet exercice, pour l’implémentation d’une fenêtre glissante, supprime le
déplacement de données entre les partitions lors de l’exclusion ou de l'inclusion de partitions par
exemple, les nouvelles données sont chargées en masse dans une table, puis transférées vers la nouvelle
table partitionnée via son fractionnement à l’extrémité active, de la façon suivante :
ALTER TABLE NEW_PARTITION SWITCH TO PARTITIONED_TABLE
PARTITION $partition.WEEK_PARTITION_FUNCTION (200404)
GO
Pour plus d’informations, reportez-vous au document « Conception de partitions pour gérer des sousensembles de données » dans la documentation SQL Server en ligne.
Techniques pour l’archivage des données vers un sous-système d’E/S peu coûteux
Une implémentation de fenêtres glissantes peut être étendue en faisant glisser les données anciennes
vers un sous-système d’E/S peu coûteux. Par exemple, dans notre scénario de test, nous transférons les
données anciennes d'un sous-système d'E/S très performant vers un sous-système d’E/S moins coûteux
et ne présentant pas les mêmes performances élevées. Cette implémentation particulière des fenêtres
glissantes ne peut pas être effectuée avec l’opération de sauvegarde et de restauration disponible dans
SQL Server. Il existe différentes méthodes alternatives pour implémenter une telle stratégie :
•
Si les fichiers source sont disponibles, chargez les données dans une autre table qui réside sur le soussystème d’E/S moins coûteux. Reconstruisez les index. Supprimez l’ancienne partition et ajoutez la
table nouvellement chargée dans la table partitionnée. Le temps d’indisponibilité correspond au temps
nécessaire pour changer de partition, lequel est relativement négligeable, quelle que soit la taille de
l’ensemble de données.
•
Si le processus de chargement implique une transformation, il serait efficace de créer la nouvelle table
sur le sous-système d’E/S moins coûteux en utilisant une requête SELECT/INTO afin d’alimenter les
données à partir de la partition ancienne et de recréer les index. Le temps d’indisponibilité est le
temps nécessaire au changement de partition.
Haut de page
Stratégies pour le partitionnement de data warehouses relationnels
La section suivante décrit deux stratégies importantes pour le partitionnement d'un data warehouse
relationnel. Cette section sera suivie d’une étude de la façon dont les stratégies affectent les facteurs qui
influencent le partitionnement.
Stratégie I : lier une partition à son propre groupe de fichiers
Une partition peut être liée de façon logique à un groupe de fichiers, de la façon suivante :
•
Créez la base de données avec plusieurs groupes de fichiers. Chaque groupe de fichiers représente
•
Chaque groupe de fichiers comporte un fichier. Les groupes de fichiers peuvent contenir un ou
•
Créez la fonction de partition et mettez en correspondance les points limites avec les groupes de
logiquement une partition.
plusieurs fichiers physiques créés à partir d’un ou plusieurs volumes logiques/disques physiques.
fichiers appropriés à l’aide de schémas de partition pour créer une corrélation un à un entre le groupe
de fichiers et la partition.
Pour un exemple de code illustrant l’implémentation du partitionnement basé sur cette stratégie,
reportez-vous à l’annexe D.
Figure 3. Partition mise en correspondance avec son propre groupe de fichiers
Voir l’image en taille réelle
Stratégie II : lier plusieurs partitions au même groupe de fichiers
La deuxième stratégie consiste à mettre en correspondance plusieurs partitions avec le même groupe de
fichiers. Le groupe de fichiers peut être constitué d’un ou plusieurs fichiers physiques répartis sur un ou
plusieurs volumes logiques/disques physiques. Pour un exemple de code qui implémente le
partitionnement basé sur cette stratégie, reportez-vous à l’annexe D.
Figure 4. Plusieurs partitions mises en correspondance avec le même groupe de fichiers
Voir l’image en taille réelle
Quelle solution est préférable ?
Le partitionnement peut être implémenté à l’aide de l’une de ces deux stratégies, ou avec une
combinaison des deux. La stratégie I et la stratégie II sont reprises dans le tableau suivant, lequel
explique leur impact sur les facteurs qui influencent le partitionnement pour les data warehouses
relationnels.
Stratégie I
Stratégie II
Stratégie I
Chargement des
données
•
Les groupes de fichiers ne peuvent pas
être spécifiés de manière explicite dans
Stratégie II
•
effectuées en parallèle, dans la mesure
l’instruction SQL SELECT/INTO. En
où toutes les partitions sont mises en
raison de cette limitation, les
correspondance avec le même groupe
transformations initiales ne peuvent
de fichiers.
pas être effectuées en parallèle lors de
l’utilisation d’une instruction
•
SELECT/INTO.
•
Les transformations peuvent être
Les chargements de données
incrémentiels ne sont pas affectés par
la stratégie de partitionnement.
Les chargements de données
incrémentiels ne sont pas affectés par
la stratégie de partitionnement.
Sauvegarde/
Restauration
•
•
La création d’une relation un à un entre
le groupe de fichiers et la partition
•
Si toutes les partitions sont mises en
correspondance avec les mêmes
permet les opérations de sauvegarde et
groupes de fichiers, la table
de restauration étape par étape au
partitionnée dans son ensemble peut
niveau partition.
être sauvegardée et restaurée à l’aide
Assurez-vous que les partitions sont
d’une commande unique.
marquées en lecture seule avant la
sauvegarde de la base de données. Si
•
Cette solution n’offre pas la souplesse
de la sauvegarde étape par étape au
tel n’est pas le cas, les journaux de
niveau de granularité de partition
transactions doivent être appliqués lors
individuelle.
de la restauration de la base de
données.
Performances des
requêtes
•
Si les groupes de fichiers contiennent
un seul fichier et que les tables sont
Si les groupes de fichiers sont
constitués de plusieurs fichiers,
alimentées en série l'une après l'autre,
SQL Server utilise l’alimentation
l'allocation des extents pour ces objets
proportionnelle, ce qui entraîne la
est contiguë. Cela implique que
fragmentation des extents.
SQL Server puisse exécuter jusqu’à
256 ko d’E/S (4 extents) pour une
•
•
•
De la même façon, rien ne garantit que
les extents alloués pour les
analyse séquentielle.
objets/partitions ne seront contigus au
Cela favorise les charges impliquant de
cours des opérations en parallèle, telles
nombreuses analyses séquentielles, car
que le chargement de données en
les données sont contiguës.
parallèle.
•
SQL Server ne peut exécuter qu’un
maximum de 64 ko d’E/S (1 extent)
pour l’analyse séquentielle lorsque les
extents alloués pour les objets ne sont
pas contigus.
•
Cela favorise les charges comportant
un grand nombre d’E/S aléatoires
simultanées, car les données sont
réparties sur de nombreux disques
physiques.
Il est également possible de démarrer
SQL Server avec le commutateur -E.
Dans ce cas, SQL Server peut allouer
Stratégie I
Stratégie II
4 extents au lieu d’un seul. Par
conséquent, le commutateur -E permet à
SQL Server d’exécuter 256 ko d’E/S
même s’il existe une fragmentation des
extents en raison du remplissage
proportionnel.
Haut de page
Conclusion
Ce livre blanc a étudié les facteurs qui influencent le partitionnement et a comparé les avantages et les
inconvénients de deux stratégies essentielles pour la conception de partitions. Les informations
présentées doivent vous aider à gérer plus efficacement vos data warehouses relationnels via le
partitionnement.
Haut de page
Pour plus d'informations
Ce document décrit des fonctionnalités spécifiques de SQL Server 2005 concernant le partitionnement de
data warehouses relationnels. Pour plus d'informations :
•
La documentation SQL Server 2005 en ligne offre une multitude d’informations sur ce sujet et
constitue un bon point de départ pour l’implémentation du partitionnement des données à l’aide de
SQL Server 2005.
•
Site Web CLARiiON CX600 : http://www.emc.com/products/systems/clariion_cx246.jsp
Haut de page
Annexe A : Performances
Toutes les valeurs indiquées dans cette section ont été observées au cours de nos tests avec SQL
Server 2005. Les tests ont été réalisés sur les plates-formes matérielles décrites dans les annexes B, C
et D.
Performances d’insertion en masse
Au cours de nos tests, nous avons pu chargé 2,5 milliards de lignes en un peu moins d’une heure dans
SQL Server 2005. Le schéma de la table de faits contient neuf colonnes d’entiers, une colonne dateheure et une colonne de type caractère.
Les performances représentées ici ont été capturées lorsque tous les threads s’exécutaient en parallèle et
le schéma de partitionnement était basé sur la stratégie I.
Nombre de threads en parallèle
8
Durée d’exécution (tous les threads en cours
52 minutes
d’exécution)
Utilisation des processeurs (sur 8 processeurs)
88 %
Nombre de lignes insérées
2550835652
Débit de copie en masse/seconde
44,77 Mo/seconde
Lignes de copie en masse/seconde
6,53,339
Débit du disque
41,17 Mo/seconde sur 8 LUN sur
CLARiiON
Les performances représentées ici ont été capturées lorsque tous les threads s’exécutaient en parallèle et
le schéma de partitionnement était basé sur la stratégie II.
Nombre de threads en parallèle
8
Durée d’exécution (tous les threads en cours
52 minutes
d’exécution)
Utilisation des processeurs (sur 8 processeurs)
92,625 %
Nombre de threads en parallèle
8
Nombre de lignes insérées
2,550,835,652
Débit de copie en masse/seconde
46,42 Mo/seconde
Lignes de copie en masse/seconde
677285
Débit du disque
44,29 Mo/seconde sur 8 LUN sur
CLARiiON
La stratégie choisie pour le partitionnement du data warehouse n’a pas affecté le débit de chargement en
masse.
Performances de transformation
Dans nos tests, le processus de chargement en masse a été suivi d’un processus de transformation. Le
processus de transformation impliquait de joindre les données source avec les tables de dimensions afin
d’alimenter le data warehouse de destination avec les valeurs des clés de dimension extraites. Voici un
exemple du code utilisé dans notre scénario de test :
SELECT fact.fact_data_1,
...
sdim.store_key, pdim.product_key, tdim.time_key
INTO sales_transformed
FROM
sales fact,
stores sdim,
products pdim,
time tdim
WHERE fact.store_id = sdim.store_id
AND convert(bigint, (fact.system + fact.generation +
fact.vendor + fact.product)) = pdim.productid
AND fact.weekid = tdim.weekid
La requête de transformation a été exécutée à la suite, une requête immédiatement après l’autre, de
sorte à préserver le schéma de partitionnement défini dans la stratégie I.
Nombre de threads en parallèle
1
Temps d’exécution
Environ 1 heure 13 minutes pour chaque
transformation
Utilisation du processeur (sur 1 processeur)
100 %
Nombre de lignes transformées (chaque
Environ 300 millions de lignes
transformation)
Débit de lecture du disque
3,5 Mo/seconde sur 1 LUN sur CLARiiON (lecture
256 ko)
Débit d’écriture sur disque
2,8 Mo/seconde sur 1 LUN sur CLARiiON (écriture
128 ko)
Voici les valeurs de performance d’un schéma de partitionnement basé sur la stratégie II lorsque tous les
threads s’exécutaient en parallèle.
Nombre de threads en parallèle
8
Nombre de threads en parallèle
8
Temps d’exécution
1 heure 9 minutes
Utilisation des processeurs (sur 8 processeurs)99 %
Nombre de lignes transformées (total)
2,478,765,081
Débit de lecture du disque
33,10 Mo/seconde sur 10 LUN sur CLARiiON
Débit d’écriture sur disque
26,66 Mo/seconde sur 10 LUN sur CLARiiON
Performances de la création d’index
Dans nos tests, nous avons pu créer un index en cluster sur trois colonnes d’entiers (clés de dimension)
sur huit partitions avec 2,5 millions de lignes en deux heures. L’option SORT_IN_TEMPDB permet
l’utilisation de tempdb pour le tri des données. Cette option a été utilisée au cours de ce test pour isoler
les disques physiques utilisés pour les lectures et écritures au cours de la création de l’index. Lorsque
l’option "sort_in_tempdb" est activée, tempdb doit disposer de suffisamment d’espace disque libre pour
contenir la taille de l’index entier au cours de la création d’index hors ligne. Lorsque le tri est effectué
dans une base de données utilisateur, chaque groupe de fichiers/partition doit comporter suffisamment
d’espace disque libre pour contenir les partitions appropriées.
Dans notre scénario et notre conception, chaque partition représente logiquement une semaine de
données avec une valeur de clé identique pour toutes les lignes d’une partition donnée. Le degré
maximum de parallélisme pour chaque création d'index individuelle est seulement de 1, car le nombre de
valeurs de clé distinctes est de 1. Par conséquent, l'index initial est créé après la table partitionnée dans
SQL Server 2005, afin de mieux utiliser les processeurs disponibles pour la création initiale de l’index.
Nombre de threads en parallèle 8
Temps d’exécution
2 heures
Utilisation du processeur
86 %
Nombre de lignes
2,478,765,081
Performances de sauvegarde de base de données
Dans nos tests, nous avons sauvegardé la partition active sur quatre LUN RAID 3 sur EMC CLARiiON en
un peu plus d’une heure. La partition active était répartie sur huit LUN sur un ensemble RAID 5 (4+1
10 000 tpm) EMC CLARiiON. Le périphérique cible était un ensemble RAID 3 (4+1, 5 000 tpm ATA)
CLARiiON.
Temps d’exécution
1 heure 20 minutes
Nombre de pages (8 ko) sauvegardées
30,518,330
Débit de sauvegarde/restauration par seconde50,15 Mo/seconde
Transfert des données anciennes vers les disques ATA
Le transfert des données anciennes vers les disques ATA implique le chargement en masse de données à
l’aide de l’instruction SELECT/INTO. Voici un exemple de code utilisé pour implémenter la fenêtre
glissante.
ALTER DATABASE [Customer]
ADD FILEGROUP [ARCHIVE_1]
GO
ALTER DATABASE [Customer]
ADD FILE (NAME = N'ARCHIVE_1', FILENAME =
N'F:\ATA\RAID5\2\ARCHIVE_PARTITION_1.NDF',
SIZE = 100GB, FILEGROWTH = 0)
TO FILEGROUP [ARCHIVE_1]
GO
ALTER DATABASE Customer MODIFY FILEGROUP [ARCHIVE_1] DEFAULT
GO
SELECT * INTO iri..Sales_129_ARCHIVE
FROM VISF
WHERE TIME_KEY = 129
OPTION (MAXDOP 1)
Un index en cluster identique à l’index en cluster sur la table partitionnée existante doit être créé sur la
nouvelle table afin de permettre le transfert ultérieur vers la table partitionnée. Dans nos tests, nous
avons utilisé SELECT/INTO pour transférer la première partition ayant expiré avec 279 millions de lignes
vers un ensemble de disques ATA en moins de 20 minutes. La création de l’index en cluster sur la même
table a été effectuée en moins de 40 minutes.
Haut de page
Annexe B : détail des plates-formes
Les composants matériels et logiciels suivants ont été utilisés pour les tests décrits dans ce document :
Logiciels Microsoft
Microsoft Windows Server 2003 Datacenter Edition Build 3790
Microsoft SQL Server 2005 bêta 2
Plate-forme serveur
Unisys ES7000 Orion 130 64 bits
16 processeurs Itanium 2 1,30 GHz avec 3 Mo de cache
64 Go de RAM
Stockage
EMC Symmetrix 5.5
96 disques de 72 Go 10 000 tpm avec 16 Go de cache lecture/écriture
EMC CLARiiON FC4700
155 disques de 133,680 Go 10 000 tpm avec 16 Go de cache lecture/écriture
30 disques de 344 Go 5 000 tpm (ATA)
Adaptateur de bus hôte
8 adaptateurs de bus hôte Emulex LP9002L 2 Go/seconde Fibre Channel
Tous les adaptateurs mis en correspondance avec l'ensemble de stockage CLARiiON faisaient l’objet d’un
équilibrage de charge avec le logiciel Powerpath
Logiciel de gestion du stockage
EMC Powerpath v 3.0.5
Haut de page
Annexe C : architecture du serveur
Nous avons utilisé un serveur Unisys ES7000 Orion 130 pour nos tests. Il est important de comprendre
l’architecture du serveur, car il s’agit d’un des facteurs qui déterminent le débit théorique de votre
système. Par exemple, un bus PCI 100 MHz peut offrir un débit de 800 Mbits/seconde. Cette annexe
illustre brièvement l’architecture ES7000 Orion.
Le serveur d'entreprise ES7000 Orion 130 est un système modulaire monté en rack, basé sur un chipset
Intel et des processeurs de la gamme Intel Itanium 2.
Le serveur Orion utilisé au cours des tests a été configuré avec 2 modules serveur, 16 processeurs et
64 Go de mémoire. Chaque module serveur comporte un module IOHM (Input/Output Hub Module).
Chaque IOHM contrôle un sous-système d’E/S constitué de quatre PCIAM (PCI Adapter Module). Chaque
PCIAM comporte 2 bus, desservant chacun 2 logements pour carte PCI. Les cartes PCI sont prises en
charge jusqu’à 100 MHz sur chaque bus.
Les logements mis en surbrillance sont actuellement configurés. Le logement 2 sur BUS 0-0 et BUS 0-1
sur PCIAM 0-0/IOHM-0 sont configurés pour les disques SCSI locaux et la carte réseau, ce qui laisse
16 logements libres. Huit d’entre eux sont mis en correspondance avec l’ensemble de stockage CLARiiON
avec le logiciel Powerpath.
Figure 5. Configuration d’E/S du serveur CASSIN utilisé pour ce scénario
Voir l’image en taille réelle
Haut de page
Annexe D : stockage EMC CLARiiON
Nous avons utilisé un ensemble de stockage CLARiiON CX600 pour nos tests. Cette annexe décrit la
configuration de l’ensemble de stockage utilisé.
L’ensemble de stockage CLARiiON est constitué d’un ensemble de tiroirs ou logements. Chaque tiroir
peut recevoir jusqu'à 15 disques. Un certain nombre de disques dans les tiroirs sont regroupés afin de
constituer un groupe RAID. Le LUN (Logical Unit Number) créé à partir du groupe RAID est exposé au
système d'exploitation Microsoft Windows. Si la capacité de stockage doit être augmentée par la suite,
des disques peuvent être ajoutés aux tiroirs de stockage et constitués en groupes RAID. Les groupes
RAID nouvellement créés peuvent être joints à n'importe quel groupe RAID existant, constituant un
méta-LUN exposé au système d'exploitation Windows. Le méta-LUN conserve le numéro de LUN du LUN
source. Le modèle dans lequel ces disques physiques sont regroupés en groupes RAID n’affecte pas les
performances, car la conception des ensembles de stockage CLARiiON équilibre la charge sur les tiroirs et
les disques physiques.
L’ensemble de stockage EMC CLARiiON utilisé pour nos tests comporte un mélange de configurations
RAID 1+0, RAID 5 et RAID 3. RAID 1+0 est utilisé pour les fichiers journaux de base de données et RAID
5 est utilisé pour les fichiers de données. RAID 3 a été utilisé pour sauvegarder et restaurer les partitions
de base de données. Les disques physiques 10 000 tpm présentent une taille de 133 Go, tandis que ceux
à 5 000 tpm présentent une taille de 344 Go.
Notre configuration de stockage comprenait cinq LUN RAID 1 + 0. Les LUN sont issus d’un groupe RAID
constitué de huit disques physiques. Dans la mesure où les disques sont mis en miroir et en bande, la
capacité de chacun de ces LUN est d’environ 500 Go ((8*133,680 Go)/2). Deux de ces LUN RAID 1+0
ont été utilisés pour notre fichier journal de base de données.
Douze LUN RAID 5 ont été utilisés pour les fichiers de données. Cinq LUN RAID 5 ont été utilisés pour
tempdb. Chacun de ces LUN présentait une capacité approximative de 500 Go. Chaque LUN est issu
d’un groupe RAID. La configuration RAID 5 est composée de moins de disques que les groupes RAID 1 +
0. Les groupes RAID 5 sont composés de cinq disques de 133 Go.
Voici une illustration des groupes RAID et disques organisés dans un ensemble de stockage CLARiiON.
Trois disques physiques du tiroir 2 et deux disques physiques du tiroir 1 sont regroupés dans un groupe
RAID. Le groupe RAID suivant est constitué par alternance du nombre de disques de chaque tiroir. Les
disques physiques sont entrelacés entre les tiroirs, ce qui permet de cantonner les défaillances au niveau
tiroir.
Figure 6. Configuration CLARiiON RAID 3/5 et des groupes RAID
Topologie
Pour nos tests, nous avons utilisé la technologie Fibre Channel et nous avons implémenté une topologie
standard de type « switched fabric ». Le canal fabric faisait l’objet d’une zone logicielle avec le nom WWN
(World Wide Name) des adaptateurs Fibre HBA (Host Bus Adapters) au niveau switch. Les LUN étaient
tous masqués afin d’être visibles pour le serveur hôte au niveau du contrôleur de stockage pour ce
scénario de test.
La figure 7 illustre la mise en correspondance entre le HBA, le port de stockage et les LUN. Dans la
mesure où les volumes logiques étaient directement mis en correspondance avec un LUN unique dans
notre scénario de test, l’illustration peut être considérée comme une mise en correspondance avec un
volume logique.
Le logiciel multichemin EMC Powerpath a été utilisé pour l’équilibrage de la charge des E/S entre tous les
LUN sur l’ensemble de stockage CLARiiON. Huit des HBA Emulex ont fait l’objet de zones afin de voir tous
les LUN issus de l’ensemble de stockage CLARiiON. Pour plus d’informations sur l’installation de HBA
Emulex avec le stockage EMC, consultez le site http://www.emulex.com/ts/docoem/framemc.htm
Figure 7. Mise en correspondance HBA - port de stockage - volume
Voir l’image en taille réelle
Haut de page
Annexe E : Isolation du stockage
.
L’isolation du stockage joue un rôle significatif dans les environnements des réseaux de stockage, en
particulier lorsque les données sont partagées entre une ou plusieurs applications. Cette annexe décrit
certaines considérations relatives à l’isolation du stockage lors du partitionnement de votre data
warehouse relationnel. L’exemple de cette annexe met en évidence l’ensemble de stockage EMC
Symmetrix utilisé lors de nos tests initiaux.
Le volume logique peut être créé à partir de plusieurs disques physiques. De la même façon, plusieurs
volumes logiques peuvent être créés à partir du même disque physique. Dans certains cas, plusieurs
volumes logiques peuvent être créés à partir d’un ensemble de disques physiques. Cette pratique est
surtout courante dans les environnements des réseaux de stockage. Dans EMC Symmetrix, les disques
physiques sont logiquement divisés en hyper volumes. Les hyper volumes de plusieurs disques physiques
sont regroupés afin de créer un métavolume. Les métavolumes sont regroupés afin de créer un volume
logique. Dans cette illustration, les numéros 1 à 32 représentent les disques physiques individuels.
Chaque disque physique est divisé en huit hyper volumes de 9 Go. Les hyper volumes 1.1 à 8.1 sont
regroupés afin de créer un métavolume. Dans cette illustration, les métavolumes sont numérotés 0001a
et 0011a à 0071b. Les métavolumes 0001a et 0001b sont regroupés afin de créer un volume logique.
Les disques physiques à droite de la ligne verticale épaisse représentent la paire de miroirs.
Figure 8 : Vue logique de l’ensemble de disques de stockage Symmetrix
Voir l’image en taille réelle
Nous pouvons par exemple créer deux volumes logiques, l’un appelé L1 créé par regroupement des
métavolumes 0001a, 0001b et l'autre, appelé L2, créé par regroupement des métavolumes 0011a,
0011b. Si ces volumes logiques connaissent un nombre élevé de demandes d’E/S simultanées, un conflit
de disques a lieu, car les hyper volumes sont créés à partir du même ensemble de disques physiques
sous-jacents. Pour éviter cela, il importe de prendre soin de créer des partitions pouvant faire l’objet d’un
accès simultané sur des volumes logiques et disques physiques isolés.
Comme pour la conception du stockage de n'importe quel data warehouse, il existe un équilibre entre
l’isolation des données au niveau physique et l’organisation de la conception de sorte que le matériel soit
pleinement utilisé.
Les données de la partition active et les partitions d’archivage ont été placées sur des axes physiques
communs, mais séparés sur des volumes logiques pour la surveillance et la gestion. Une partition active
peut être créée sur le volume logique L1 et une partition d’archivage peut être créée sur le volume
logique L2. Bien que ces deux partitions soient isolées logiquement, elles partagent le même ensemble
d’axes physiques.
L’alternative aurait été d’isoler les données actives des données d’archivage au niveau de l'axe physique.
Cela aurait permis de réduire le nombre d’axes utilisés pour les partitions de données actives, ce qui
aurait pu conduire à une sous-utilisation des axes utilisés pour les partitions d’archivage, car ces données
font l’objet d'accès moins fréquents.
Avec les périphériques de stockage réseau modernes équipés d’un cache de stockage important et de
modèles d’utilisation imprévisibles et partagés, il est préférable de répartir les données sur autant d’axes
que nécessaire. Cela permet d’optimiser l’utilisation des ressources et du matériel afin d’offrir des
performances acceptables.
Configuration du stockage
L’ensemble de stockage a été configuré de manière optimale, en étroite collaboration avec les ingénieurs
EMC, en fonction des exigences de notre scénario. Nous encourageons nos clients à collaborer
étroitement avec leurs fournisseurs de matériel lors de la configuration du stockage pour une
implémentation de SQL Server.
Haut de page
Annexe F : scripts
Voici le script utilisé pour créer la base de données, la fonction de partition et le schéma de partition
dans l’implémentation de la stratégie II décrite précédemment dans ce livre blanc, dans la section
intitulée « Stratégies pour le partitionnement de data warehouses relationnels ».
CREATE DATABASE [SALES]
ON PRIMARY
(
NAME = N'SALES_PRIMARY', FILENAME = N'D:\SALESPrimary\SALES_PRIMARY.MDF',
SIZE = 100MB, FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition1
(NAME = N'SALES_ACTIVE_PARTITION_1', FILENAME =
N'F:\RAID5\DATA\1\SALES_ACTIVE_PARTITION_1.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition2
(NAME = N'SALES_ACTIVE_PARTITION_2', FILENAME =
N'F:\RAID5\DATA\2\SALES_ACTIVE_PARTITION_2.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition3
(NAME = N'SALES_ACTIVE_PARTITION_3', FILENAME =
N'F:\RAID5\DATA\3\SALES_ACTIVE_PARTITION_3.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition4
(NAME = N'SALES_ACTIVE_PARTITION_4', FILENAME =
N'F:\RAID5\DATA\4\SALES_ACTIVE_PARTITION_4.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition5
(NAME = N'SALES_ACTIVE_PARTITION_5', FILENAME =
N'F:\RAID5\DATA\5\SALES_ACTIVE_PARTITION_5.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition6
(NAME = N'SALES_ACTIVE_PARTITION_6', FILENAME =
N'F:\RAID5\DATA\6\SALES_ACTIVE_PARTITION_6.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition7
(NAME = N'SALES_ACTIVE_PARTITION_7', FILENAME =
N'F:\RAID5\DATA\7\SALES_ACTIVE_PARTITION_7.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition8
(NAME = N'SALES_ACTIVE_PARTITION_8', FILENAME =
N'F:\RAID5\DATA\8\SALES_ACTIVE_PARTITION_8.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition9
(NAME = N'SALES_ACTIVE_PARTITION_9', FILENAME =
N'F:\RAID5\DATA\9\SALES_ACTIVE_PARTITION_9.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition10
(NAME = N'SALES_ACTIVE_PARTITION_10', FILENAME =
N'F:\RAID5\DATA\10\SALES_ACTIVE_PARTITION_10.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_DIMENSIONS
(NAME = N'SALES_DIMENSIONS_1', FILENAME =
N'F:\RAID5\DATA\11\SALES_DIMENSIONS_1.NDF', SIZE = 450GB,
FILEGROWTH = 0),
(NAME = N'SALES_DIMENSIONS_2', FILENAME =
N'F:\RAID5\DATA\12\SALES_DIMENSIONS_2.NDF', SIZE = 450GB,
FILEGROWTH = 0)
LOG ON
(NAME = N'SALES_LOG', FILENAME = N'F:\SQL\Path8\SALES_LOG.LDF',
SIZE = 120GB, FILEGROWTH = 0)
GO
CREATE PARTITION FUNCTION SALES_WEEK_PARTITION_FUNCTION (INT)
AS RANGE RIGHT FOR VALUES ( 129, 130, 131, 132, 133, 134, 135, 136 )
GO
CREATE PARTITION SCHEME SALES_WEEK_PARTITION_SCHEME AS PARTITION
SALES_WEEK_PARTITION_FUNCTION
TO
(
SALES_ActivePartition1, SALES_ActivePartition2, SALES_ActivePartition3,
SALES_ActivePartition4, SALES_ActivePartition5,
SALES_ActivePartition6, SALES_ActivePartition7, SALES_ActivePartition8,
SALES_ActivePartition9, SALES_ActivePartition10
)
GO
Voici le script utilisé pour créer la base de données, la fonction de partition et le schéma de partition
dans l'implémentation de la stratégie II décrite précédemment dans ce livre blanc.
CREATE DATABASE [SALES]
ON PRIMARY
(NAME = N'SALES_PRIMARY', FILENAME =
N'D:\SALESPrimary\SALES_PRIMARY.MDF', SIZE = 100MB, FILEGROWTH = 0),
FILEGROUP SALES_ActivePartition
(NAME = N'SALES_ACTIVE_PARTITION_1', FILENAME =
N'F:\SQL\Path2\1\SALES_ACTIVE_PARTITION_1.NDF', SIZE = 100GB,
FILEGROWTH = 0),
(NAME = N'SALES_ACTIVE_PARTITION_2', FILENAME =
N'F:\SQL\Path2\2\SALES_ACTIVE_PARTITION_2.NDF', SIZE = 100GB,
FILEGROWTH = 0),
(NAME = N'SALES_ACTIVE_PARTITION_3', FILENAME =
N'F:\SQL\Path3\1\SALES_ACTIVE_PARTITION_3.NDF', SIZE = 100GB,
FILEGROWTH = 0),
(NAME = N'SALES_ACTIVE_PARTITION_4', FILENAME =
N'F:\SQL\Path3\2\SALES_ACTIVE_PARTITION_4.NDF', SIZE = 100GB,
FILEGROWTH = 0),
(NAME = N'SALES_ACTIVE_PARTITION_5', FILENAME =
N'F:\SQL\Path4\1\SALES_ACTIVE_PARTITION_5.NDF', SIZE = 100GB,
FILEGROWTH = 0),
(NAME = N'SALES_ACTIVE_PARTITION_6', FILENAME =
N'F:\SQL\Path4\2\SALES_ACTIVE_PARTITION_6.NDF', SIZE = 100GB,
FILEGROWTH = 0),
(NAME = N'SALES_ACTIVE_PARTITION_7', FILENAME =
N'F:\SQL\Path5\1\SALES_ACTIVE_PARTITION_7.NDF', SIZE = 100GB,
FILEGROWTH = 0),
(NAME = N'SALES_ACTIVE_PARTITION_8', FILENAME =
N'F:\SQL\Path6\1\SALES_ACTIVE_PARTITION_8.NDF', SIZE = 100GB,
FILEGROWTH = 0),
FILEGROUP SALES_DIMENSIONS
(NAME = N'SALES_DIMENSIONS_1', FILENAME =
N'F:\RAID5\DATA\11\SALES_DIMENSIONS_1.NDF', SIZE = 450GB,
FILEGROWTH = 0),
(NAME = N'SALES_DIMENSIONS_2', FILENAME =
N'F:\RAID5\DATA\12\SALES_DIMENSIONS_2.NDF', SIZE = 450GB,
FILEGROWTH = 0),
LOG ON
(NAME = N'SALES_LOG', FILENAME = N'F:\SQL\Path8\SALES_LOG.LDF',
SIZE = 120GB, FILEGROWTH = 0)
GO
CREATE PARTITION FUNCTION SALES_WEEK_PARTITION_FUNCTION (INT)
AS RANGE RIGHT FOR VALUES ( 129, 130, 131, 132, 133, 134, 135, 136 )
GO
CREATE PARTITION SCHEME SALES_WEEK_PARTITION_SCHEME AS PARTITION
SALES_WEEK_PARTITION_FUNCTION
ALL TO (SALES_ActivePartition)
GO
Téléchargement