Database
 sql >> Datenbank >  >> RDS >> Database

Top 10 Methoden zur Verbesserung der ETL-Leistung mit SSIS

Extraction Transformation Load (ETL) ist das Rückgrat für jedes Data Warehouse. In der Data-Warehouse-Welt werden Daten durch den ETL-Prozess verwaltet, der aus drei Prozessen besteht:Extrahieren – Ziehen/Erfassen von Daten aus Quellen, Transformation – Ändern von Daten in das erforderliche Format und Laden und Pushen von Daten zum Ziel im Allgemeinen in ein Data Warehouse oder ein Datamart.

Lernen Sie SSIS und starten Sie noch heute Ihre kostenlose Testversion!

SQL Server Integration Services (SSIS) ist das Tool in der ETL-Familie, das für die Entwicklung und Verwaltung eines Enterprise Data Warehouse nützlich ist. Ein Data Warehouse arbeitet nach seiner eigenen Charakterisierung mit einem riesigen Datenvolumen, und die Leistung ist eine große Herausforderung bei der Verwaltung eines riesigen Datenvolumens für jeden Architekten oder DBA.

Überlegungen zur ETL-Verbesserung

Heute werde ich erörtern, wie einfach Sie die ETL-Leistung verbessern oder ein leistungsstarkes ETL-System mit Hilfe von SSIS entwerfen können. Zum besseren Verständnis werde ich zehn Methoden in zwei verschiedene Kategorien einteilen; erstens Überlegungen zur Entwurfszeit von SSIS-Paketen und zweitens die Konfiguration verschiedener Eigenschaftswerte von Komponenten, die im SSIS-Paket verfügbar sind.

Überlegungen zur Entwurfszeit von SSIS-Paketen

Nr. 1 Daten parallel extrahieren:SSIS bietet die Möglichkeit, Daten mithilfe von Sequence-Containern im Kontrollfluss parallel zu extrahieren. Sie können ein Paket so entwerfen, dass es Daten aus nicht abhängigen Tabellen oder Dateien parallel abrufen kann, was dazu beiträgt, die ETL-Gesamtausführungszeit zu reduzieren.

#2 Erforderliche Daten extrahieren:Ziehen Sie nur den erforderlichen Datensatz aus einer beliebigen Tabelle oder Datei. Sie müssen die Tendenz vermeiden, alles, was in der Quelle verfügbar ist, für jetzt zu ziehen, was Sie in Zukunft verwenden werden; Es verbraucht Netzwerkbandbreite, verbraucht Systemressourcen (E/A und CPU), erfordert zusätzlichen Speicherplatz und verschlechtert die Gesamtleistung des ETL-Systems.

Wenn Ihr ETL-System wirklich dynamischer Natur ist und sich Ihre Anforderungen häufig ändern, wäre es besser, andere Designansätze wie Metadaten-gesteuertes ETL usw. in Betracht zu ziehen, anstatt so zu entwerfen, dass alles auf einmal abgerufen wird.

#3 Vermeiden Sie die Verwendung asynchroner Transformationskomponenten:SSIS ist ein reichhaltiges Tool mit einer Reihe von Transformationskomponenten, um komplexe Aufgaben während der ETL-Ausführung zu erfüllen, aber gleichzeitig kostet es Sie viel, wenn diese Komponenten nicht richtig verwendet werden.

In SSIS sind zwei Kategorien von Transformationskomponenten verfügbar:Synchron und Asynchron .

Synchrone Transformationen sind jene Komponenten, die jede Zeile verarbeiten und zur nächsten Komponente/Ziel verschieben, sie verwenden zugewiesenen Pufferspeicher und benötigen keinen zusätzlichen Speicher, da es sich um eine direkte Beziehung zwischen Eingabe-/Ausgabedatenzeile handelt, die vollständig in den zugewiesenen Speicher passt. Komponenten wie Lookup, abgeleitete Spalten und Datenkonvertierung usw. fallen in diese Kategorie.

Asynchrone Transformationen sind jene Komponenten, die zuerst Daten im Pufferspeicher speichern und dann Operationen wie Sortieren und Aggregieren verarbeiten. Um die Aufgabe abzuschließen, ist zusätzlicher Pufferspeicher erforderlich, und bis der Pufferspeicher verfügbar ist, hält er die gesamten Daten im Speicher und blockiert die Transaktion, was auch als Blockierungstransformation bezeichnet wird. Um die Aufgabe abzuschließen, weist die SSIS-Engine (Datenfluss-Pipeline-Engine) zusätzlichen Pufferspeicher zu, was wiederum ein Overhead für das ETL-System ist. Komponenten wie Sort, Aggregate, Merge, Join usw. fallen in diese Kategorie.

Insgesamt sollten Sie asynchrone Transformationen vermeiden, aber wenn Sie in eine Situation geraten, in der Sie keine andere Wahl haben, müssen Sie sich bewusst sein, wie Sie mit den verfügbaren Eigenschaftswerten dieser Komponenten umgehen. Ich werde sie später in diesem Artikel besprechen.

Nr. 4 Optimale Verwendung von Ereignissen in Ereignishandlern:Um den Fortschritt der Paketausführung zu verfolgen oder andere geeignete Maßnahmen für ein bestimmtes Ereignis zu ergreifen, stellt SSIS eine Reihe von Ereignissen bereit. Ereignisse sind sehr nützlich, aber die übermäßige Verwendung von Ereignissen kostet zusätzlichen Overhead bei der ETL-Ausführung.

Hier müssen Sie alle Merkmale validieren, bevor Sie ein Ereignis im SSIS-Paket aktivieren.

#5 Sie müssen sich des Zieltabellenschemas bewusst sein, wenn Sie mit einer großen Datenmenge arbeiten. Sie müssen zweimal überlegen, wenn Sie eine riesige Datenmenge aus der Quelle ziehen und in ein Data Warehouse oder einen Data Mart übertragen müssen. Möglicherweise treten Leistungsprobleme auf, wenn Sie versuchen, große Datenmengen mit einer Kombination aus Einfüge-, Aktualisierungs- und Löschvorgängen (DML) in das Ziel zu verschieben, da die Möglichkeit besteht, dass die Zieltabelle geclusterte oder nicht geclusterte Indizes enthält, was zu Problemen führen kann aufgrund von DML-Operationen werden viele Daten im Speicher verschoben.

Wenn ETL aufgrund einer großen Menge von DML-Vorgängen in einer Tabelle mit einem Index Leistungsprobleme hat, müssen Sie entsprechende Änderungen am ETL-Design vornehmen, z. B. vorhandene gruppierte Indizes in der Vorausführungsphase löschen und alle Indizes neu erstellen in der Post-Execute-Phase. Abhängig von Ihrer Situation finden Sie möglicherweise andere bessere Alternativen, um das Problem zu lösen.

Komponenteneigenschaften konfigurieren

#6 Steuern Sie die parallele Ausführung einer Aufgabe, indem Sie die MaxConcurrentExecutables konfigurieren und EngineThreads Eigentum. SSIS-Paket- und Datenflussaufgaben haben eine Eigenschaft, um die parallele Ausführung einer Aufgabe zu steuern:MaxConcurrentExecutables ist die Eigenschaft auf Paketebene und hat einen Standardwert von -1 , was bedeutet, dass die maximale Anzahl von Aufgaben, die ausgeführt werden können, gleich der Gesamtzahl von Prozessoren auf der Maschine plus zwei ist;


Paket

EngineThreads ist eine Eigenschaft auf Datenflussaufgabenebene und hat einen Standardwert von 10, der die Gesamtzahl von Threads angibt, die zum Ausführen der Datenflussaufgabe erstellt werden können.


Datenflussaufgabe

Sie können die Standardwerte dieser Eigenschaften je nach ETL-Anforderungen und Ressourcenverfügbarkeit ändern.

#7 Konfigurieren Sie die Option für den Datenzugriffsmodus im OLEDB-Ziel. In der SSIS-Datenflussaufgabe finden wir das OLEDB-Ziel, das einige Optionen bietet, um Daten in die Zieltabelle zu verschieben, unter dem Datenzugriffsmodus; zuerst die Option „Tabelle oder Ansicht“, die jeweils eine Zeile einfügt; Zweitens die Option „Schnelles Laden von Tabellen oder Ansichten“, die intern die Bulk-Insert-Anweisung verwendet, um Daten in die Zieltabelle zu senden, was im Vergleich zu anderen Optionen immer eine bessere Leistung bietet. Sobald Sie die Option „Schnelles Laden“ wählen, haben Sie mehr Kontrolle über das Verhalten der Zieltabelle während eines Daten-Push-Vorgangs, wie z. B. Identität beibehalten, Nullen beibehalten, Tabellensperre und Einschränkungen prüfen.


OLE DB-Ziel-Editor

Es wird dringend empfohlen, die Schnellladeoption zu verwenden, um Daten in die Zieltabelle zu verschieben, um die ETL-Leistung zu verbessern.

Nr. 8, Konfigurieren Sie Zeilen pro Stapel und maximale Einfüge-Commit-Größe im OLEDB-Ziel. Diese beiden Einstellungen sind wichtig, um die Leistung von tempdb und des Transaktionsprotokolls zu steuern, da mit den angegebenen Standardwerten dieser Eigenschaften Daten unter einem Stapel und einer Transaktion in die Zieltabelle verschoben werden. Es erfordert eine übermäßige Nutzung von tembdb und des Transaktionsprotokolls, was aufgrund des übermäßigen Verbrauchs von Arbeitsspeicher und Festplattenspeicher zu einem ETL-Leistungsproblem wird.


OLE DB-Ziel-Editor

Um die ETL-Leistung zu verbessern, können Sie basierend auf dem erwarteten Datenvolumen einen positiven ganzzahligen Wert in beide Eigenschaften eingeben, was dazu beiträgt, eine ganze Reihe von Daten in mehrere Stapel aufzuteilen, und Daten in einem Stapel können je nach wieder in die Zieltabelle übernommen werden Spezifizierter Wert. Dadurch wird die übermäßige Verwendung von tempdb und Transaktionsprotokoll vermieden, was zur Verbesserung der ETL-Leistung beiträgt.

#9 Verwendung des SQL Server-Ziels in einer Datenflussaufgabe. Wenn Sie Daten in eine lokale SQL Server-Datenbank pushen möchten, wird dringend empfohlen, SQL Server Destination zu verwenden, da es viele Vorteile bietet, um die Einschränkungen anderer Optionen zu überwinden, was Ihnen hilft, die ETL-Leistung zu verbessern. Es verwendet beispielsweise die in SQL Server integrierte Masseneinfügungsfunktion, gibt Ihnen jedoch die Möglichkeit, eine Transformation anzuwenden, bevor Daten in die Zieltabelle geladen werden. Abgesehen davon haben Sie die Möglichkeit, den Trigger zu aktivieren/deaktivieren, der beim Laden von Daten ausgelöst wird, was auch dazu beiträgt, den ETL-Overhead zu reduzieren.


SQL Server-Zieldatenflusskomponente

#10 Vermeiden Sie implizite Typumwandlung. Wenn Daten aus einer Einfachdatei stammen, behandelt der Verbindungs-Manager für Einfachdateien alle Spalten als Datentyp einer Zeichenfolge (DS_STR), einschließlich numerischer Spalten. Wie Sie wissen, verwendet SSIS den Pufferspeicher, um den gesamten Datensatz zu speichern, und wendet die erforderliche Transformation an, bevor Daten in die Zieltabelle verschoben werden. Wenn nun alle Spalten String-Datentypen sind, wird mehr Platz im Puffer benötigt, was die ETL-Leistung verringert.

Um die ETL-Leistung zu verbessern, sollten Sie alle numerischen Spalten in den entsprechenden Datentyp konvertieren und eine implizite Konvertierung vermeiden, die der SSIS-Engine hilft, mehr Zeilen in einem einzigen Puffer unterzubringen.

Zusammenfassung der ETL-Leistungsverbesserungen

In diesem Artikel haben wir untersucht, wie einfach die ETL-Leistung zu jedem Zeitpunkt kontrolliert werden kann. Dies sind 10 gängige Methoden zur Verbesserung der ETL-Leistung. Möglicherweise gibt es weitere Methoden, die auf verschiedenen Szenarien basieren und durch die die Leistung verbessert werden kann.

Insgesamt können Sie mit Hilfe der Kategorisierung erkennen, wie Sie mit der Situation umgehen. Wenn Sie sich in der Entwurfsphase eines Data Warehouse befinden, müssen Sie sich möglicherweise auf beide Kategorien konzentrieren, aber wenn Sie ein Legacy-System unterstützen, arbeiten Sie zunächst eng mit der zweiten Kategorie zusammen.