Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Massenimport bzw INSERT mit MSSQL 2008

Frage Entwicklung Datenbanken

Mitglied: nicro87

nicro87 (Level 1) - Jetzt verbinden

08.02.2012, aktualisiert 18:35 Uhr, 3387 Aufrufe, 6 Kommentare

Hallo zusammen,

ich versuche nun seit längerem Massendaten aus DBF-Dateien auszulesen und in eine MS SQL-Datenbank zu importieren.
Da ich keine SSID-Packete erstellen kann verwende ich dazu C# mit einem BulkInsert. Soweit so gut.

Ich importiere die Daten jedoch nur in eine temporäre Zwischentabelle, welche nach dem import der DBF-Dateien ca. 30 Millionen Datensätze umfasst.
Nun gestaltet sich in Insert in die andere Tabelle mit Indizes und Autowert relativ schwierig, da dieses Kommando so um die 50GB RAM auf unserem Cluster frisst

Deshalb würde ich gerne wissen ob ihr eine Möglichkeit seht diese 30 Millionen Datensätze eleganter und mit weniger Auslastung von der Temp-Tabelle in die Produktiv-Tabelle zu importieren?!

Indizes werden vor dem Insert natürlich ausgeschaltet.

Vielen Dank für Eure Hilfe.

Nicro87
Mitglied: nicro87
14.02.2012 um 08:59 Uhr
Hallo,

weiß niemand eine Lösung?

Gruß
Nico
Bitte warten ..
Mitglied: MadMax
15.02.2012 um 17:10 Uhr
Hallo Nico,

warum muß da überhaupt eine Zwischentabelle her? Importiere doch direkt in die richtige Tabelle.

Ansonsten ist die Frage, wie es eleganter und besser geht, schwer zu beantworten, wenn man nicht genau weiß, was Du machst. Du machst einen Import und der klappt nicht so, wie Du willst, ist ein bisschen vage

Gruß, Mad Max
Bitte warten ..
Mitglied: nicro87
05.03.2012 um 13:23 Uhr
Hallo Mad Max,

die Zwischentabelle halten wir zum einen für Sinnvoll, da in weiteren Bearbeitungsschritten noch Spalten hinzugefügt werden und zum anderen ist so weniger Last auf dem Server, oder nicht?
Ist es überhaupt Sinnvoll zuerst die Indizes auszuschalten und danach wieder einzuschalten? Die CPU-Auslastung geht nämlich stark nach oben, wenn man dies bei knapp 100.000.000 DS tut.

Ich bin auch gerade wieder dabei und lasse Schritt für Schritt über Transaktionen nur wenige Datensätze importieren, dies steigert die Last jedoch auch stark.

Ich denke es sind einfach zu viele Datensätze.

Gruß
Nico
Bitte warten ..
Mitglied: MadMax
06.03.2012 um 00:32 Uhr
Nabend Nico,

da bin ich nicht ganz Deiner Ansicht. Wenn ich erst ein paar Millionen (oben waren es noch 30, jetzt sind es sogar knapp 100) DS per Massenimport in eine Tabelle schiebe und sie dann nochmal woanders hinschiebe, dann habe ich die doppelte Anzahl DS bewegt. Mir fällt kein Grund ein, warum das in irgendeiner Weise effizienter sein soll, als ein einziger Massenimport ohne zusätzliche Datenbewegungen.

Indexe ausschalten kann insofern sinnvoll sein, daß es schneller sein soll, einen Index am Ende komplett am Stück aufzubauen, als ihn während des Insert mitpflegen zu lassen. Wie sich das bei Massenimporten und 30 oder 100 Mio DS auswirkt, kann ich Dir allerdings nicht sagen.

Aber Du solltest mal das Wiederherstellungsmodell Deiner DB anschauen. Wenn das auf "vollständig" steht, solltest Du es vielleicht auf "massenprotokolliert" stellen, damit das Transaktionsprotokoll nicht so voll läuft. Der Kopiervorgang von der temporären zur produktiven Tabelle füllt das TP aber auf jeden Fall.

Am günstigsten kommst Du definitiv weg, wenn Du das massenprotokollierte Wiederherstellungsmodell einstellst und die Daten direkt in die richtige Tabelle importierst. Das mit den Indexen müßte man testen. Auch sollte man schauen, ob irgendwelche Trigger auf der Tabelle liegen und sie ggf. ausschalten. Aufgaben, die im Trigger erledigt werden, können womöglich anschließend am Stück schneller erledigt werden.

Gruß, Mad Max
Bitte warten ..
Mitglied: nicro87
13.03.2012 um 19:42 Uhr
Hallo Mad Max,

das hilft mir schonmal weiter, da ich mich mit dem SQL-Server an sich wirklich wenig auskenne.

Richtig ist, dass ich jeden Monat 25-30 Mio importiere und da wir nun mehrere Monate importiert haben (6 dürfen wir maximal zurückhalten) in der produktiven Tabelle nun an die 100 Mio sind.

Daher war die Überlegung die 30 Mio von der temp. in die produktive zu importieren.

Mittlerweile habe ich auch ein Script welches pro Kundennummer die Datensätze rüberkopiert.
Jedoch bringt das anschalten des Index die CPU-Last dann sehr hoch.

Den Ram-Verbrauch kann man pro Server-Instanz jedoch einstellen (habe ich auch erst vor kurzem gesehen). So kriegt unser Servermanagement nicht direkt nen Alarm und wir sind so auch einigermaßen zufrieden.

Es sind halt wirklich viele Daten und das kann wohl auch so nen kleinen Cluster ins Schwitzen bringen ;) (hehe gut, dass der ne Klimaanlage hat^^)

Mit dem Transaktionsprotokoll ist nen guter Tipp, das werde ich direkt mal probieren...

Vielen Dank ich denke das Thema ist damit gelöst.

Gruß
Nico
Bitte warten ..
Mitglied: MadMax
15.03.2012 um 12:34 Uhr
Moin Nico,

schön, wenn es Dir geholfen hat.

Wenn Dein Problem gelöst ist, kannst Du ja auch das grüne Häkchen setzen

Gruß, Mad Max
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Server
gelöst NTP Server auf einem Windows Server 2008 R2 DC standardmäßig schon drauf? (11)

Frage von M.Marz zum Thema Windows Server ...

Windows Server
Windows Server 2008 R2 Aero-Design auf Remote Desktop geht nicht (3)

Frage von Motherboard33 zum Thema Windows Server ...

Windows Server
Windows 2008 Terminalserver hängt (10)

Frage von Aubanan zum Thema Windows Server ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...