AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Hilfe bei Optimierung in SQL
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei Optimierung in SQL

Ein Thema von Pro_RJ · begonnen am 9. Okt 2008 · letzter Beitrag vom 13. Okt 2008
Antwort Antwort
Seite 3 von 4     123 4      
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: Hilfe bei Optimierung in SQL

  Alt 9. Okt 2008, 23:21
Auch ein prepared query, wäre ein Blick wert.
Markus Kinzler
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#22

Re: Hilfe bei Optimierung in SQL

  Alt 9. Okt 2008, 23:22
Ich liste mal die Einstellung der Beteiligten Combs auf:
IBDatabase1:
IdleTimer : 0
traceFlags : Alles auf flase

IBTransaction1:
AutoStopAction : SaNone
DefaultAction : TACommit
IdleTimer : 0

IBSQL1:
GoToFirstRec. False
ParamCheck : True



Zitat von mkinzler:
Auch ein prepared query, wäre ein Blick wert.
Das ist egal da in IBSQL:

Delphi-Quellcode:
procedure TIBSQL.ExecQuery;
var
  fetch_res: ISC_STATUS;
begin
  CheckClosed;
  if not Prepared then
    Prepare;


PS: die IBQuery wird nur zum Ermitteln der Datensätze benötigt.
Die Statements werden über TIBSQL abgesetzt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#23

Re: Hilfe bei Optimierung in SQL

  Alt 9. Okt 2008, 23:23
In diesem fall würde ich auf autocommit verzichten und manuell alle x-DS comitten
Markus Kinzler
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#24

Re: Hilfe bei Optimierung in SQL

  Alt 9. Okt 2008, 23:26
AHst du da einen Ungefähren erfahrungswert alle wieviel mal Commit machen sollte.
Aber wenn ich Commit mache scholieße ich ja auch die Query wo meine Datensätze drin sind.Das heist ich muss die Daten ja neu ziehen.
Oder Kann ich da auch ein CommitRetaining machen?
Wobei Ich das Ganze schon gerne in einer ganzen Transaction hätte, da es später in Threads ablaufen soll.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#25

Re: Hilfe bei Optimierung in SQL

  Alt 9. Okt 2008, 23:31
Autocommit ruft nach jedem Insert ein CommitRetaining auf, was sich sehr negativ auf die Performance auswirkt. Man könnte sicherlich bis zu 1000 Inserts in einer Transkation ausführen.
Markus Kinzler
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#26

Re: Hilfe bei Optimierung in SQL

  Alt 10. Okt 2008, 08:08
Morgen,
WIe kann ich das AutoCommit ausstellen?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#27

Re: Hilfe bei Optimierung in SQL

  Alt 10. Okt 2008, 09:49
Hallo,

habe von Interbase, Firebird recht wenig bis keine Ahnung aber bei anderen Datenbanken die Erfahrung gemacht:
Fügt man viele Daten ein und hat dabei 'nen Index zu pflegen (oder gar mehrere), so kann es schneller sein zuerst
  • Index löschen
  • Dateneinfügen
  • Index neu aufbauen
Es ist zumindest einen Versuch wert, wir haben dadurch bei großen Datenmengen schon Tage eingespart.
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#28

Re: Hilfe bei Optimierung in SQL

  Alt 10. Okt 2008, 19:02
Huhu,
Die Idee mit dem Index Deaktivieren ist an sich nicht so verkehrt. das Problem is, das es nur bei Kleinen Tabellen schnell geht.
Nur bei dieser Datenbank ist das problem, das im Moment ca 105 Mio Datensätze in der Tabelle sind, die Einmalig Kopiert werden sollen. der Tägliche Datenabgleich beträgt dann Pro Tag ca 100K Datensätze. Und hier Dauert das Neuaufbauen von Einem Index Locker mal 3 Stunden.

Gibts eventuell andere Komponenten die das Einfügen "schneller" können? Oder gibts eventuell eine ganz andere möglichkeit die Daten zu Kopieren. Ich denke da an die Art und weise, wie es zum Beispiel DataPumb macht oder wie es beim Backup/Restore gemacht wird?
  Mit Zitat antworten Zitat
Blup

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

Re: Hilfe bei Optimierung in SQL

  Alt 13. Okt 2008, 10:00
Jede Änderung des SQL-Textes erfordert ein neues Prepare, dehalb beim Insert sinnvoller mit einem festen SQL-Text arbeiten und nur die Parametern ändern.

Alternativ gibt es ab Firebird 2.0 die Möglichkeit mit EXECUTE BLOCK viele Inserts mit einem Komando abzusetzen.
Mit der IBEBlock Scriptsprache (www.ibexpert.com) kann man sogar der gesamte Datentransfer zwischen unterschiedlichen Datenbanken auf dem Server abwickeln.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#30

Re: Hilfe bei Optimierung in SQL

  Alt 13. Okt 2008, 10:39
Hallo,

könnte hier nur eine Erfahrung mit MS-SQL-Server 2000 beisteuern.

Musste mal eine große Menge von Dateien parsen und die daraus resultierenden Ergebnisse per Insert in drei Tabellen verteilen. Das war grottenlangsam.

Bin dann hergegangen und habe die im Programm erstellen Insert-Statements in einem Memo gesammelt und immer dann, wenn das Memo 20 Zeilen enthielt, den Inhalt des Memos per TQuery.ExecSQL an die Datenbank geschickt. Dadurch wurde der "Spaß" deutlich schneller. Anschließend bin ich hergegangen und habe die Menge der Zeilen im Memo konfigurierbar gemacht, so dass ich über einen Button steuernkonnte, nach wievielen Zeilen im Memo ein Insert angestoßen werden sollte. Bei der Datenbank und dem Server waren es etwa 60 Inserts, die zur besten Geschwindigkeit führten.
Jeder Aufruf von TQuery.ExecSQL wurde in einer eigenen Transaktionsklammer ausgeführt. Da auch hier ab und an Probleme auftraten mit Timeout... habe ich um die Transaktionsklammer noch eine Schleife gelegt, die 10 Versuche startete, bevor sie mit 'ner Exception den Job beendete.

Das ist jetzt nicht gerade eine besonders "professionelle" Lösung, aber eventuell könnte Dir so ein "Hilfsmittel" ja auch behilflich sein.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 14:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz