Sind datenbankübergreifende Abfragen in SQL Server teuer?

15

Sind datenbankübergreifende Abfragen in SQL Server teuer? Alle Datenbanken befinden sich in derselben Instanz.

Jonathan Allen
quelle
3
Ich habe nie Beweise dafür gefunden, nein. Die einzigen Ausnahmen, an die ich denken könnte (die ich noch nicht getestet habe), sind (a), dass der Optimierer nicht von Beziehungen profitieren kann, die nicht explizit sein können (z. B. von Fremdschlüsseldefinitionen, die nicht übergreifend existieren können) -Datenbank) oder (b) es gibt Probleme mit Statistiken, die ein Problem mit Verbindungsservern darstellen, aber ich stelle mir vor, dass es Fälle gibt, in denen ein Benutzer, der eine Abfrage ausführt, sogar datenbankweit keine Statistiken sehen kann. Ich weiß nicht, ob (b) echt ist oder nicht - ich habe es nicht getestet. Ich weiß nur, dass dies ein schwerwiegendes Problem auf allen Servern sein kann.
Aaron Bertrand
2
Ich bin mit @AaronBertrand in dieser Sache, ich habe nichts gesehen, was definitiv sagen könnte, dass es einen Riesenhit gibt. Das einzige, von dem ich denken könnte, dass es der Gleichung etwas hinzufügen würde, wäre möglicherweise eine Form von Authentifizierungsoperationen, aber ich würde bezweifeln, dass es signifikant wäre. Ich denke nur laut nach, ich bin mir nicht sicher. Hier empfiehlt es sich, einen automatisierten Test / Benchmark mit einer datenbankübergreifenden und anschließend mit derselben datenbankübergreifenden Abfrage einzurichten und diesen Test Tausende Male auszuführen. Ermitteln Sie den Durchschnitt, den Maximalwert usw. und treffen Sie Ihre Entscheidung daraus.
Thomas Stringer
1
@thomas konnten Sie einen Unterschied definitiv sehen, indem Sie die tatsächlichen Abfragepläne betrachteten?
Max Vernon
@ Jonathan: Die Definition von "teuer" ist relativ zu Alternativen. Also, was versuchst du zu tun und zwischen was entscheidest du dich? Ohne weitere Informationen ist es durchaus möglich, eine Antwort zu erhalten, die zum Nennwert korrekt erscheint, aber gleichzeitig absolut falsch für Ihre Situation ist. Alles hat einen Preis, aber die Kosten könnten entweder billig oder teuer sein , je nachdem , was Sie es zu vergleichen. Und Abfragekosten (dh Zeit, Streit usw.) müssen gegen Wartungskosten, Hardwarekosten usw. abgewogen werden
Solomon Rutzky
Ich möchte die Kosten im Vergleich zu einer Abfrage in derselben Tabelle kennen.
Jonathan Allen

Antworten:

6

Es tut mir leid, ich habe nicht genug Reputation, um die Frage zu kommentieren. Wenn die Client-Anwendung jedoch eine Transaktion für eine Abfrage auslöst, die datenbankübergreifende Verknüpfungen verwendet, wird die Transaktion als verteilt eingestuft und hat den Overhead einer DTC-Transaktion .

Der DTC-Overhead kann in diesem Fall als Leistungseinbußen angesehen werden. Im Allgemeinen wäre der Unterschied vernachlässigbar, obwohl Microsoft DTC-Transaktionen als solche beschreibt:

Verteilte Transaktionen verbrauchen normalerweise erhebliche Systemressourcen

Transaktionswerbung

... was auf eine Verschlechterung der Leistung hindeuten würde, wenn Ihr Server nicht die benötigten Ressourcen bereitstellen kann.

Zur Verdeutlichung beschreibt der obige Artikel, wie lokale Transaktionen bei der Einführung von Remotesystemen gefördert werden. Ich habe jedoch festgestellt, dass dies bei datenbankübergreifenden Abfragen für Transaktionen auf demselben Server der Fall ist.

Wie Thomas Stringer in seinem Kommentar ausführt, wird die Authentifizierung zusätzlichen Aufwand verursachen, auch wenn ich denke, dass dies SID-gesteuert sein wird und es dort nur minimalen Aufwand gibt, es sei denn, Sie müssen separate Anmeldeinformationen verwenden, um auf die andere Datenbank zuzugreifen.

Wenn es Unterschiede in den Datenbankeinstellungen gibt, die zusätzlichen Overhead im Join verursachen, kann dies größere Auswirkungen als die vorherigen Vorschläge haben, z. B. Datenbanksortierung. Die Datenbanksortierung kann sich als Funktionsunterschied und nicht nur als Leistungsunterschied manifestieren.

Ich denke, Aaron hat das stärkste Argument für die Leistung, da der Optimierer nicht den Vorteil hat, Beziehungen für datenbankübergreifende Abfragen zu verwenden, während er in einer Datenbank enthalten ist, die Sie zu Ihrem Vorteil nutzen können.

LeedsDBA
quelle
1
Der Transaktionswerbeartikel gilt für CLR-Transaktionen.
Stacylaray
-2

In SQL Server 2014 unterstützen speicheroptimierte Tabellen keine datenbankübergreifenden Transaktionen. Sie können nicht über dieselbe Transaktion oder dieselbe Abfrage auf eine andere Datenbank zugreifen, die auch auf eine speicheroptimierte Tabelle zugreift. Sie können nicht einfach Daten aus einer Tabelle in einer Datenbank in eine speicheroptimierte Tabelle in einer anderen Datenbank kopieren. http://msdn.microsoft.com/en-us/library/dn584627(v=sql.120).aspx Verteilte und datenbankübergreifende Transaktionen werden für die Datenbankspiegelung / AOAG nicht unterstützt. http://technet.microsoft.com/en-us/library/hh393530.aspx . Wenn Sie die Eigentumsverkettung verwenden, beachten Sie die Sicherheitsrisiken http://msdn.microsoft.com/en-us/library/ms188676.aspx

Stacylaray
quelle
Dies gilt nur für Szenarien mit "Ressourcen, die sich über mehrere Instanzen oder Server erstrecken". In diesem Fall handelt es sich um eine einzelne Instanz mit mehreren Datenbanken.
Jonathan Allen
1
Mein Schlimmes ... Ich habe den Teil verpasst, der sich in derselben Instanz befand
stacylaray