Announcement

Collapse
No announcement yet.

sql server 2000 was passiert beim Insert

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

  • sql server 2000 was passiert beim Insert

    Hallo,

    ich habe eine generelle Frage:

    Was passiert bei SQL Server 2000 genau beim insert?

    Gibt es eine Massenverarbeitung oder eine Art Row-based mode?

    Ich habe das Problem, das bei einem trace mit dem Profiler der Insert einer Reihe von Datensätzen genau so oft im trace steht wie die Anzahl der Datensätze, also ca. 50000.

    Hat der Server die inserts wirklich einzeln nacheinander getätigt?

    Wäre hier über eine generelle Aufklärung über die Funktionsweise des inserts dankbar...

    gruß
    appchell

  • #2
    Hallo,

    wenn die INSERT-Anweisung im Autocommit-Modus (Voreinstellung) des MS SQL Servers aufgerufen wird, arbeitet der SQL Server jede einzelne INSERT-Anweisung als separate Transaktion ab.

    Wenn Massendaten effizient in eine Datenbank eingefügt werden sollen, stehen mindestens 3 Wege zur Verfügung:

    a) T-SQL-Anweisung BULK INSERT . Das folgende Beispiel fügt die Datensätze in 10.000er-Blöcken ein:

    Code:
    BULK INSERT 
      OSTEST.dbo.Ziel
    FROM 
      'C:\Temp\Quelle.bcp'
    WITH
      ( 
        DATAFILETYPE = 'widenative', 
        BATCHSIZE = 10000,
        TABLOCK 
      )
    b) SqlBulkCopy-Klasse aus dem .NET Framework 2.0

    c) SqlDataAdapter-Klasse mit der aktivierten Eigenschaft UpdateBatchSize (.NET 1.x)

    Comment


    • #3
      Hallo Appchell,

      der Profiler zeigt Dir nur an, was an den SQL Server gesendet wird, nicht was "innerhalb" des Servers geschieht. So kannst Du z.B. die Statements von Triggern, die ausgeführt werden, nie im Profiler sehen.

      Das bedeutet in diesem Fall, das die Applikation 50.000 Insert-Statements abfeuert.

      Grüsse, Olaf
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        ok, danke. Habe ich verstanden.

        Würde es genügen wenn ich die enstprechende insert-Anweisung in ein "Begin Transaction..." - statement packe? Oder ich stelle "implicit transaction" auf "on"?


        Wie kann ich die internen Vorgänge des SQL Servers loggen/tracen? Was gibt es da für Möglichkeiten?

        Danke und Gruß
        appchell

        Comment


        • #5
          Hi appchell,

          es gibt die Möglichkeit im Query Analyzer, Dir den Ausführungsplan oder die Ablaufverfolgung anzeigen zu lassen... vielleicht hilft das schon weiter... Schau mal unter im Menü unter Abfrage...
          Gruß
          Thomas

          Comment


          • #6
            Hi,

            für eine Abfrage ist das kein Thema mit Execution Plan und Co.

            Wie kann ich aber z.B. alle Vorgänge einer nächtlichen Bewirtschaftung im SQL Server tracen? Natürlich auf einer Ebene wo nicht jeder Kleinkram gelogged wird.

            Ziel ist es herauszufinden welche Skripte wann laufen und wie lange. Diese Langläufer sollen identifiziert werden.

            Comment

            Working...
            X