Paramétrage et analyse des performances

Nous recommandons l'approche relative à la performance de synchronisation suivante :

  • Configuration de chaque serveur et base de données, et du code d'application pour atteindre les meilleures performances

  • Développement de lignes de base des performances

  • Analyse et paramétrage visant à atteindre ou dépasser les lignes de base

Configuration

La première étape dans le paramétrage des performances consiste à garantir que le matériel et le logiciel sont correctement configurés.

Considérations relatives au réseau et au serveur

  • Assurez-vous que chaque ordinateur est doté d'un sous-système d'E/S adéquat, et que les fichiers de base de données sont alloués correctement.

    La vitesse de lecture et d'écriture de modifications sur le disque est en général plus importante que la vitesse du réseau, donc un sous-système d'E/S adéquat est essentiel. Il est recommandé d'utiliser plusieurs baies de disque RAID, et d'avoir, sur le serveur, une baie dédiée à chacun des éléments suivants : tempdb, bases de données utilisateur et journaux des transactions. Ces derniers doivent être créés dans des groupes de fichiers séparés. Si une ou plusieurs tables utilisateur s'avèrent être un goulot d'étranglement lors du traitement, pensez à les déplacer dans des groupes de fichiers séparés.

  • Envisagez d'ajouter de la mémoire aux ordinateurs dans les topologies de synchronisation.

    C'est particulièrement important pour ces serveurs impliqués dans un grand nombre de sessions de synchronisation simultanées. Les sessions de synchronisation impliquent en général des transactions longues ; par conséquent, il est important d'avoir une quantité de mémoire significative qui est directement adressable par la base de données serveur. Dans le cas de SQL Server, envisagez l'utilisation du commutateur /3GB pour les systèmes 32 bits ou le déplacement vers un système 64 bits. Pour plus d'informations, consultez « Espace d'adressage de processus » dans la documentation en ligne de SQL Server.

  • Définissez la quantité minimale et maximale de mémoire allouée à la base de données serveur.

    À titre d'exemple, par défaut, le Moteur de base de données modifie ses besoins de mémoire de façon dynamique en fonction des ressources système disponibles. Pour éviter un problème de saturation de la mémoire lors des opérations de synchronisation, indiquez une taille de mémoire minimale disponible en vous servant de l'option mémoire minimale du serveur. Pour éviter que le système d'exploitation n'utilise la mémoire paginable sur le disque, vous pouvez également indiquer une taille de mémoire maximale à l'aide de l'option mémoire maximale du serveur. Pour plus d'informations, consultez la documentation en ligne de SQL Server.

Conception de bases de données et d'applications

  • Respectez les méthodes conseillées en matière de conception de bases de données.

    Une base de données impliquée dans la synchronisation bénéficie en général des mêmes optimisations de performances que toute base de données similaire. Pour plus d'informations sur l'optimisation des bases de données, consultez la documentation en ligne de SQL Server. Tenez compte des considérations relatives aux index suivantes :

  • Définissez des valeurs appropriées pour le délai d'attente de verrou et de requête des bases de données.

  • Minimisez les conflits par la conception de publication et le comportement des applications.

    Les applications doivent être conçues pour éviter les conflits dans la mesure du possible, car la détection et la résolution de conflit conduisent à une plus grande complexité et génèrent un traitement supplémentaire ainsi qu'un trafic réseau accru. Les méthodes les plus courantes pour éviter des conflits sont les suivantes :

    • Mettez à jour une table à un seul nœud, ou

    • Filtrez des données afin qu'un seul nœud mette à jour un jeu particulier de lignes. Par exemple, vous pourriez partitionner horizontalement des données sur les clients dans un scénario client à server, afin que chaque modification de client ne concerne qu'une seule « coupe » de données, telle que les informations de contact pour les clients à Washington.

  • Utilisez le filtrage judicieusement.

    Le filtrage de données est un bon moyen pour réduire les conflits et copier moins de données sur chaque nœud. Toutefois, gardez à l'esprit que les clauses de filtrage complexes peuvent affecter la performance. Si un filtre joint de nombreuses tables, considérez d'autres moyens d'implémenter la même logique.

  • Soyez prudent avec la logique d'application dans les déclencheurs et les requêtes de synchronisation.

    Exécuter de la logique supplémentaire dans chaque requête et déclencheur peut considérablement ralentir la performance.

  • Utilisez les procédures stockées pour les commandes de base de données.

    Sync Framework utilise plusieurs requêtes pour sélectionner et appliquer des données et des modifications de métadonnées pendant une session de synchronisation. Si vous créez ces requêtes manuellement, encapsulez-les dans des procédures stockées. Vous obtenez, en général, une meilleure performance et facilité de maintenance et vous pouvez également mieux sécuriser vos applications. Si votre application requiert SQL Inline au lieu de procédures stockées, veillez à utiliser la méthode Prepare() ADO.NET pour toutes les commandes. Cela améliore la performance pour SQL Inline.

  • Utilisation de l'application des modifications en bloc

    Sync Framework utilise des paramètres table pour appliquer des insertions, des mises à jour et des suppressions aux bases de données SQL Server 2008 et SQL Azure. Cette fonctionnalité permet d'appliquer plusieurs modifications à la base de données à l'aide d'un seul appel de procédure stockée. Cela améliore considérablement les performances et réduit le nombre de boucles entre le client et le serveur lors de l'application des modifications. Si l'application en bloc n'est pas disponible, Sync Framework revient à l'utilisation de l'application élément par élément. Si vous ne voulez pas appliquer de modification en bloc, passez false à SqlSyncScopeProvisioning..::..SetUseBulkProceduresDefault avant d'approvisionner votre base de données ; les procédures en bloc ne seront pas créées.

  • Synchronisez uniquement les données qui sont obligatoires au niveau de chaque nœud.

    Il peut être tentant de publier tout ou la plupart des tables dans une base de données, « au cas où ». Évitez de publier des tables qui ne sont pas vraiment requises par une application et envisagez de synchroniser moins souvent chaque nœud.

  • Concevez des groupes et des étendues de synchronisation adéquats et utilisez la direction de synchronisation appropriée pour chaque étendue.

    Une étendue est un jeu de tables synchronisées comme une unité. Une ou plusieurs tables dans une étendue peuvent être filtrées et les tables peuvent être incluses dans plusieurs étendues. Assurez-vous que les étendues reflètent les modèles d'utilisation et les structure des tables qu'elles contiennent. Considérez les quatre tables suivantes dans une application de force de vente :

    • Commandes et OrderDetails

      Les lignes sont insérées uniquement dans ces tables au niveau d'un ordinateur client, mais peuvent être mises à jour au niveau du serveur. Les modifications doivent être validées dans la même transaction. Ces tables doivent être dans la même étendue, avec une direction de synchronisation bidirectionnelle.

    • Tarification

      Les lignes sont fréquemment insérées et mises à jour, mais uniquement au niveau du serveur. Cette table et les tables similaires doivent être dans une étendue, avec une direction de synchronisation par téléchargement uniquement, du point de vue du client.

    • Produits

      Les lignes sont rarement insérées et mises à jour au niveau du serveur. Cette table devrait probablement être dans une étendue différente de Tarification parce qu'elle n'est pas mise à jour à la même fréquence et peut être synchronisée probablement moins souvent.

Notes

La direction de synchronisation peut être modifiée pour chaque session, alors que l'étendue est rendue persistante entre les sessions. Il n'y a aucune connexion directe entre la direction de l'étendue et la direction de synchronisation, mais cet exemple illustre comment tenir compte des deux lors de la conception d'une application.

  • Pour DbSyncProvider, utilisez SelectTableMaxTimestampsCommand pour optimiser l'énumération.

    La requête spécifiée pour cette propriété sélectionne l'horodateur maximal de chaque table de base ou table de suivi. Cet horodateur est utilisé pour déterminer si, pour chaque table, la destination contient déjà toutes les modifications de la source. Si la destination reflète déjà les modifications, Sync Framework peut souvent éviter d'exécuter des requêtes d'énumération, ce qui peut améliorer les performances.

  • Utilisez le traitement par lot afin de compenser le manque de fiabilité des réseaux et les problèmes liés à une faible mémoire.

    Par défaut, Sync Framework remet les modifications à chaque nœud dans un même objet DataSet. Cet objet est conservé en mémoire à mesure que les modifications sont appliquées à un nœud. Le comportement par défaut fonctionne bien si est la mémoire est suffisante sur l'ordinateur où les modifications sont appliquées et si la connexion à l'ordinateur est fiable. Il peut toutefois être avantageux pour certaines applications de disposer des modifications divisées en lots. Le traitement par lot constitue une charge mémoire supplémentaire, mais il peut également se traduire par un gain de performance dans le cas de certaines applications. Pour plus d'informations, consultez Procédure : remettre des modifications dans des lots (SQL Server).

  • Échelonnez les planifications de synchronisation.

    Si un grand nombre de nœuds synchronisent avec un nœud central, échelonnez les planifications afin de réduire les sollicitations de la mémoire et les conflits au niveau du nœud central. Les planifications peuvent être basées sur l'heure de l'horloge ou sur l'heure relative. Par exemple, une application pourrait synchroniser toutes les heures ou elle pourrait démarrer une session de synchronisation une heure après l'exécution réussie de la dernière session pour ce nœud.

  • Utilisez des planifications de nettoyage des métadonnées appropriées.

    Les grandes quantités de métadonnées peuvent affecter la performance des requêtes de synchronisation.

Lignes de base

Une fois la synchronisation configurée, il est recommandé de développer une ligne de base de performance, ce qui vous permet de déterminer comment se comporte la synchronisation avec une charge de travail standard pour vos applications et votre topologie. Utilisez les événements de synchronisation et le Moniteur système pour déterminer les nombres standard pour les cinq dimensions de performance de synchronisation suivantes :

  • Latence : temps nécessaire à la propagation d'une modification de données entre les nœuds d'une topologie.

  • Débit : volume des activités de synchronisation (mesuré en termes de lignes transmises sur une période donnée) que le système est en mesure d'assurer dans le temps.

  • Concurrence : nombre de nœuds qui peuvent synchroniser simultanément avec un nœud particulier. Il s'agit souvent du nombre de clients qui peuvent synchroniser avec un serveur particulier.

  • Durée de synchronisation : temps d'exécution d'une session de synchronisation.

  • Consommation de ressources : ressources réseau et matériel utilisés pendant la synchronisation.

En fonction de votre application, certaines de ces mesures d'amélioration de la performance peuvent avoir plus d'impact que d'autres. Par exemple, un débit relativement bas peut être acceptable tant qu'une concurrence élevée peut être maintenue. Pour l'établissement d'une ligne de base, gardez à l'esprit que Sync Framework n'est pas conçu comme un système serveur à serveur haut débit et offrant une faible latence telle que la réplication transactionnelle SQL Server. Il est conçu pour la synchronisation client à serveur et client à client qui prend en charge les applications hors connexion et collaboratives.

Après avoir établi des numéros de ligne de base, analysez le système à la recherche de goulots d'étranglement au niveau de l'évolutivité et définissez les bons paramètres.

Analyse et maintenance

L'analyse peut être utilisée pendant le développement des lignes de base de performance, de manière périodique dans les environnements de production, et de façon plus intensive si un problème de performance survient. Nous recommandons les outils suivants pour l'analyse de l'activité de synchronisation et de la performance :

  • Événements de synchronisation

    Utilisez les événements suivants pour déterminer la durée de chaque phase spécifique :

    • Événements par table sur chaque fournisseur : SelectingChanges, ChangesSelected, ApplyingChanges et ChangesApplied

    • Événement par session sur chaque fournisseur : SyncProgress

    Conservez la durée de chaque phase en mémoire, puis écrivez les résultats dans un fichier journal ou une base de données de performance à l'issue de la session de synchronisation.

  • SQL Server Profiler

    Utilisez le modèle TSQL_SPs et identifiez les requêtes qui dépassent un seuil particulier, par exemple 10 secondes. Si vous écrivez les informations de trace dans un fichier journal ou une base de données de performance, conservez les données en mémoire et effectuez des écritures à l'issue de la session de synchronisation.

  • SQL Server Management Studio

    Management Studio peut être utilisé pour vérifier le plan de requête pour chaque requête de synchronisation, afin de garantir que le plan le plus optimal est utilisé.

  • Moniteur système

    Utilisez les objets et compteurs de performance suivants pour analyser des zones qui sont importantes pour la synchronisation :

    • Compteurs sous SQL Server : Gestionnaire de mémoire. Par exemple, vous pouvez vérifier si SQL Server utilise la mémoire qui lui est destinée en comparant la mémoire du serveur cible et la mémoire totale du serveur.

    • Compteurs sous PhysicalDisk. Par exemple, Longueur moyenne de file d'attente lecture disque et Longueur moyenne de file d'attente écriture disque permettent d'identifier si la performance de synchronisation est liée aux E/S ou si la mémoire de l'ordinateur est insuffisante. Si les longueurs de file d'attente sont déraisonnables, envisagez d'ajouter de la mémoire et de mettre à niveau ou d'ajouter des lecteurs.

      La valeur par défaut permet au compteur de signaler des moyennes entre tous les lecteurs. Assurez-vous que vous ajoutez un compteur pour chaque lecteur.

    • Compteurs sous SQL Server : Transactions Par exemple, Transactions de captures instantanées et Taille de la banque des versions peuvent être utilisés pour déterminer si les requêtes d'énumération des modifications font croître tempdb excessivement. Les requêtes d'énumération des modifications utilisent des transactions de captures instantanées et les informations de version de captures instantanées sont stockées dans tempdb. Une banque des versions de taille importante signifie que tempdb aura peut-être besoin d'un redimensionnement.

    • Compteurs sous SQL Server : Verrous. Par exemple, Temps d'attente des verrous et Nombre d'interblocages peuvent être utilisés pour déterminer si un conflit pose problème pendant l'activité simultanée dans la base de données.

  • Traçage de synchronisation

    Sync Framework inclut le traçage basé sur la classe TraceListener. Le traçage peut être utilisé pour recueillir des informations sur les sessions de synchronisation, qui peuvent être utiles pour l'analyse et le dépannage. Toutefois, gardez à l'esprit que le traçage présente des charges mémoire supplémentaires et qu'il doit être principalement utilisé pendant le développement. Pour plus d'informations, consultez Traçage du processus de synchronisation (Cette rubrique se concentre DbServerSyncProvider, mais les informations sont également applicables à d'autres fournisseurs).

Outre l'analyse, nous vous recommandons d'effectuer régulièrement les tâches de maintenance suivantes :

  • Selon le niveau de défragmentation, réorganisez ou reconstruisez des index sur les tables de base et les tables de métadonnées.

  • Mettez à jour les statistiques d'index.

  • Nettoyez les métadonnées de synchronisation.

Voir aussi

Autres ressources

Considérations sur la conception et le déploiement d'applications