Entwerfen von SSIS-Paketen für Parallelität (SQL Server-Video)

Betrifft: Microsoft SQL Server Integration Services

Autoren: Matt Carroll, Microsoft Corporation

Länge: 00:12:37

Größe: 29,2 MB

Typ: WMV-Datei

Video ansehen

Verwandte Hilfethemen:

Erstellen und Ändern von Bezeichnerspalten

Effizientes Übertragen von Daten durch Partitionswechsel

Verwandte Artikel und Blogeinträge:

Top 10 SQL Server Integration Services Best Practices (in englischer Sprache)

ETL World Record (in englischer Sprache)

Weitere Videos:

Messen und Verstehen der Leistung von SSIS-Paketen im Unternehmen (SQL Server-Video)

Optimieren des SSIS-Paketdatenflusses im Unternehmen (SQL Server-Video)

Verstehen von SSIS-Datenflusspuffern (SQL Server-Video)

Videozusammenfassung

In diesem Video wird das Steigern der Leistung von Integration Services-Paketen dargestellt, die für Parallelität entworfen wurden.

Danksagungen zum Video

Vielen Dank an Thomas Kejser für seinen Beitrag zum Material der Reihe SSIS: Designing and Tuning for Performance SQL Server Video Series. Dies ist das vierte Video der Reihe.

Vielen Dank an Carla Sabotta und Douglas Laudenschlager für die Beratung und ihr wertvolles Feedback.

Technische Hinweise zum Video

Dd795221.note(de-de,SQL.100).gifHinweis:
Bei den technischen Hinweisen handelt es sich um ausgewählte Auszüge aus dem Video.

Die Kernbereiche des parallelen Entwurfsverfahrens umfassen Folgendes: Partitionieren des Problems, Beseitigen von Konflikten und effiziente Zeitplanung.

Der Grundgedanke des parallelen Entwurfsverfahrens ist, ein umfassendes Problem in kleinere unabhängige Teilbereiche zu zergliedern und die Arbeit zu verteilen. Bei Integration Services bedeutet das Zergliedern des Problems in kleinere Teilbereiche das Partitionieren der Daten, die verarbeitet werden müssen. Dabei sollte es sich möglichst um gleich große Partitionen handeln, da dies eine optimale Zeitplanung und die Verteilung der Arbeit erheblich erleichtert.

Als Nächstes müssen Sie die Konflikte zwischen den kleineren Arbeitsbereichen beseitigen, sodass diese konfliktfrei parallel bearbeitet werden können. Das Ziel ist ein statusloser Entwurf, bei dem alle Arbeitseinheiten in sich abgeschlossen sind und keine externe Abstimmung erfordern. Außerdem treten so weniger Konflikte zwischen externen Ressourcen auf.

Abschließend verteilen Sie die kleinen unabhängigen Arbeitsbereiche, damit diese schneller fertig gestellt werden können. Dabei wird die Arbeit so geplant und verteilt, dass die wichtigsten Ressourcen effizient genutzt werden. Weiterhin sollte eine vernünftige Zeitplanung aufgestellt werden, damit langfristige Tasks nicht die Laufzeit dominieren. Wenn Sie sich ein Gantt-Diagramm der zu erledigenden Arbeit vorstellen, soll die Arbeit möglichst gleichmäßig verteilt sein, damit die gesamte Arbeit so früh wie möglich fertig gestellt wird.

Partitionieren des Problems

Die Quelldaten sollen in kleinere, ungefähr gleich große Einheiten partitioniert werden. Diese Partitionierung können Sie anhand natürlicher Bereiche innerhalb der Daten vornehmen, zum Beispiel nach Zeit oder Geographie. Wenn Sie über eine Identitätsspalte verfügen, können Sie auch mithilfe des Modulo-Operators gleichmäßige Teile aus den enthaltenen Werten bestimmen. Andernfalls können Sie eine Hash-Funktion auf wichtige Spalten anwenden, um die Partitionierung vorzunehmen.

Zusätzlich zur Partitionierung der Quelltabelle müssen die Zieltabellen entsprechend der Partitionierung der Quelldaten partitioniert werden. Der Befehl SQL SWITCH ist eine sehr effiziente Möglichkeit, um Partitionen zu einer Tabelle hinzuzufügen bzw. aus einer Tabelle zu entfernen.

Beseitigen von Konflikten

Nach dem Partitionieren des Problems müssen Sie potenzielle Konflikte zwischen den einzelnen Partitionen beseitigen. Ein zustandsloser Entwurf ist wichtig, um komplexe Wechselwirkungen und mögliche Konflikte zu vermeiden. Um sicherzustellen, dass es sich um ein zustandsloses Paket handelt, müssen alle für die Bearbeitung erforderlichen Informationen an das Paket übergeben werden.

Vermeiden Sie Sperrkonflikte. Viele Verknüpfungen zu derselben Tabelle können zu Konflikten führen. Verwenden Sie partitionierte Tabellen und nutzen Sie SQL SWITCH, um dies zu vermeiden.

Achten Sie auf Steuerungshardwarekonflikte. Verwenden Sie zusätzliche oder schnellere Laufwerke, wenn die Laufwerks-E/A ein Problem darstellt. Fügen Sie Netzwerkcontroller hinzu oder führen Sie Upgrades durch, wenn die Netzwerk-E/A ein Problem darstellt. Verwenden Sie einen Computer mit mehreren Prozessoren oder mehr Arbeitsspeicher bzw. mehrere Computer, wenn die CPU-Leistung oder die Speichernutzung ein Problem darstellt. Bedenken Sie, dass Integration Services im Speicher ausgeführt wird. Stellen Sie aus diesem Grund sicher, dass für jedes Paket ausreichend Speicher zur Verfügung steht.

Effiziente Planung

Nach der Partitionierung in kleinere Tasks und der Beseitigung von Konflikten zwischen diesen Tasks müssen Sie die effiziente Ausführung der Tasks planen. Definieren Sie zunächst eine Prioritätenwarteschlange für die zu erledigende Arbeit, um einen effizienten Zeitplan zu erstellen. Eine SQL-Tabelle ist hierfür bestens geeignet.

Starten Sie dann mehrere Kopien des Pakets, das für die Verarbeitung erstellt wurde. Dies können Sie einfach und effizient erledigen, indem Sie mit dem Windows-Befehl START „dtexec.exe“ aufrufen. Die Anzahl der gestarteten Pakete legt den Grad der Parallelität fest.

Mit jedem dieser Pakete werden dann Tasks aus der Taskwarteschlange gemäß ihrer Priorität abgearbeitet, bis alle Tasks bearbeitet sind. Mit einer Schleife innerhalb des Pakets wird zunächst ein Task aus der Prioritätenwarteschlange abgerufen und dann die in diesem Task definierte Arbeit ausgeführt, bis die Taskwarteschlange abgearbeitet ist.

Demo

Beim ersten Ausführen der Demo werden die Tasks durch eine einzelne Paketinstanz der Reihe nach abgearbeitet.

Beim zweiten Ausführen der Demo werden zwei Prozesse parallel ausgeführt. Die Tasks werden in Zweierbatches fertig gestellt, und die Gesamtlaufzeit der Demo verringert sich von 64 auf 36 Sekunden – also fast um die Hälfte.

Beim dritten Ausführen der Demo werden vier Prozesse parallel ausgeführt. Die Zeit für die einzelnen Tasks steigt von 9 auf etwa 14 Sekunden. Die Gesamtlaufzeit verringert sich von 36 auf etwa 28 Sekunden.

Beim letzten Ausführen der Demo werden acht Prozesse parallel ausgeführt. Da alle Tasks gleichzeitig ausgeführt werden, steigt die Zeit für die einzelnen Tasks auf etwa 27 Sekunden, und die Gesamtlaufzeit entspricht etwa der Gesamtlaufzeit mit vier Prozessen. Der Grund hierfür liegt in einem Engpass bei der Datenträger-E/A, da alle acht Prozesse gleichzeitig versuchen, Datendateien vom Datenträger zu lesen. Um dieses Problem zu beheben, sollten die Dateien auf separate Datenträger und Controller verteilt oder eine schnellere Datenträgertechnologie verwendet werden.

Siehe auch

Andere Ressourcen

SQLCAT-Team

Hilfe und Informationen

Informationsquellen für SQL Server 2008