Conception de vues partitionnées de données distribuées
Au moment de concevoir un ensemble de vues partitionnées de données distribuées en vue d'implémenter une fédération de serveurs de base de données, tenez compte des points suivants :
Déterminez le modèle d'instructions SQL exécutées par l'application.
Déterminez la manière dont les tables sont liées les unes aux autres.
Comparez la fréquence des instructions SQL aux partitions définies à partir de l'analyse des clés étrangères.
Définissez les règles de routage des instructions SQL.
Modèle d'instructions SQL exécutées par l'application
Développez la liste des instructions SQL qui seront exécutées par l'application durant les périodes usuelles de traitement. Divisez la liste en catégories d'instructions SELECT, UPDATE, INSERT et DELETE, puis triez chaque catégorie par fréquence d'exécution. Si les instructions SQL font référence à des procédures stockées, utilisez les instructions SELECT, INSERT, UPDATE et DELETE de base de la procédure stockée. Si vous partitionnez une base de données SQL Server existante, vous pouvez vous servir du SQL Server Profiler pour obtenir cette liste.
La recommandation d'utilisation de la fréquence des instructions SQL correspond à une approximation raisonnable pour une base de données active de type traitement transactionnel en ligne (OLTP) ou de site Web, dans laquelle les vues partitionnées distribuées fonctionnent de manière optimale. Ces systèmes se caractérisent par des instructions SQL individuelles qui récupèrent de petites quantités de données par rapport aux types de requêtes d'un système d'aide à la décision ou OLAP. Lorsque chaque instruction SQL fait référence à une petite quantité de données, une simple étude de la fréquence de chaque instruction permet de dégager une approximation raisonnable du trafic des données dans le système. Cependant, de nombreux systèmes possèdent certains groupes d'instructions SQL qui font référence à d'importants volumes de données. Vous pouvez aller jusqu'à évaluer l'importance de ces requêtes pour ajuster en conséquence l'augmentation de leurs besoins en données.
Relations des tables
L'objectif consiste à trouver des clusters de tables pouvant être partitionnés selon la même dimension (par exemple, un numéro de pièce ou un numéro de rayon), afin que toutes les lignes associées à des occurrences individuelles de cette dimension se retrouvent sur le même serveur membre. Par exemple, vous pouvez déterminer le partitionnement de votre base de données par région. Pour ce faire, même les tables qui ne possèdent pas de numéro de région dans leur clé doivent pouvoir être partitionnées de manière à prendre en compte la région. Dans ce type de base de données, même lorsque la table Customer ne possède pas de colonne pour le numéro de région, mais que les régions sont définies comme des ensembles d'états ou de provinces, la colonne Customer.StateProvince peut permettre de partitionner les clients de manière à prendre en compte la région.
Étant donné qu'elles définissent les relations entre les tables, les clés étrangères explicites et implicites constituent les principaux éléments à prendre en compte lorsque vous cherchez à partitionner des données. Analysez les définitions de clés étrangères explicites pour déterminer avec quelle fréquence les requêtes utilisent les lignes d'une table pour trouver les lignes d'une autre table. De même, analysez les clés étrangères implicites (la manière dont les instructions SQL utilisent les valeurs des lignes d'une table pour faire référence aux lignes d'une autre table dans des opérations de jointure), même lorsqu'il n'existe aucune définition de clé étrangère spécifique. Étant donné que les clés étrangères implicites ne sont pas explicitement définies comme partie intégrante du schéma de base de données, vous devez vérifier les instructions SQL générées par l'application pour déterminer s'il existe des instructions qui joignent les tables à l'aide de colonnes sans clé. Ces clés étrangères implicites sont généralement indexées pour améliorer les performances de jointure. Par conséquent, il est également conseillé d'analyser les index définis dans la base de données.
Fréquence des instructions SQL par rapport aux partitions
Comparez la fréquence des instructions SQL aux partitions définies à partir de l'analyse des clés étrangères. Sélectionnez le partitionnement qui prendra le mieux en charge le mélange d'instructions SQL dans votre application. Si certains ensembles de tables peuvent être partitionnés de plusieurs façons, utilisez la fréquence des instructions SQL pour déterminer la partition la mieux adaptée au plus grand nombre d'instructions SQL. Les tables les plus fréquemment référencées par les instructions SQL sont celles qui sont à partitionner en premier. Établissez un ordre de priorité pour partitionner les tables en fonction de la fréquence à laquelle ces tables sont référencées.
Le modèle des instructions SQL influence également la décision de partitionner ou non une table :
Partitionnez une table si plus de 5% des instructions faisant référence à celle-ci sont des instructions INSERT, UDATE ou DELETE et si la table peut être partitionnée selon la dimension choisie.
Gérez des copies complètes des tables sur chaque serveur membre si moins de 5% des instructions faisant référence à la table sont des instructions INSERT, UPDATE ou DELETE. Vous devez également définir la façon dont les mises à jour doivent être effectuées de sorte que toutes les copies de la table soient mises à jour. Si un haut niveau d'intégrité transactionnelle est nécessaire, vous pouvez coder les déclencheurs chargés d'effectuer les mises à jour distribuées de toutes les copies dans le contexte d'une transaction distribuée. Si vous n'avez pas besoin d'un haut niveau d'intégrité transactionnelle, vous pouvez utiliser l'un des mécanismes de réplication de SQL Server pour propager les mises à jour d'une copie de la table vers toutes les autres copies.
N'effectuez pas de partitionnement ou de copie d'une table si plus de 5% des instructions faisant référence à celle-ci sont des instructions INSERT, UDATE ou DELETE et si la table ne peut pas être partitionnée selon la dimension choisie.
Règles de routage des instructions SQL
Les règles de routage doivent pouvoir déterminer le serveur membre le mieux adapté pour traiter efficacement chaque instruction SQL. Elles doivent établir une relation entre le contexte des entrées de l'utilisateur et le serveur membre contenant la partie principale des données nécessaires à l'exécution de l'instruction. Les applications doivent pouvoir extraire une partie des données entrées par l'utilisateur, puis les comparer aux règles de routage, afin de déterminer le serveur membre chargé de traiter l'instruction SQL.