Announcement

Collapse
No announcement yet.

Wann nutzt die tempDB ihr ldf-File?

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

  • Wann nutzt die tempDB ihr ldf-File?

    hallo,
    ich habe eine Datenbank die beim Ausführen einer Prozedur das ldf-File von unter 1 MB auf mehr als 23 GB aufbläst und nutzt (bis ich die SP wegen Plattenplatzmangel abbreche).

    In der SP werden temporäre Tabellen mit @ erzeugt. Ich habe die SP nicht selbst geschrieben aber mir war auch nicht bekannt dass @-Tabellen schlecht sind. Es sind nur ca. 6000 Datensätze in der temp-Tabelle. In der SP werden ca. 20 INSERTS mit SELECTs auf Tabellenwertfunktionen gemacht und im WHERE-Teil steht WHERE not in (SELECT Feld1 FROM @temptabelle)

    Gibt es evtl ein Problem mit temptabellen die oft im Zugriff sind? Oder über eine lange laufende Prozedur (1-2 Stunden) bestehen?

    Kann mir jemand sagen was mir so viel Traffic auf das ldf-File der tempdb macht?

  • #2
    Die TempDB nutzt es bei den gleichen "Gelegenheiten", wie jede andere Datenbank:
    Bei jeder Transaction.

    Werden temporäre Objekte angelegt, werden die (inkl. Daten) in der TempDb gespeichert und bereits das Speichern ist natürlich eine Transaktion.

    Aber auch bei (umfangreichen) Sortierungen werden (alle) Daten temporär zunächst in der TempDB gespeichert, um sie sortieren zu können; auch das vergrößert die DB.

    Siehe
    TechNet: tempdb-Datenbank
    MSDN: Optimieren der Leistung von 'tempdb'
    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


    • #3
      Im Gegensatz zu temporären Tabellen, die mit CREATE erzeugt werden, werden deklarierte Tabellen (also die mit dem @ vorne) nicht in der tempdb verwaltet (deswegen gehen auch einige Sachen nicht). Diese sollten daher nicht direkt die Ursache für die Aktivitäten in der tempdb sein. Aber zB. brauchen Queries die tempdb, wenn der Server diese in verschiedene Zwischenschritte unterteilt, das läuft dann über die tempdb, große und/oder komplexe Abfragen können die tempdb also ganz schön aufblasen. Vielleicht hilft das etwas weiter:
      Tempdb Usage and Bottlenecks

      bye,
      Helmut

      Comment


      • #4
        Siehe TechNet: tempdb-Datenbank
        Temporäre Benutzerobjekte, die explizit erstellt werden, z. B. globale oder lokale temporäre Tabellen, temporäre gespeicherte Prozeduren, Tabellenvariablen oder Cursor.
        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


        • #5
          Okay, stimmt, die Tabellenvariable selber steht in der Tempdb, sie brauchen zwar weniger Ressourcen für Sperren und Protokollierung und der ldf ist daher wahrscheinlich nicht so stark betroffen wie bei anderen Tabellen, das Problem kann aber doch auch von den Tabellenvariablen herrühren (wieder was gelernt).

          bye,
          Helmut

          Comment


          • #6
            hallo,
            ich habe es jetzt nicht genau getestet wo das Problem lag. (Muss ich mir allerdings nochmal anschauen damit ich beim nächsten mal nicht selbst solche Probleme habe.) Jedoch habe ich die Berechnungen nach meiner Denke optimiert. Das war im Einzelnen Gruppieren der Ergebisse nach einem Kriterium, Übersetzen dieses Kriteriums und update der Spalten an Stelle jede Zeile per UDF zu berechnen.

            Dann habe ich temporäre Tabellen in echte Tabelle geändert und so den Traffic von der tempdb auf die eigentliche Datenbank verschoben.

            So bleibt mein ldf-File der tempdb bei 6 MB.

            Comment

            Working...
            X