SQL Server-Praxis

Linked Server: Erst Datenbewegung reduzieren, dann optimieren

Den Ausführungsort verteilter Abfragen prüfen, selektive Arbeit an der Quelle ausführen und Semantik, Berechtigungen und Fehlerfälle testen.

Eine Abfrage zwischen einer kleinen lokalen und einer großen entfernten Tabelle kann bei der Codeprüfung harmlos aussehen. Über einen Linked Server bestimmen jedoch häufig die übertragenen Daten und die Zahl entfernter Aufrufe die Kosten. Ein kleines Endergebnis beweist keine selektive Ausführung an der Quelle. Prüfen Sie den Ort von Filterung und Aggregation, bevor Sie lokale Indizes ergänzen oder Zeitlimits erhöhen.

Die teure Grenze lokalisieren

Erfassen Sie den tatsächlichen lokalen Plan einer repräsentativen Ausführung. Untersuchen Sie den Remote-Operator und den übertragenen Abfragetext. Vergleichen Sie ankommende Zeilen mit den nach lokalen Filtern verbleibenden Zeilen. Müssen für zweihundert Ergebniszeilen Millionen breiter Datensätze übertragen werden, ist diese Grenze wichtiger als eine lokale Sortierung von wenigen Millisekunden.

Ein vierteiliger Objektname bedeutet nicht automatisch lokale Verarbeitung. SQL Server kann Arbeit delegieren; die Platzierung hängt unter anderem von Abfrage, Provider, verfügbaren Informationen und unterstützten Operationen ab. Auch ein Remote-Operator beweist keinen guten entfernten Plan. Prüfen Sie die Quellinstanz mit ihren eigenen Ausführungsdaten und Indizes.

Messen Sie Laufzeit, Zahl entfernter Aufrufe, Zeilenbreite und Belastung der Quelle mit denselben Parametern. Ein Aufruf pro lokalem Datensatz kann schlechter sein als ein begrenzter gemeinsamer Auftrag, obwohl jeder Einzelaufruf schnell ist. Testen Sie auch das größte Kundenkonto, wenn dort das Produktionsproblem auftritt.

Die entfernte Arbeit ausdrücklich festlegen

Die Vorlage setzt einen bereits eingerichteten SQL Server Linked Server ReportingLink und eine entfernte Sales-Datenbank voraus. Sie verändert weder Einrichtung noch Zugangsdaten. Passen Sie das Schema in einer Testumgebung an. Zeitraum und Aggregation stehen im durchgereichten Text, sodass nur Kundensummen zurückkommen.

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 muss den gewünschten exakten numerischen Datentyp haben und in die dezimale Aggregation passen. Beide Datumsgrenzen verwenden die dokumentierte Zeitbasis der entfernten Daten. Vergleichen Sie mit einer vertrauenswürdigen lokalen Rechnung auf kleinen Testdaten mit Grenzzeitpunkten, mehreren Aufträgen und negativen Korrekturen. Ein schnellerer falscher Berichtszeitraum ist keine Verbesserung.

OPENQUERY erwartet einen literalen Text, akzeptiert keine Variablen als Argumente und begrenzt diesen Text auf 8 KB. Bauen Sie deshalb keine ungeprüften Benutzereingaben in verschachtelte Anführungszeichen ein. Für variable Anforderungen kommt eine ausdrücklich freigegebene entfernte Prozedur mit typisierten Parametern oder eine abgestimmte Staging-Schnittstelle infrage. Prüfen Sie Provider-Unterstützung und nötige RPC-Einstellungen gezielt für diese andere Lösung.

Wenn lokale Schlüssel die Auswahl bestimmen, kann ein kontrollierter entfernter Staging-Satz einen ganzen Auftrag ausdrücken. Vergeben Sie eine Vorgangskennung, regeln Sie Bereinigung und trennen Sie parallele Aufrufer. Diese Lösung benötigt Schreibrechte und Lebenszyklusverwaltung. Sie ersetzt daher eine lesende Abfrage nicht ohne zusätzliche Betriebsaufgaben.

Bedeutung und Fehlergrenzen erhalten

Unterschiedliche Sortierungen und Datentypen können Vergleiche verändern oder Konvertierungen erzwingen. Testen Sie Großschreibung, Akzente, Unicode, NULL und Genauigkeit. Erklären Sie Sortierungen nicht allein für einen attraktiveren Plan als kompatibel, wenn die Aussage fachlich nicht stimmt. Prüfen Sie nach jeder Umformulierung den erzeugten entfernten Text.

Nutzen Sie eine entfernte Identität mit minimalen Rechten und testen Sie mit dem wirklichen Anwendungslogin. Ein erfolgreicher Administratoraufruf beweist weder richtige Zuordnung noch Delegierung für ein Dienstkonto. Halten Sie Kennwörter aus Abfragetext und Screenshots heraus. Benennen Sie Verantwortliche für Provider und Zertifikate, damit Verbindungsfehler einen klaren Bearbeitungsweg haben.

Trennen Sie schließlich Lesen von serverübergreifendem Schreiben. Änderungen innerhalb einer lokalen Transaktion können abhängig von Operation und Einstellungen verteilte Transaktionen benötigen. Eine abgeschaltete Hochstufung kann die zugesagte Atomarität verändern. Simulieren Sie Unterbrechungen und unklare Abschlüsse im Test. Wiederholungen müssen zur tatsächlichen Transaktionsgrenze passen. Für häufige große Berichte kann eine gepflegte lokale Berichtskopie einen leichter messbaren Aktualitätsvertrag bieten.

Technische Referenzen: Microsoft Learn: OPENQUERY · Microsoft Learn: Remote execution options · Microsoft Learn: Server options.

Frage zu diesem Artikel

Haben Sie eine Frage zu diesem Thema?

Beschreiben Sie, was Sie bewerten oder wo Sie nicht weiterkommen. Wir antworten mit einer praktischen Empfehlung.

Inquiries are not enabled in this preview.

Eine Frage zu diesem Artikel stellen