Serveurs liés : réduire les transferts avant de régler
Identifiez le lieu réel du traitement, filtrez à la source distante et vérifiez la sémantique, les identités et les scénarios de panne.
Une jointure entre une petite table locale et une grande table distante peut sembler anodine lors d'une revue. Avec un serveur lié, le coût dépend souvent des données transférées et du nombre de requêtes distantes. Un petit résultat final ne prouve pas un filtrage efficace à la source. Localisez filtres et agrégations avant d'ajouter des index locaux ou d'augmenter les délais.
Repérer la frontière coûteuse
Capturez le plan local réel d'une exécution représentative. Examinez l'opérateur distant et le texte transmis. Comparez les lignes reçues avec celles qui subsistent après filtrage local. Si deux cents lignes finales exigent des millions de lignes larges transférées, cette frontière mérite davantage d'attention qu'un tri local de quelques millisecondes.
Un nom en quatre parties ne signifie pas automatiquement que tout se passe localement. SQL Server peut déléguer le traitement, selon la requête, le fournisseur, les informations disponibles et les opérations prises en charge. Un opérateur distant ne garantit pas non plus un bon plan à la source. Examinez cette instance avec ses propres preuves d'exécution et index.
Mesurez durée, nombre d'appels, largeur des lignes et charge distante avec les mêmes paramètres. Un appel par ligne locale peut coûter davantage qu'un lot borné, même si chaque appel est rapide. Testez aussi le plus gros compte lorsque le problème apparaît précisément sur celui-ci.
Rendre le traitement distant explicite
Le modèle suppose un serveur lié SQL Server ReportingLink déjà configuré et une base Sales distante. Il ne modifie ni configuration ni identifiants. Adaptez le schéma dans un environnement de test. Période et agrégation figurent dans le texte transmis, donc seuls les totaux par client reviennent.
SELECT CustomerId, TotalAmount
FROM OPENQUERY([ReportingLink],
'SELECT CustomerId,
SUM(CONVERT(decimal(19,4), Amount)) AS TotalAmount
FROM Sales.dbo.Orders
WHERE OrderDate >= ''20260101''
AND OrderDate < ''20260201''
GROUP BY CustomerId');
Amount doit utiliser le type numérique exact attendu et tenir dans l'agrégation décimale. Les bornes suivent la convention horaire documentée des données distantes. Comparez avec un calcul local fiable sur un petit jeu comprenant dates limites, commandes multiples et ajustements négatifs. Un mauvais mois calculé plus vite reste un résultat incorrect.
OPENQUERY utilise un texte littéral, refuse les variables comme arguments et limite le texte à 8 Ko. Ne contournez pas cela en concaténant des entrées utilisateur non contrôlées dans plusieurs niveaux de guillemets. Pour des paramètres variables, envisagez une procédure distante explicitement exposée avec paramètres typés, ou une interface de staging approuvée. Vérifiez séparément prise en charge du fournisseur et configuration RPC nécessaire.
Si des clés locales pilotent la sélection, un ensemble distant temporairement préparé peut représenter tout le lot. Attribuez un identifiant d'opération, définissez le nettoyage et isolez les appels concurrents. Cette conception nécessite des droits d'écriture et une gestion de cycle de vie ; elle ne remplace pas gratuitement une lecture distante.
Préserver sens et limites de panne
Des classements et types différents peuvent modifier les comparaisons ou forcer des conversions. Testez casse, accents, Unicode, valeurs nulles et précision. Ne déclarez pas des classements compatibles uniquement pour améliorer le plan si cette affirmation est fausse. Inspectez le texte distant généré après chaque réécriture.
Utilisez une identité distante avec les seuls droits nécessaires et testez avec le véritable compte applicatif. Un succès administrateur ne valide pas le mappage ou la délégation d'un compte de service. Gardez les secrets hors du texte SQL et des captures d'incident. Identifiez les responsables du fournisseur et des certificats pour traiter clairement les pannes de connexion.
Distinguez enfin lectures et écritures réparties. Une écriture dans une transaction locale peut impliquer une transaction distribuée selon opération et réglages. Désactiver la promotion pour supprimer une erreur peut changer le contrat d'atomicité. Simulez interruptions et résultats ambigus en test, puis concevez les reprises autour de la vraie frontière transactionnelle. Pour des rapports volumineux fréquents, une copie locale maintenue peut offrir une fraîcheur plus simple à mesurer que des jointures distribuées répétées.
Références techniques: Microsoft Learn: OPENQUERY · Microsoft Learn: Remote execution options · Microsoft Learn: Server options.