AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datenlogger mit MSSQL und Index-Fragmentierung
Thema durchsuchen
Ansicht
Themen-Optionen

Datenlogger mit MSSQL und Index-Fragmentierung

Ein Thema von BigAl · begonnen am 16. Jul 2025 · letzter Beitrag vom 20. Jul 2025
Antwort Antwort
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.495 Beiträge
 
Delphi 12 Athens
 
#1

AW: Datenlogger mit MSSQL und Index-Fragmentierung

  Alt 17. Jul 2025, 06:32
Hallo,
wird diese Datenbank auch regelmäßig ausgewertet oder nur im Fehlerfall?
Denn dann sollten die für die Auswertung nötigen Indizes auch erst dann angelegt werden.
Das Schreiben der Datensätze geht dadurch viel schneller.
Statt Datensätze einzeln zu löschen, lege für jeden Tag oder Monat eine neue Datenbank an.
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
515 Beiträge
 
Delphi 12 Athens
 
#2

AW: Datenlogger mit MSSQL und Index-Fragmentierung

  Alt 17. Jul 2025, 06:48
Hallo,
wird diese Datenbank auch regelmäßig ausgewertet oder nur im Fehlerfall?
Denn dann sollten die für die Auswertung nötigen Indizes auch erst dann angelegt werden.
Ja, die Daten werden permanent angezeigt. Zwar nur ein Teil der Kanäle (ca. 20) aber die anderen müssen immer verfügbar sein. Der Nutzer kann jederzeit in den Detailansichten auf diese zugreifen.

Das Schreiben der Datensätze geht dadurch viel schneller.
Die Geschwindigkeit beim Schreiben ist kein Problem. Ich habe da mal einen Test gemacht und könnte mit dem Client ca. 3500 bis 4000 Datensätze pro Sekunde schreiben. Und dabei scheint der Flaschenhals noch außerhalb des SQL-Servers zu liegen. Dessen Last ist dann gerade mal bei 10% bis 15%...

Statt Datensätze einzeln zu löschen, lege für jeden Tag oder Monat eine neue Datenbank an.
Auf die Idee bin ich noch nicht gekommen. Da muss ich mir mal Gedanken machen. Es geht ja - wie gesagt - nur um diese eine Tabelle. Evtl. noch um eine Alarm-Tabelle, welche aufgrund der Konsistenz dazu gepackt werden könnte. Alle anderen Daten sind fest, bzw. ändern sich nur sehr sehr selten...
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
992 Beiträge
 
Delphi 6 Professional
 
#3

AW: Datenlogger mit MSSQL und Index-Fragmentierung

  Alt 17. Jul 2025, 06:58
Hmm..

Oder nach dem Delete ein ALTER INDEX ALL auf die Tabelle.

https://learn.microsoft.com/de-de/sq...l-server-ver17

Einfaches Syntaxbeispiel

ALTER INDEX index1 ON table1 REBUILD;
ALTER INDEX ALL ON table1 REBUILD;
ALTER INDEX ALL ON dbo.table1 REBUILD;
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)

Geändert von HolgerX (17. Jul 2025 um 07:00 Uhr)
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
515 Beiträge
 
Delphi 12 Athens
 
#4

AW: Datenlogger mit MSSQL und Index-Fragmentierung

  Alt 17. Jul 2025, 07:07
Hmm..

Oder nach dem Delete ein ALTER INDEX ALL auf die Tabelle.

https://learn.microsoft.com/de-de/sq...l-server-ver17

Einfaches Syntaxbeispiel

ALTER INDEX index1 ON table1 REBUILD;
ALTER INDEX ALL ON table1 REBUILD;
ALTER INDEX ALL ON dbo.table1 REBUILD;
Ein REBUILD blockiert die Tabelle relative lange (aktuell ca. 1,5 bis 2 Minuten). Evtl. ein REORGANIZE, welches auch relativ lange benötigt, aber das Schreiben und Lesen weiterhin zulässt. Ob es aber zielführend ist das in kurzen Intervallen auszuführen ist fraglich...
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
700 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Datenlogger mit MSSQL und Index-Fragmentierung

  Alt 17. Jul 2025, 07:19
Alte Datensätze müssen doch nicht jede Minute geprüft und gecheckt werden (es sollten 60 sein). Mach es einmal am Tag, am Besten zu einer Zeit, wo Du ohne Probleme auch den Index wieder herrichten kannst. Nachts um 2 zum Bsp.
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
515 Beiträge
 
Delphi 12 Athens
 
#6

AW: Datenlogger mit MSSQL und Index-Fragmentierung

  Alt 17. Jul 2025, 07:24
Alte Datensätze müssen doch nicht jede Minute geprüft und gecheckt werden (es sollten 60 sein). Mach es einmal am Tag, am Besten zu einer Zeit, wo Du ohne Probleme auch den Index wieder herrichten kannst. Nachts um 2 zum Bsp.
Naja. Einmal pro Minute max. 100 Datensätze löschen hat nicht wirklich Einfluss auf die Performance. Einmal pro Stunde müsste ich dann schon > 3600 alte Datensätze löschen. Das geht dann auch wieder zu Lasten des transaction-log-Files...

Nachts ist keine gute Idee. Dann lieber zu einer Zeit zu der die Ingenieure greifbar sind. Sonst gibt es nachts Anrufe
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
700 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Datenlogger mit MSSQL und Index-Fragmentierung

  Alt 17. Jul 2025, 07:31
Bei 7.7 mio DS zu jeder Zeit in der DB machen 3600 DS nichts aus, zumal es indiziert ist. Und selbst 24*3600 DS macht da nicht viel aus. Es geht ja auch nicht ums Löschen, sondern um den Index neu bauen. Mach das 1x pro Tag zu einer ruhigen Stunde. Weil Dir geht es ja eh nur um den Speicherplatz, der Index funktioniert ja korrekt auch nach dem Löschen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.235 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Datenlogger mit MSSQL und Index-Fragmentierung

  Alt 17. Jul 2025, 07:31
evtl. anderes DBMS nehmen?
z.B. ein PostgreSQL welche einen Mechanismus hat automatisch immer wieder indizes zu defragmentieren hat, so das hier das evtl. gar nicht auffällt wenn das passiert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.824 Beiträge
 
Delphi 12 Athens
 
#9

AW: Datenlogger mit MSSQL und Index-Fragmentierung

  Alt 17. Jul 2025, 09:06
Nur mal so ein wenig out-of-the-box gedacht:

Was wäre wenn du alle Datensätze im Voraus anlegst, diese nach aufsteigender ID per UPDATE befüllst und wenn du beim letzten angekommen bist wieder mit dem ersten weitermachst (ein Ringbuffer halt). In einer separaten Tabelle führst du ID und LogTime des ältesten und neuesten Satzes mit.

Da ja (nach 90 Tagen) für jede Sekunde ein LogTime NOT NULL -Datensatz vorhanden ist, kannst du unter Berücksichtigung des Überlaufs für jede Sekunde die ID bestimmen. Den Index auf LogTime brauchst du nicht mehr und der für ID ändert sich nicht, da beim UPDATE die ID gleich bleibt.

Abfragen nach Zeiträumen errechnen die WHERE Klausel für die entsprechenden ID Werte (in den ersten 90 Tagen noch mit LogTime NOT NULL ) und die Sortierung läuft über ein ORDER BY LogTime .

Das müsste man sicher noch im Detail ausarbeiten, aber es wäre zumindest ein interessanter Ansatz.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
515 Beiträge
 
Delphi 12 Athens
 
#10

AW: Datenlogger mit MSSQL und Index-Fragmentierung

  Alt 17. Jul 2025, 07:00
Ach ja,

komischerweise belegt der Primärindex Unmengen an Seiten:

Code:
TABLE  INDEX                    FRAGMENTATION [%] PAGE COUNT
------- ----------------------- ----------------- ----------
Trends PK_Trends_ID                         59,80     590734
Trends IDX_Trends_LogTime                    0,04      21326
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz