Announcement

Collapse
No announcement yet.

Ringspeicher Ringpuffer mit Datenbank realisieren

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

  • Ringspeicher Ringpuffer mit Datenbank realisieren

    Hallo,
    ich stelle momentan folgende Überlegung an, wäre über Meinungen\Tipps und Ansätze dazu sehr dankbar:

    Ich möchte für zyklische Daten, die aber nur eine gewisse Vorhaltungsdauer haben eine Art Ringspeicher in der Datenbank(Ziel SQL Server >=2005) realisieren.
    Also konkret handelt es sich um sehr viele Messwerte, welche in die Datenbank sollen, welche aber nur so und so viele Monate gespeichert werden sollen. Wie viele das sein werden, weiß ich bevor die Messung beginnt. Kann also die max. Größe berechnen.

    Mein Ideen dazu:
    Wenn ich nun die Daten immer wieder in die Datenbank schreibe und nur mittels einer stored procedure die Daten lösche die zu alt sind, verursache ich dann nicht eine enorme Fragmentierung der Datenbank?

    Gibt es eine Möglichkeit die Daten immer wieder an die gleiche Stelle zu schreiben? Wenn ich zum Beispiel vorher die Gesamtdatensätze anlege mit einer ID und dann über Programmlogik immer nur ein Update an entsprechenden ID-Position mache, habe ich dann keine Fragmentierung?

    Oder ist die Fragmentierung einfach zu Vernachlässigen und ich sollte einfach die alten Daten immer löschen? Oder in bestimmten Zeitabständne eine Defragmentierung durchführen? Wenn ja wie mache ich das in der Datenbank.

    Des weiteren wäre es vermutlich sinnvoll die Datenbankdateien vorher schon mit Ihrer max. größe anzulegen oder?

    Vielen Dank
    Chris

  • #2
    Der SQL-Server verwendet den Platz gelöschter Datensätze wieder. um was du dich aber kümmern musst, ist das Transaktionsprotokoll (also der Log-File). Entweder du konfigurierst das auf "einfach" (kann man so prüfen: SELECT DATABASEPROPERTYEX('name_of_the_database', 'Recovery'); ) oder du machst deine regelmäßigen Log-Backup mit Truncate:
    BACKUP LOG @dbName WITH TRUNCATE_ONLY
    DBCC SHRINKFILE(@dbName_log)


    Damit sollte es unter normalen Umständen zu keinem ungehemmten Wachstum mehr kommen. Die Datenbankfiles gleich mal mit der geschätzen Endgröße anzulegen ist auf jeden Fall auch kein Fehler. Und wegen der Fragmentierung brauchst du dir beim SQL-Server keine Sorgen machen, viel schlimmer für die Performance sind falsche oder fehlende Indizes, falsche Statistiken und schlechte TSQL-Programmierung.
    Und dein Ansatz mit der stored proc ist auch soweit okay. Ich würde dann aber diese stored proc regelmäßig vom Agent ausführen lassen oder besser gleich einen Trigger schreiben, der sich darum kümmert.

    bye,
    Helmut

    Comment


    • #3
      Danke Helmut für deine Antwort. Da habe ich wieder was dazugelernt, mit diesen verschiedenen Recovery Mody wusste ich gar nicht.

      Comment

      Working...
      X