Announcement

Collapse
No announcement yet.

Import von mehreren Millionen Datensätzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Import von mehreren Millionen Datensätzen

    Hallo liebes Forum,

    mit gehr es ähnlich wie meinem Vorredner.
    Nur ist mein so, dass ich aus einer properitären Datenbank einen Parser geschrieben habe, der SQL-Dateien erzeugt (mehrere GB, 3500 sql-Dateien). Diese wollte ich nun gemütlich in MS SQL 2005 integrieren.
    Das funktioniert auch "prinzipiell" - dauert aber elend lange (Tage).
    Daher habe ich folgende Fragen an das Forum:
    1) Sind Insert-Befehle "in Masse" einfach so langsam - oder kann man sie extrem beschleunigen
    2) Gibt es andere, interessante Importmöglichkeiten, die auch strukturerhaltend sind. Ein Flatfile-Import wäre eher unerfreulich.

    Ich bin sicher, für die Cracks hier ist das nur ein Krümel.

    Alles Gute

    ... der Wiesengrund

  • #2
    Set Nocount On

    Insert-Befehle "in Masse" einfach so langsam - oder kann man sie extrem beschleunigen
    Versuch mal vor die Insert-Anweisungen "Set Nocount ON" und nach den Anweisungen wieder "Set Nocount OFF" zu schreiben, das kann schon eine Menge Zeit sparen (zumindest auf dem 2000er Server)...

    Also so ungefähr:
    Set Nocount ON

    Insert Into [table](Wert) Values ('IrgendeinWert')
    Insert Into [table](Wert) Values ('IrgendeinWert2')
    etc...

    Set Nocount OFF

    Hoffe das hilft ein bissle...
    Gruß
    Thomas

    Comment


    • #3
      Danke! ein erster Schritt!

      Hi,

      vielen Dank für sie schnelle Antwort.

      Jetzt brauche in nur noch 2/3 der Zeit.

      Aber ein Flattext-Import geht in 5 Minuten
      Vielleicht gibt es noch andere Anregungen...

      ...Der Wiesengrund
      Zuletzt editiert von TWAdorno; 24.01.2007, 13:33.

      Comment


      • #4
        Bulk Insert

        Hallo Wiesengrund,

        suche mal in der Hilfe nach "BULK INSERT". Das soll für Masseninserts sein, habe aber leider keine Erfahrung damit, bzw. kann Dir dabei nicht helfen, aber vielleicht hilft ja die Hilfe

        Gruß
        Thomas

        Comment


        • #5
          Noch ein guter Tipp,

          Hallo,

          danke für den Tipp, aber leider bringt er mich nicht relevant weiter . zumindest nachdem ich mich einen halben Tag mit den Bulks auseinandergesetzt habe.

          Mein VB-Parser erstellt erst im Prozeß die sich verändernden Strukturen, daher ist SQL so ideal - und deshalb scheiden auch textfiles aus.

          Und dieses Bulk "mag" textfiles.

          XML-Import wäre auch schön - aber das sieht nach viel Arbeit mit endlichen Erfolgsaussichten aus.

          Ich versuche es mal mit MySQL. Vielleicht paßt es da besser.
          Oder es kommt noch ein Hammer im Forum.

          Deine Tipps sind es zwar auch, aber Sie passen nicht genau zu meinem Problem.
          Trotzdem vielen Dank!

          Comment


          • #6
            DB auf Recovery Bulk_Logged setzen, sollte auch das ganze beschleinigen

            Comment


            • #7
              Geschafft

              Liebes Forum,

              herzlichen Dank für die Unterstützung.
              Mit Hilfe der angegebenen Tipps - sowie einigen Umstrukturierungen hat meine Abfrage statt 3 Tagen noch 1-5h benötigt.

              Weitere Tipps für die Zukunft werden gerne hier gesehen - wenn noch jemandem was Gutes einfällt

              ...Der Wiesengrund

              Comment


              • #8
                Wenn der Flattext-Import in 5 Minuten geht, dann würde ich das Programm so umbauen, dass es die Table dynamisch aufbaut, die Daten aber in ein Textfile schreibt und dann dem Server den Befehl zum Importieren dieses Files sendet. Falls das asynchron läuft, also die Kontrolle an den Aufrufer zurückkommt, bevor der Import beendet ist, kann man eine Schleife benutzen um intervallmäßig den Server nach der Recordanzahl zu fragen (allerdings in einem try/catch wegen Abfangen von Timeout) - ich weiß ja, wieviele es werden müsssen. Und wenn alle Daten drinnen sind, kann man den Textfile löschen und den nächsten Schritt angehen.
                Man könnte so auch statt eines einzigen riesigen Textfiles immer Blöcke von zB. 10.000 Records verwenden und damit im Programm eine Progressbar steuern, dann würde man sogar den Fortschritt sichtbar machen können.

                bye,
                Helmut

                Comment


                • #9
                  Problem erstmal gelöst

                  Liebes Forum,

                  danke für die zahlreichen Hinweise.
                  Ich habe jetzt eine für mich ausreichende Performance gefunden.
                  Der beste Hinweis war das Umsetzen der Optionen.
                  Neben den beiden schon beschriebenen habe ich die Optionen auf
                  Wiederherstellungsmodell=Massenprotokolliert
                  Seitenüberprüfung = none
                  Zugriff beschränken auf Single
                  und damit schaffe ich eine ausreichende Performance. Statt 3 Tagen sind es jetzt nur noch < 2h.
                  Auch die Abfragen und Analysen sind wunderbar beschleunigt.

                  Für die Zukunft werde ich versuchen, ob ich einen Weg über XML hinbekomme. Aber jetzt bin ich - dank des Forums - wunschlos zufrieden.

                  ...Der Wiesengrund

                  PS: Natürlich sind weitere Ideen immer willkommen!

                  Comment


                  • #10
                    Hallo!

                    Wo und wie schalte ich denn die Seitenüberprüfung ab?!?

                    BYE BERND

                    Comment

                    Working...
                    X