Problembehandlung der Paketleistung
Aktualisiert: 15. September 2007
Integration Services enthält Features und Tools, die Sie zur Behandlung von Problemen mit der Leistung von Paketen verwenden können. Mit der Protokollierung können Sie z. B. die Laufzeitinformationen über die Pakete erfassen und mit den Leistungsindikatoren das Datenflussmodul überwachen. In diesem Thema erhalten Sie Informationen zu diesen Features sowie Vorschläge, wie beim Entwurf von Paketen allgemeine Leistungsprobleme vermieden werden können.
Entwerfen von leistungsfähigeren Datenflüssen
Testen Sie die folgenden Vorschläge mit Ihrem Paket, um Probleme mit der Leistung von Datenflüssen im Paket zu beheben:
Optimieren von Abfragen
Eine Vielzahl von Datenflusskomponenten verwendet Abfragen entweder beim Extrahieren von Daten aus Quellen oder bei Suchvorgängen zum Erstellen von Verweistabellen. Die Standardabfrage verwendet die Syntax SELECT * FROM <tableName>. Bei diesem Abfragetyp werden alle Spalten in der Quelltabelle zurückgegeben. Wenn alle Spalten zur Entwurfszeit zur Verfügung stehen, ist es möglich, eine beliebige Spalte als Such-, Pass-Through- oder Quellspalte auszuwählen. Nachdem Sie jedoch die zu verwendenden Spalten ausgewählt haben, sollten Sie die Abfrage so ändern, dass sie nur die verwendeten Spalten enthält. Sie können die Abfrage eingeben oder den Abfrage-Generator zum Erstellen der Abfrage verwenden. Durch das Entfernen von überflüssigen Spalten wird der Datenfluss in einem Paket effizienter, denn je enger eine Zeile, desto mehr Zeilen passen in einen Puffer und desto weniger aufwendig ist es, alle Zeilen im Dataset zu verarbeiten.
Hinweis: |
---|
Wenn Sie ein Paket in Business Intelligence Development Studio ausführen, werden auf der Registerkarte Status des SSIS-Designers Warnungen aufgelistet, u. a. eine Warnung für alle Datenspalten, die dem Datenfluss von einer Quelle zur Verfügung gestellt werden, jedoch dann nicht von Downstream-Datenflusskomponenten verwendet werden. Sie können die RunInOptimizedMode-Eigenschaft verwenden, um diese Spalten automatisch zu entfernen. |
Konfigurieren der Eigenschaften des Datenflusstasks
Sie können die folgenden leistungsbeeinflussenden Eigenschaften des Datenflusstasks konfigurieren:
- Geben Sie den Speicherort für die temporäre Speicherung von Pufferdaten (BufferTempStoragePath) sowie von Spalten an, die BLOB-Daten (Binary Large Object) (BLOBTempStoragePath) enthalten. Standardmäßig ist der Wert dieser Eigenschaft der Wert der TEMP-Umgebungsvariable. Sie können andere Ordner auf einem anderen Festplattenlaufwerk zum Speichern der temporären Datei angeben oder die Dateien auf mehrere Laufwerke verteilt speichern. Sie können mehrere Verzeichnisse angeben, indem Sie die Verzeichnisnamen durch Semikolons voneinander trennen.
- Definieren Sie die Standardgröße des Puffers, den der Task verwendet, und die maximale Anzahl von Zeilen im Puffer. Legen Sie dazu die DefaultBufferSize-Eigenschaft bzw. die DefaultBufferMaxRows-Eigenschaft fest. Die Standardpuffergröße beträgt 10 Megabyte, die maximale Puffergröße 100 Megabyte. Der Standardwert für die maximale Anzahl von Zeilen beträgt 10.000.
- Legen Sie über die EngineThreads-Eigenschaft die Anzahl von Threads fest, die der Task während der Ausführung verwenden kann. Die Eigenschaft liefert dem Datenflussmodul einen Vorschlag für die Anzahl der zu verwendenden Threads. Der Standardwert beträgt 5, der Minimalwert 2. Unabhängig von dem für die Eigenschaft festgelegten Wert verwendet das Modul jedoch nie mehr Threads als notwendig. Das Modul verwendet bei Bedarf auch mehr Threads, als in der Eigenschaft angegeben, um Parallelitätsprobleme zu vermeiden.
- Geben Sie an, ob der Datenflusstask im optimierten Modus ausgeführt werden soll (RunInOptimizedMode-Eigenschaft). Der optimierte Modus verbessert die Leistung, indem nicht verwendete Spalten, Ausgaben und Komponenten aus dem Datenfluss entfernt werden.
Hinweis: Die gleichnamige Eigenschaft RunInOptimizedMode kann in Business Intelligence Development Studio auf Projektebene festgelegt werden, um anzugeben, dass der Datenflusstask beim Debuggen im optimierten Modus ausgeführt werden soll. Diese Eigenschaft setzt die RunInOptimizedMode-Eigenschaft von Datenflusstasks zur Entwurfszeit außer Kraft.
Grundlegendes zum Anpassen der Puffergrößen durch den Datenflusstask
Zum Anpassen der Puffergrößen schätzt das Datenflussmodul zuerst die Größe einer einzelnen Datenzeile. Dann multipliziert es die Größe der Zeile mit dem Wert von DefaultBufferMaxRows, um einen vorläufigen Arbeitswert für die Puffergröße zu erhalten.
- Wenn das Ergebnis größer ist als der Wert von DefaultBufferSize, verringert das Modul die Anzahl der Zeilen.
- Wenn das Ergebnis kleiner ist als die intern berechnete minimale Puffergröße, vergrößert das Modul die Anzahl der Zeilen.
- Wenn das Ergebnis zwischen der minimalen Puffergröße und dem Wert von DefaultBufferSize liegt, nähert das Modul die Größe des Puffers so gut wie möglich an das Produkt aus geschätzter Zeilengröße und Wert von DefaultBufferMaxRows an.
Anpassen der Puffergrößenanpassung
Verwenden Sie beim Testen der Leistung Ihrer Datenflusstasks zu Anfang die Standardwerte für DefaultBufferSize und DefaultBufferMaxRows. Aktivieren Sie die Protokollierung für den Datenflusstask, und wählen Sie das BufferSizeTuning-Ereignis aus, um festzustellen, wie viele Zeilen jeder Puffer enthält.
Bevor Sie mit dem Anpassen der Puffergrößenanpassung beginnen, sollten Sie die Größe jeder Datenspalte verringern, indem Sie nicht benötigte Spalten entfernen und die Datentypen entsprechend konfigurieren. Dies ist die wichtigste Verbesserungsmöglichkeit, die Sie vornehmen können.
Wenn genügend Arbeitsspeicher zur Verfügung steht, sollten Sie anstelle von wenigen großen Puffern besser viele kleine Puffer verwenden. Sie können also die Leistung durch Verringern der Gesamtanzahl der zum Speichern von Daten benötigten Puffer sowie durch maximale Auslastung des Pufferspeichers mit Datenspalten verbessern. Probieren Sie zum Bestimmen der optimalen Pufferanzahl und -größe verschiedene Wert für DefaultBufferSize und DefaultBufferMaxRows aus. Überwachen Sie dabei die Leistung und die vom BufferSizeTuning-Ereignis gemeldeten Informationen.
Hinweis: |
---|
Die in diesem Abschnitt behandelten Eigenschaften der Datenflusstasks müssen für jeden Datenflusstask in einem Paket einzeln festgelegt werden. |
Vermeiden unnötiger Sortierungen
Die Sortierung ist generell ein langsamer Vorgang. Durch Vermeiden unnötiger Sortierungen kann die Leistung des Paketdatenflusses verbessert werden.
Wenn die Quelldaten sortiert werden, entweder weil die SELECT-Abfrage eine ORDER BY-Klausel verwendet oder weil die Daten sortiert in die Quelle eingefügt wurden, können Sie einen Hinweis angeben, dass die Daten sortiert sind, und so die Verwendung einer Transformation zum Sortieren vermeiden, die anderenfalls zum Erfüllen der Sortieranforderungen von bestimmten Downstream-Transformationen erforderlich wäre. Für die Transformation für Zusammenführen und Zusammenführungsverknüpfung wird z. B. eine sortierte Eingabe benötigt. Um einen Hinweis zur Verfügung zu stellen, müssen Sie die IsSorted-Eigenschaft für die Ausgabe der Upstreamdatenfluss-Komponente auf True festlegen und die Sortierschlüsselspalten angeben, nach denen die Daten sortiert sind. Weitere Informationen finden Sie unter Vorgehensweise: Festlegen von Sortierungsattributen für eine Ausgabe.
Wenn die Daten im Datenfluss sortiert werden müssen, können Sie die Leistung verbessern, indem Sie den Datenfluss so entwerfen, dass so wenig Sortiervorgänge wie möglich verwendet werden. Wenn der Datenfluss z. B. eine Transformation für Multicast zum Kopieren des Datasets verwendet, können Sie das Dataset einmal sortieren, bevor die Transformation für Multicast ihre Arbeit beginnt, statt mehrere Ausgaben nach der Transformation zu sortieren.
Weitere Informationen finden Sie unter Transformation zum Sortieren, Transformation für Zusammenführen, Transformation für Zusammenführungsverknüpfung und Transformation für Multicast.
Optimieren der Transformation für langsam veränderliche Dimensionen
Der Assistent für langsam veränderliche Dimensionen und die Transformation für langsam veränderliche Dimensionen sind Allzwecktools, die die Anforderungen der meisten Benutzer erfüllen. Allerdings ist der vom Assistenten generierte Datenfluss nicht leistungsoptimiert.
Bei einer Transformation für langsam veränderliche Dimensionen sind die Transformationen für OLE DB-Befehle, die Aktualisierungen an jeweils einer einzelnen Zeile vornehmen, in der Regel die langsamsten Komponenten. Sie können die Leistung der Transformation für langsam veränderliche Dimensionen meist erhöhen, indem Sie die Transformationen für OLE DB-Befehle durch Zielkomponenten ersetzen. Diese Zielkomponenten speichern alle zu aktualisierenden Zeilen in einer Stagingtabelle. Sie können anschließend einen SQL ausführen-Task hinzufügen, der ein einzelnes, setbasiertes Transact-SQL-UPDATE an allen Zeilen gleichzeitig ausführt.
Fortgeschrittene Benutzer können einen benutzerdefinierten Datenfluss für die Verarbeitung langsam veränderlicher Dimensionen entwerfen, der für große Dimensionen optimiert wurde. Eine Erläuterung und ein Beispiel für diesen Ansatz finden Sie im Abschnitt "Unique dimension scenario" im Microsoft White Paper Project REAL: Business Intelligence ETL Design Practices (auf Englisch).
Optimieren der Aggregationen in der Transformation für das Aggregieren
Die Transformation für das Aggregieren umfasst eine Vielzahl von Eigenschaften, die Sie zur Leistungsverbesserung verwenden können. Wenn Ihnen die genaue oder ungefähre Anzahl der Schlüsselwerte im Dataset bekannt ist, können Sie die Keys- und KeysScale-Eigenschaften festlegen. Sie können auch die genaue und ungefähre Anzahl Schlüssel, die von der Transformation erwartungsgemäß verarbeitet werden, für einen COUNT DISTINCT-Vorgang angeben, indem Sie die CountDistinctKeys- und CountDistinctScale-Eigenschaften festlegen. Durch die Verwendung dieser Eigenschaften verhindert die Transformation die Reorganisation von zwischengespeicherten Summen und verbessert die Leistung.
Wenn Sie in einem Datenfluss mehrere Aggregationen erstellen müssen, sollten Sie diese mithilfe einer einzigen Transformation für das Aggregieren erstellen, anstatt mehrere Transformationen zu verwenden. Durch diesen Ansatz wird die Leistung insbesondere dann verbessert, wenn die Aggregationen Untergruppen anderer Aggregationen sind, da die Transformation den internen Speicher optimieren kann und die Eingangsdaten nur einmal durchsuchen muss. Wenn eine Aggregation z. B. eine GROUP BY-Klausel und eine AVG-Aggregation verwendet, kann die Leistung dadurch verbessert werden, dass sie in eine Transformation kombiniert werden. Sie sollten diesen Ansatz jedoch nur in Betracht ziehen, wenn der Speicher eine Einschränkung darstellt, da durch die Durchführung mehrerer Aggregationen innerhalb einer Transformation für das Aggregieren die Aggregationsvorgänge serialisiert werden.
Weitere Informationen finden Sie unter Transformation für das Aggregieren.
Konfigurieren von Pufferdrosselungen in der Transformation für die Zusammenführungsverknüpfung
Die Transformation für Zusammenführungsverknüpfung schließt die MaxBuffersPerInput-Eigenschaft ein, die die maximale Anzahl an Puffern angibt, die jeweils für eine Eingabe aktiviert sein kann. Sie können diese Eigenschaft verwenden, um den von den Puffern verwendeten Arbeitsspeicher und damit gleichzeitig die Leistung der Transformation zu optimieren. Je höher die Anzahl an Puffern ist, umso mehr Arbeitsspeicher verwendet die Transformation, und umso besser ist die Leistung. Der Standardwert der MaxBuffersPerInput-Eigenschaft ist 5. Dies ist zugleich die in den meisten Szenarien optimal funktionierende Anzahl an Puffern. Um die Leistung zu verbessern, möchten Sie eventuell die Anzahl der zu verwendenden Puffer leicht erhöhen oder senken, beispielsweise auf 4 oder 6 Puffer. Vermeiden Sie nach Möglichkeit die Verwendung einer sehr kleinen Anzahl an Puffern. Beispielsweise wirkt sich das Festlegen der Standardeinstellung der MaxBuffersPerInput-Eigenschaft von 5 auf 1 in bedeutendem Maße auf die Leistung aus. Sie sollten die MaxBuffersPerInput-Eigenschaft auch nicht auf 0 festlegen. Dieser Wert bedeutet, dass keine Drosselung auftritt und dass das Paket u. U. nicht vollständig ausgeführt wird, abhängig von den geladenen Daten und der verfügbaren Arbeitsspeichermenge.
Die Transformation für Zusammenführungsverknüpfung kann vorübergehend die verwendete Anzahl an Puffern über den in der MaxBuffersPerInput-Eigenschaft angegebenen Wert hinaus erhöhen, um Deadlocks zu umgehen. Wenn die Deadlockbedingung behoben wurde, gibt die MaxBuffersPerInput-Eigenschaft ihren konfigurierten Wert zurück.
Weitere Informationen finden Sie unter Transformation für Zusammenführungsverknüpfung.
Testen der Leistung von Zielen
Möglicherweise nimmt das Speichern von Daten in Zielen mehr Zeit als erwartet in Anspruch. Um herauszufinden, ob dies darauf zurückzuführen ist, dass das Ziel die Daten nicht schnell genug verarbeiten kann, können Sie das Ziel vorübergehend durch eine Transformation für Zeilenanzahl ersetzen. Sollte sich der Durchsatz wesentlich verbessern, ist wahrscheinlich das Ziel, das die Daten lädt, Ursache für die langsamere Verarbeitung. Weitere Informationen finden Sie unter Transformation für Zeilenanzahl.
Überwachen der Leistung von Paketen
Integration Services enthält Tools und Features, die Sie zum Überwachen der Leistung von Paketen verwenden können. Bestimmen Sie anhand der folgenden Vorschläge die Bestandteile des Pakets, die den größten Einfluss auf die Leistung haben:
Überprüfen der Informationen auf der Registerkarte Status
Im SSIS-Designer werden zusätzliche Informationen zur Ablaufsteuerung und zum Datenfluss beim Ausführen von Paketen in Business Intelligence Development Studio bereitgestellt. Auf der Registerkarte Status werden Tasks und Container in der Ausführungsreihenfolge aufgeführt. Diese Registerkarte enthält außerdem die Start- und Beendigungszeiten, Warnungen und Fehlermeldungen für jeden Task, Container sowie das Paket selbst. Sie enthält außerdem eine nach Ausführungsreihenfolge sortierte Liste der Datenflusskomponenten, Angaben zum Fortschritt in Prozent sowie die Anzahl der verarbeiteten Zeilen.
Konfigurieren der Protokollierung in Paketen
Integration Services enthält eine Vielzahl von Protokollanbietern, die eine Protokollierung von Informationen zur Laufzeit durch Pakete in verschiedene Dateitypen oder in SQL Server ermöglichen. Sie können Protokolleinträge für Pakete und für einzelne Paketobjekte, wie Tasks und Container, ermöglichen. Integration Services enthält eine Vielzahl von Tasks und Containern, und jeder Task und Container besitzt einen eigenen Satz mit beschreibenden Protokolleinträgen. Ein Paket, das z. B. einen Task 'SQL ausführen' enthält, kann einen Protokolleintrag schreiben, der die SQL-Anweisung auflistet, die von dem Task ausgeführt wurde, einschließlich der Parameterwerte für die Anweisung.
Die Protokolleinträge enthalten Informationen, z. B. die Start- und Beendigungszeit von Paketen und Paketobjekten, wodurch die Geschwindigkeit von ausgeführten Tasks und Containern reduziert wird. Weitere Informationen finden Sie unter Protokollierung der Paketausführung, Implementieren der Protokollierung in Pakete und Benutzerdefinierte Meldungen für die Protokollierung.
Konfigurieren der Protokollierung für Datenflusstasks
Der Datenflusstask stellt eine Reihe von benutzerdefinierten Protokolleinträge bereit, die zum Überwachen und Anpassen der Leistung verwendet werden können. Sie können beispielsweise Komponenten überwachen, die möglicherweise Arbeitsspeicherverluste verursachen, oder nachverfolgen, wie lange das Ausführen einer bestimmten Komponente dauert. Eine Liste dieser benutzerdefinierten Protokolleinträge sowie Beispiele für Protokollausgaben finden Sie unter Datenflusstask.
Überwachen der Leistung des Datenflussmoduls
Integration Services enthält einen Satz Leistungsindikatoren für die Überwachung der Leistung des Datenflussmoduls. So können Sie z. B. den gesamten Speicherplatz in Byte verfolgen, der von allen Puffern verwendet wird, und prüfen, ob genügend Speicher für die Komponenten zur Verfügung steht. Ein Puffer ist ein Speicherblock, der von einer Komponente zum Speichern von Daten verwendet wird. Weitere Informationen finden Sie unter Überwachen der Leistung des Datenflussmoduls.
Siehe auch
Aufgaben
Paketentwicklung (Problembehandlung)
Konzepte
Paketausführung (Problembehandlung)
SQL Server Integration Services-Dienst (Problembehandlung)
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version | Verlauf |
---|---|
15. September 2007 |
|
17. Juli 2006 |
|
05. Dezember 2005 |
|