Einzelnen Beitrag anzeigen

Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
672 Beiträge
 
FreePascal / Lazarus
 
#8

AW: SQL Update-Befehl viel zu langsam

  Alt 24. Dez 2013, 10:59
Ich finde generell ein Update auf 24000 Datensätzen in 5 Sekunden relativ lahm, kann aber an deiner Tabellenstruktur liegen oder
an der verwendeten Festplatte (bei SSDs sollte das schneller sein) oder auch an denr Firebird Version bzw Parametern wie cache
Buffers usw. Falls Trigger auf der Tabelle sind, dann würden die ja ggf auch ausgeführt werden. Ich habe gerade mal einen Test
auf einer lokalen DB gemacht und bin dabei (mit SSD) auf 25000 Updates in 0,75 Sekunden gekommen.

Mir kam dabei aber noch folgende Idee: Flüchtige Daten wie die Markierungen sind ausgeprochen unsinnig in der Tabelle selbst
gespeichert, weil du damit schon mal keine netzwerkfähigkeit hast. Wie wäre eine extra Tabelle, die nur die Primärschlüssel
deiner Tabelle speichert, die ausgewählt sind (optional mit User, der markiert, und schon wäre das netzwerkfähig).
Für das Füllen des Treeview verbindest du deine Daten per left outer join mit den Markierungen. Wenn 100 Datensätze
markiert sind, hast du bei meinem Verfahren 100 Datensätzen mit pk in einer extra Tabelle, die vieleicht gerade
mal eine Datenpage belegt. Bei deinem Verfahren hast du 23900 mal den Feldwert 0 und 100 mal den Feldwert 1, verteilt
auf sämtliche Datenpages. Bei Update (insbesondere alle Markierungen löschen) werden dann nämlich bei deinem Verfahren
sämtliche Datenpages verändert, bei meinem Verfahren gibt es nur ein paar Deletes in wenigen Datenpages.


Wenn es aber generell um die Erkenntnis geht, was da den Geschwindigkeitsunterschied auf Seite von Firebird ausmacht, dann:

wenn du die ibexpert vollversion hast, dann steht dir in Services-Database Monitor eine Liste der ausgeführten SQLs zur Verfügung
http://ibexpert.net/ibe/index.php?n=...0#DBMonitoring
Mit der Personal Edition musst du dir das händisch aus der MON$STATEMENT zusammensuchen

Da wird es sicherlich schon einige Unterschiede geben, Delphi Komponenten machen gerne mal viel unsinnigen Overhead.
Noch detaillierter liefert dir die TraceAPI dazu Ergebnisse, weil darin alle Befehle protokolliert werden, auch ausgeführte
Trigger etc.
http://ibexpert.net/ibe/index.php?n=...#TraceAndAudit
Bei der Personal Edition fehlt das, aber die Firebird Kommandozeilentools könnte man auch benutzen.

p.s.: Wer umsteigen will von der Personal Edition: Einfach mal den Code DPSPECIAL im IBExpert Shop ausprobieren

Ich geh erfahrungsgemäß davon aus, das die Geschwindigekeitsunterschiede durch Delphi Kompnenten versursacht werden, das kannst
du normalerweise mit der traceapi oder im sql monitor sehr schnell finden
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat