it-swarm.com.de

Gibt es eine Relevanz für "ROW PER BATCH" und "MAX INSERT COMMIT SIZE" in SSIS-Paketen?

Ich habe ein SSIS-Paket, das 2,5 GB DATEN mit 10 Millionen Datensätzen in eine SQL Server-Datenbank exportiert, die 10 Partitionen einschließlich der PRIMARY FILE GROUP enthält.

Vor dem Ändern der Standardeinstellung Max. Einfüge-Commit-Größe d. H. "2147483647" und Zeile pro Stapel . Die vollständige Umwandlung mit der Option für schnelles Laden dauerte 7 Minuten.

Aber nachdem man es mit einer Formel auf einen anständigen Wert gebracht hatte, war die Ausführung in nur 2 Minuten erledigt.

FYI- DefaultMaxBufferRows & DefaultMaxBufferSize waren in beiden Szenarien Standardwerte, d. H. 10000 bzw. 10 MB.

Zur Berechnung von Max Insert Commit size & Zeile pro Charge Below-Berechnung wird verwendet.

1) Berechnete Länge der Datensätze von der Quelle, die übertragen wird. das kommt um 1038 Bytes.

CREATE TABLE [dbo].[Game_DATA2](
    [ID] [int] IDENTITY(1,1) NOT NULL, -- AUTO CALCULATED
    [Number] [varchar](255) NOT NULL, -- 255 bytes
    [AccountTypeId] [int] NOT NULL, -- 4 bytes
    [Amount] [float] NOT NULL,-- 4 bytes
    [CashAccountNumber] [varchar](255) NULL, -- 255 bytes
    [StartDate] [datetime] NULL,-- 8 bytes
    [Status] [varchar](255) NOT NULL,-- 255 bytes
    [ClientCardNumber] [varchar](255) NULL -- 255 bytes
)

2) Zeilen pro Stapel = Paketgröße/Byte pro Datensatz = 32767/1038 = 32 Ca.

3) Maximale Einfügungs-Festschreibungsgröße = Paketgröße * Anzahl der Transaktionen = 32767 * 100 = 3276700 (Paketgröße und Anzahl der Transaktionen sind variabel und können sich je nach Anforderung ändern.)

Frage:

  • Gibt es eine Relevanz der Zeilen pro Stapel und der maximalen Größe für das Einfügungs-Commit? Da in einem Archiv article keine Informationen zum Ausführen von DFT (DATA FLOW TASK) erwähnt werden.

  • Funktioniert diese Konfiguration zusammen mit DefaultBuffermaxzie und
    DefualtBuffermaxrows? Wenn ja wie?

4

Diese Parameter beziehen sich nur auf DFT OLE DB Destination. OLE DB Destination gibt einen insert bulk-Befehl aus. Diese beiden Parameter steuern es auf folgende Weise: 

  • Maximale Größe des Einfüge-Commits - steuert, wie viele Daten in einen einzelnen Stapel eingefügt werden Wenn Sie also MICS auf 5000 und 9000 Zeilen festgelegt haben und in den ersten 5000 Ergebnissen ein Fehler auftritt, wird der gesamte Stapel von 5000 zurückgesetzt. MISC entspricht dem Argument BATCHSIZE im Befehl BULK INSERT transact-sql. 
  • Zeilen pro Stapel - lediglich ein Hinweis zum Abfrageoptimierer. Der Wert hiervon sollte auf die tatsächlich erwartete Anzahl von Zeilen festgelegt werden. RPB entspricht dem Argument ROWS_PER_BATCH dem Befehl BULK INSERT transact-sql.
    Die Angabe eines Wertes für die MICS hat einige Auswirkungen. Jeder Stapel wird in das Transaktionsprotokoll kopiert, was zu einem schnellen Wachstum führt, bietet jedoch die Möglichkeit, das Transaktionsprotokoll nach jedem Stapel zu sichern. Wenn Sie einen großen Stapel haben, wirkt sich dies negativ auf den Arbeitsspeicher aus, wenn Sie Indizes für die Zieltabelle haben. Wenn Sie keine Tabellensperren verwenden, werden möglicherweise weitere Sperren ausgeführt. 

BULK INSERT (Transact-SQL) - MS-Artikel zu diesem Befehl.

DefaultBuffermaxsize und DefaultBuffermaxrows steuert RAM Pufferverwaltung in DFT selbst und hat keine Interferenz mit den oben genannten Optionen.

5
Ferdipux

Lieber Harsimranjeet Singh;

Aufgrund meiner persönlichen Erfahrung bestimmt Rows_Per_Batch die Anzahl der Zeilen pro Batch, die von oledb_destination von der DFT-Komponente empfangen werden müssen, während DefualtBuffermaxrows die Bacth-Größe der DFT bestimmen, sodass DefualtBuffermaxrows von der Spezifikation des SSIS-Servers abhängig ist und Rows_Per_Batch vom Zielserver abhängig ist Set mit ihren Bedingungen. 

Maximum_Insert_Commit_Size bestimmt auch die Anzahl der Datensätze, wenn die Nummer getroffen wird, schreibt dann in die Protokolldatei und schreibt fest. Wenn Sie diese Zahl verringern, wird die Anzahl der Verweise auf das Protokoll erhöht. Dies ist schlecht, verursacht jedoch, dass MSDB (System DB) nicht aufgeblasen wird, und dies ist sehr gut für die Leistungssteigerung.

Ein weiterer Punkt ist die Beziehung zwischen DefualtBuffermaxrows und DeafultBufferSize, die zusammen gesetzt werden müssen. DefualtBuffermaxrows, multipliziert mit der Größe jedes Datensatzes, muss in etwa gleich DeafultBufferSize sein. Wenn dieser Wert größer ist, verringern Sie den Wert auf ssis, um diesen Wert zu erreichen. Wenn dieser Wert kleiner ist als die Mindestpuffergröße, erhöhen Sie ihn, um die Mindestpuffergröße zu berühren. Diese Vorgänge reduzieren die Leistung Ihres Pakets erheblich.

Viel Glück!

1
Saeid Yousefi

Zeilen pro Stapel - Der Standardwert für diese Einstellung ist -1, wodurch festgelegt wird, dass alle eingehenden Zeilen als einzelner Stapel behandelt werden. Sie können dieses Standardverhalten ändern und alle eingehenden Zeilen in mehrere Stapel aufteilen. Der zulässige Wert ist nur eine positive ganze Zahl, die die maximale Anzahl von Zeilen in einem Stapel angibt.

Maximale Größe des Einfügungs-Commits - Der Standardwert für diese Einstellung ist '2147483647' (größter Wert für den 4-Byte-Integer-Typ), der angibt, dass alle eingehenden Zeilen bei erfolgreichem Abschluss einmal festgeschrieben werden. Sie können einen positiven Wert für diese Einstellung angeben, um anzugeben, dass für diese Anzahl von Datensätzen ein Commit ausgeführt wird. Möglicherweise fragen Sie sich, wenn Sie den Standardwert für diese Einstellung ändern, wird die Datenfluss-Steuerkomponente mehrmals beansprucht. Ja, das stimmt, aber gleichzeitig wird der Druck auf das Transaktionsprotokoll und auf Tempdb abgebaut, um speziell bei Datentransfers mit hohem Datenvolumen enorm zu wachsen.

Die beiden obigen Einstellungen sind sehr wichtig, um die Leistung von Tempdb und des Transaktionslogs zu verbessern. Wenn Sie beispielsweise "Max insert commit size" (Standardeinfügungs-Commit-Größe) belassen, wird das Transaktionslog und das Tempdb während des Extraktionsvorgangs immer größer. Wenn Sie eine große Datenmenge übertragen, wird dem Tempdb-Speicher bald der Speicher ausgehen Dies wird Ihre Extraktion fehlschlagen. Es wird daher empfohlen, diese Werte auf einen für Ihre Umgebung optimalen Wert einzustellen.

Hinweis: Die obigen Empfehlungen wurden aufgrund der Erfahrungen gemacht, die in den letzten Jahren bei der Arbeit mit DTS und SSIS gesammelt wurden. Wie bereits erwähnt, gibt es jedoch andere Faktoren, die die Leistung beeinflussen. Einer davon ist Infrastruktur und Netzwerk. Sie sollten daher gründliche Tests durchführen, bevor Sie diese Änderungen in Ihre Produktionsumgebung übernehmen.

1
Arvind Yadav