Die Datenzugriffsmodi der OLE DB-Zielkomponente sind in zwei Varianten erhältlich: schnell und nicht schnell.
Schnell, entweder "Tabelle oder Ansicht - schnelles Laden" oder "Variable des Tabellen- oder Ansichtsnamens - schnelles Laden" bedeutet, dass Daten satzbasiert geladen werden.
Langsam - Entweder die Variable "Tabelle oder Ansicht" oder "Name der Tabelle oder Ansicht" führt dazu, dass SSIS Singleton-Einfügeanweisungen an die Datenbank ausgibt. Wenn Sie 10, 100, vielleicht sogar 10000 Zeilen laden, gibt es wahrscheinlich kaum nennenswerte Leistungsunterschiede zwischen den beiden Methoden. Irgendwann werden Sie jedoch Ihre SQL Server-Instanz mit all diesen kleinen Anfragen überlasten. Außerdem werden Sie Ihr Transaktionsprotokoll missbrauchen.
Warum sollten Sie jemals die nicht schnellen Methoden wollen? Schlechte Daten. Wenn ich 10000 Datenzeilen einsenden würde und die 9999. Zeile ein Datum vom 29.02.2015 hätte, hätten Sie 10.000 atomare Einfügungen und Commits / Rollbacks. Wenn ich die Fast-Methode verwendet habe, wird dieser gesamte Stapel von 10.000 Zeilen entweder alle oder keine von ihnen speichern. Und wenn Sie wissen möchten, welche Zeile (n) fehlerhaft sind, beträgt die niedrigste Granularitätsstufe 10.000 Zeilen.
Jetzt gibt es Ansätze, um so viele Daten wie möglich so schnell wie möglich zu laden und trotzdem mit schmutzigen Daten umzugehen. Es ist ein kaskadierender Fehleransatz und es sieht ungefähr so aus
Die Idee ist, dass Sie die richtige Größe finden, um so viel wie möglich auf einmal einzufügen. Wenn Sie jedoch schlechte Daten erhalten, werden Sie versuchen, die Daten in immer kleineren Stapeln erneut zu speichern, um zu den fehlerhaften Zeilen zu gelangen. Hier habe ich mit einer maximalen Einfüge-Commit-Größe (FastLoadMaxInsertCommit) von 10000 begonnen. Bei der Disposition der Fehlerzeile ändere ich sie in Redirect Row
von Fail Component
.
Das nächste Ziel ist das gleiche wie oben, aber hier versuche ich ein schnelles Laden und speichere es in Stapeln von 100 Zeilen. Testen Sie erneut oder geben Sie vor, eine angemessene Größe zu finden. Dies führt dazu, dass 100 Stapel von 100 Zeilen gesendet werden, da wir wissen, dass irgendwo dort mindestens eine Zeile vorhanden ist, die die Integritätsbeschränkungen für die Tabelle verletzt hat.
Ich füge dann eine dritte Komponente zum Mix hinzu, diesmal speichere ich in Stapeln von 1. Oder Sie können den Tabellenzugriffsmodus einfach von der Fast Load-Version weg ändern, da dies das gleiche Ergebnis liefert. Wir werden jede Zeile einzeln speichern und dadurch können wir "etwas" mit den einzelnen fehlerhaften Zeilen tun.
Schließlich habe ich ein ausfallsicheres Ziel. Vielleicht ist es die "gleiche" Tabelle wie das beabsichtigte Ziel, aber alle Spalten werden als deklariert nvarchar(4000) NULL
. Was auch immer an diesem Tisch landet, muss recherchiert und bereinigt / verworfen werden oder was auch immer Ihr schlechter Datenauflösungsprozess ist. Andere speichern eine flache Datei, aber was auch immer Sinn macht, um schlechte Daten zu verfolgen, funktioniert.