Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Ziel vs. OLE DB-Ziel

In dieser Antwort werde ich versuchen, Informationen aus der offiziellen Dokumentation von SSIS bereitzustellen, und ich werde meine persönlichen Erfahrungen mit dem SQL Server-Ziel erwähnen.

1. SQL Server-Ziel

Laut der offiziellen SQL Server Destination-Dokumentation:

Das SQL Server-Ziel stellt eine Verbindung mit einer lokalen SQL Server-Datenbank her und lädt Daten massenweise in SQL Server-Tabellen und -Ansichten. Sie können das SQL Server-Ziel nicht in Paketen verwenden, die auf eine SQL Server-Datenbank auf einem Remoteserver zugreifen. Stattdessen sollten die Pakete das OLE DB-Ziel verwenden.

Das SQL Server-Ziel bietet die gleiche Hochgeschwindigkeitseinfügung von Daten in SQL Server, die der Bulk Insert-Task bereitstellt; Durch die Verwendung des SQL Server-Ziels kann ein Paket jedoch Transformationen auf Spaltendaten anwenden, bevor die Daten in SQL Server geladen werden.

Zum Laden von Daten in SQL Server sollten Sie die Verwendung des SQL Server-Ziels anstelle des OLE DB-Ziels in Erwägung ziehen

2. OLEDB-Ziel

Gemäß der offiziellen OLEDB-Destination-Dokumentation:

OLEDB-Ziel – Schnellladeoption:Laden Sie Daten in eine Tabelle oder Ansicht im OLE DB-Ziel und verwenden Sie die Schnellladeoption, die für Masseneinfügungen optimiert sind

3. OLEDB-Ziel vs. SQL Server-Ziel

Laut SQL Server-Ziel vs. OLE DB-Ziel – MSDN-Thema:

Donald Farmer, der ehemalige Group Program Manager für Integration Services, sagte, dass Sie mit dem SQL Server Destination eine Leistungssteigerung von 5 bis 10 % erzielen können .

Verweisen Sie außerdem auf den folgenden Beitrag von Matt Masson, einem Datenintegrationsspezialisten bei Microsoft, in dem er die folgende Frage beantwortete:

Soll ich das SQL Server-Ziel verwenden?

Die Antwort war

Nein

...

Meine Empfehlung lautet:Wenn Sie jedes bisschen Leistung benötigen (eine Leistungssteigerung von 10 % bei einer 10-stündigen Last kann erheblich sein), probieren Sie das SQL Server-Ziel aus, um zu sehen, wie es für Sie funktioniert. Beachten Sie jedoch die folgenden Einschränkungen des SQL Server-Ziels:

  • Sie müssen SSIS auf demselben Computer ausführen wie die Zieldatenbank
  • Sie müssen das Paket als Administrator ausführen
  • Es ist sehr schwierig zu debuggen, wenn etwas schief geht

Angesichts dieser Einschränkungen empfehle ich die Verwendung des OLE DB-Ziels auch wenn Sie mit dem SQL Server-Ziel eine Leistungssteigerung feststellen.

3.1. Der Leitfaden zur Leistung beim Laden von Daten

(Aktualisierung @ 2019-03-25)

Bei der Suche nach Best Practices für SSIS habe ich einen sehr hilfreichen Microsoft-Artikel gefunden, der als Referenz verwendet werden kann:

  • Leitfaden zur Leistung beim Laden von Daten

In diesem Artikel haben sie einen Vergleich zwischen allen Datenlademethoden durchgeführt, einschließlich SQL Server-Ziel und OLEDB-Ziel, sie haben Folgendes erwähnt:

SQL Server-Ziel Das SQL Server-Ziel ist die schnellste Methode zum Massenladen von Daten aus einem Integration Services-Datenfluss in SQL Server. Dieses Ziel unterstützt alle Massenladeoptionen von SQL Server – außer ROWS_PER_BATCH.

Beachten Sie, dass dieses Ziel Shared-Memory-Verbindungen mit SQL Server erfordert. Dies bedeutet, dass es nur verwendet werden kann, wenn Integration Services auf demselben physischen Computer wie SQL Server ausgeführt wird.

OLE DB-Ziel: Das OLE DB-Ziel unterstützt alle Massenladeoptionen für SQL Server. Um jedoch das geordnete Massenladen zu unterstützen, ist eine zusätzliche Konfiguration erforderlich. Weitere Informationen finden Sie unter „Sortierte Eingabedaten“. Um die Massen-API zu verwenden, müssen Sie dieses Ziel für „schnelles Laden“ konfigurieren.

Das OLE DB-Ziel kann sowohl TCP/IP- als auch Named Pipes-Verbindungen zu SQL Server verwenden. Dies bedeutet, dass das OLE DB-Ziel im Gegensatz zum SQL Server-Ziel auf einem anderen Computer als dem Massenladeziel ausgeführt werden kann. Da Integration Services-Pakete, die das OLE DB-Ziel verwenden, nicht auf dem SQL Server-Computer selbst ausgeführt werden müssen, können Sie den ETL-Fluss mit Workhorse-Servern horizontal skalieren.

3.2. Persönliche Erfahrung

(Aktualisierung @ 2019-03-25)

Da diese Frage von vielen als Referenz verwendet wird und nachdem ich mehr Erfahrung in diesem Bereich gesammelt habe, habe ich diesen Abschnitt hinzugefügt, um meine persönlichen Erfahrungen mit der Verwendung von SQL Server-Zielen zu erwähnen.

Obwohl in der offiziellen Dokumentation erwähnt wird, dass das SQL Server-Ziel die Leistung erhöht, empfehle ich aus vielen Gründen überhaupt nicht, diese Komponenten zu verwenden:

  1. Es erfordert, dass der Zielserver und der ETL-Server identisch sind (funktioniert nur mit lokalem SQL-Server)
  2. Es wird immer eine Ausnahme ausgelöst, die keine Bedeutung hat
  3. Nach Tests mit großen Datenmengen ist der Leistungsunterschied mit OLEDB-Ziel vernachlässigbar (getestet mit etwa 500 GB Daten, die in Blöcken geladen wurden, und der Zeitunterschied beträgt weniger als eine Minute)

Sie können sich auch auf den folgenden Beitrag beziehen (von @billinkc) um weitere Informationen zu diesem Thema zu erhalten:

  • Sollten sich SSIS-Pakete und die SQL-Datenbank auf demselben Server befinden?

4. Fazit

Basierend auf Microsoft-Artikeln können Sie sagen, dass SQL Server Destination Erhöhen Sie die Leistung beim Einfügen von Daten (es verwendet BULK-Einfügung) , aber es ist für einen bestimmten Fall konzipiert, nämlich den lokalen SQL-Server. OLEDB Destination ist allgemeiner und wird in den anderen Fällen und durch die Verwendung von Fast Load empfohlen Datenzugriffsmodus (der auch BULK-Einfügung verwendet) auf dem OLE DB destination Dadurch wird die Leistung beim Laden von Daten erhöht.

Auf der anderen Seite, basierend auf meiner Erfahrung und vielen Artikeln, die von SSIS-Experten geschrieben wurden, wird überhaupt nicht empfohlen, SQL Server Destination zu verwenden da es nicht stabil ist und oft eine Ausnahme auslöst und die Leistung als vernachlässigbar angesehen werden kann.

Zusätzliche Informationen

Kürzlich habe ich einen ausführlichen Artikel zu diesem Thema veröffentlicht. Sie können es überprüfen unter:

  • SSIS OLE DB-Ziel im Vergleich zu SQL Server-Ziel