2009-04-17 6 views
0

Ich verwende die SqlBulkCopy-Klasse, um eine Masseneinfügung in eine SQL Server-DB durchzuführen.Erhöht SQLBulkCopy die .mdf-Dateigröße drastisch?

Ursprüngliche Größe der .mdf-Datei, die der DB zugeordnet ist, ist 1508 Mb.

Wenn ich es (auf den gleichen Daten von etwa 4 Millionen Datensätze) mit:
BatchSize von 100000 läuft, die Größe der .mdf wächst auf 1661 MB.
BatchSize von 1000000, Größe des .mdf wächst auf 1659 MB.

Warum diese Variante? Solch eine kleine Variation ist vernachlässigbar, außer dass , wenn mein Tester es (auf den gleichen Daten) mit einer Stapelgröße von 100 ausführt, die .mdf-Datei wahnsinnig anwächst, bis sie alle 20 verfügbaren Gigs verbraucht, und dann Es kommt zu Fehlern, weil der verfügbare Platz nicht ausreicht.

Ist dies, weil SqlBulkCopy einige Blöcke fester Größe hat, die es zuweist?
Es funktioniert gut mit BatchSizes> 100000, aber ich möchte die Ursache dieses seltsamen Verhaltens/Bugs verstehen.

+0

Sind Sie sicher, dass es die .MDF ist, die wächst und nicht die .LDF (Protokolldatei)? Ich würde erwarten, dass die Datendatei auf ähnliche Weise wächst, egal wie die Daten eingefügt werden, aber die Protokolle funktionieren möglicherweise anders. –

Antwort

1

Dies hängt von den Wachstumseinstellungen Ihrer Datenbank ab. Die Standardeinstellung ist, um 10% zu wachsen, aber Ihre könnte um 1 GB wachsen, wenn sie gefüllt wird.

3

Ihre MDF-Datei ist, wo Ihre Daten gespeichert werden - es sollte etwa entsprechend Ihrer Datenlast wachsen. Aber wie "ck" bereits darauf hingewiesen - SQL Server ermöglicht es Ihnen, ein bestimmtes Wachstumsmuster, z. Die MDF-Datei wächst nicht Byte für Byte, wenn Sie eine Zeile einfügen. Abhängig von Ihrer Einstellung wird es "Sprünge" benötigen, wenn mehr Platz benötigt wird.

Dies hat nichts damit zu tun, ob Sie Ihre Daten mit einer regulären INSERT-Anweisung oder SqlBulkLoad laden.

Marc

0

Laden von Daten von Bulk-Ladung oder ‚normale‘ Last wird Auswirkungen auf die Größe der Protokolldatei haben und nicht auf der MDF-Datei (DB in einfach zu sein hat oder Bulk-Recovery-Modus angemeldet, gibt es einige andere Anforderungen) Sind Sie sicher, dass die Protokolldatei des Testers nicht den gesamten verfügbaren Speicherplatz belegt hat?

Verwandte Themen