AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie langsam ist Firebird über Internet wirklich?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie langsam ist Firebird über Internet wirklich?

Ein Thema von alleinherrscher · begonnen am 11. Jul 2012 · letzter Beitrag vom 6. Aug 2012
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#11

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 15:39
Mit einer Query sieht das ganz grob so aus:
Delphi-Quellcode:
query.SQL.Text := 'SELECT COUNT(*) AS Anzahl FROM DOCUMENTS';
query.SQL.Add('WHERE CUSTOMER = '+QuotedStr(inttostr(CustomerID))+' AND MODIFYDATE = '+QuotedStr(DateTimetoStr));
ShowMessage(query.SQL.Text); // zum Debuggen die SQL-Abfrage anzeigen
query.open;
result := query.Fields[0].AsInteger <> 0;
Das lässt sich mit Parametern noch verbessern sollte so aber auch funktionieren.
@Shima: Okay, die Benutzung von TIBQuery hat die Dauer der Abfrage von 20 Sekunden auf 5 Sekunden verringert. Das ist doch schonmal ein Anfang. Danke!!

@RWarnecke: Denkst du, dass Stored Procedures das ganze schneller machen, als die eine TIBQuery Abfrage von Shmia? Hier wird ja auch nur noch eine einzige Zahl an den Client übermittelt.

@Lemmy Danke für die Tipps. Ich werde Tibtable nicht mehr verwenden. Ich habe auch schon daran gedacht, einen TCP Server zu verwenden, der die DB lokal ansteuert. Habe die Idee aber zunächst verworfen, da der Server ein Debian System ist und ich dann den FPC verwenden müsste + sehr viel Arbeit für das kleine Programm.

Macht es sinn, in meiner Funktion, die 20 mal aufgerufen wird, jedes mal eine neue Transaction zu erstellen und diese hinterher wieder zu zerstören? Wäre es schneller/sinnvoller, die transaction nur einmal zu erstellen?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#12

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 15:44
Zwei Optimierungstipps:

* Transaktionshandling aus der Routine rausziehen (wie du richtig erkannt hast), d.h. eine Transaktion starten, Abfragen ausführen, Transaktion mit einem Hard Commit comitten, fertig.
* Verwende eine Prepared-Query, die einmal Prepared wird, mit jedem Aufruf mit den neuen Parameterwerten befüllt and dann ausgeführt wird. So ersparst du dir den ständigen Traffic im Prepare-Schritt der Abfrage
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 15:52
Unter Umständen hilft es auch den Verkehr beim Zugriff übers Internet zu Tunneln ( ZeDeBee, stunnel).
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#14

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 15:55
Unter Umständen hilft es auch den Verkehr beim Zugriff übers Internet zu Tunneln ( ZeDeBee, stunnel).
Habe ich mit SSH/putty getestet, hat aber keine Zeit rausgeholt.

@tsteinmaurer Aber ein Commit brauche ich nur beim Ändern von Daten, richtig? Kann ich für verschiedene Lesevorgänge in der db die selbe transaction verwenden?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS

Geändert von alleinherrscher (11. Jul 2012 um 15:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#15

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 16:07
Grundsätzlich brauchst du ein Commit nur nach einem Schreibvorgang. Wichtig ist e aber eine Transaktion abzuschließen (commit oder rollback).
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#16

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 16:14
Zitat:
Aber ein Commit brauche ich nur beim Ändern von Daten, richtig?
Nein. In Firebird läuft alles in Kontext von Transaktionen, auch lesende Zugriffe und auch diese Transaktion muss beendet (Commit/Rollback) werden.
Zitat:
Kann ich für verschiedene Lesevorgänge in der db die selbe transaction verwenden
Natürlich. Mit IBX stopelst dir das eben mit einer TIBTransaction zusammen, die dann von mehreren Query-Komponenten verwendet wird. Über den Isolation-Mode steuerst du dann was die einzelnen Abfragen im Kontext dieser Transaktion von anderen committed Transaktionen "mitbekommen".

Leider kümmern sich die Leute in der Regel kaum um das Transaktions-Management in der Client-Anwendung, ohne deren Auswirkungen zu kennen. Vor allem wenn man neu mit Firebird zu arbeiten beginnt. Das ist auch ein Hauptgrund für Performanceprobleme, wenn man z.B. langlaufende Transaktionen offen hat oder (unbewusst) in einem AutoCommit-Modus fährt, der für jede Abfrage automatisch eine neue Transaktion startet und diese automatisch auch wieder mit COMMIT RETAINING beendet. COMMIT RETAINING über eine längeren Zeitraum ohne regelmäßige HARD COMMITs kann für den Firebird Server eine Spaßbremse werden.
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#17

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 16:29
@tsteinmaurer: Okaydokay, die prepared-querys bringen nochmal eine Sekunde. Jetzt bauche ich noch das Commit ein. Bisheriger Code:
Delphi-Quellcode:
function TDataBaseConnection.IsEMailInDB(CustomerID:integer;EMailDate:tDateTime):boolean;
begin
if not assigned(IsEMailInDBQuery) then
 begin
   IsEMailInDBQuery:=TIBQuery.Create(nil);
   IsEMailInDBQuery.Database:=DB;
   IsEMailInDBQuery.Transaction:=ta;
   IsEMailInDBQuery.SQL.Text := 'SELECT COUNT(*) FROM DOCUMENTS';
   IsEMailInDBQuery.SQL.Add('WHERE CUSTOMER = :CUSTOMER AND MODIFYDATE = :MODIFYDATE');
   IsEMailInDBQuery.Prepare;
 end;

IsEMailInDBQuery.Params[0].AsInteger:=CustomerID;
IsEMailInDBQuery.Params[1].AsDateTime:=EMailDate;
IsEMailInDBQuery.open;
result := IsEMailInDBQuery.Fields[0].AsInteger <> 0;
IsEMailInDBQuery.Close;
end;
//edit: @Steinmaurer: Mit einem ta.commit; am Ende (nachdem IsEMailInDBQuery.Close) macht die Geschichte wieder ca. eine Sekunde langsamer?!
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS

Geändert von alleinherrscher (11. Jul 2012 um 16:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#18

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 17:15
@RWarnecke: Denkst du, dass Stored Procedures das ganze schneller machen, als die eine TIBQuery Abfrage von Shmia? Hier wird ja auch nur noch eine einzige Zahl an den Client übermittelt.
Ich bin noch nicht ganz dahinter gestiegen, warum Du diese Funktion so oft aufrufst. Eine Stored Procedure führt alles auf dem Datenbankserver aus und gibt dann das Ergebnis zurück. Das heißt es wird nicht x Mal der Select-Befehl an den Server geschickt.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#19

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 19:01
@RWarnecke: Denkst du, dass Stored Procedures das ganze schneller machen, als die eine TIBQuery Abfrage von Shmia? Hier wird ja auch nur noch eine einzige Zahl an den Client übermittelt.
Ich bin noch nicht ganz dahinter gestiegen, warum Du diese Funktion so oft aufrufst. Eine Stored Procedure führt alles auf dem Datenbankserver aus und gibt dann das Ergebnis zurück. Das heißt es wird nicht x Mal der Select-Befehl an den Server geschickt.
Ich habe n Dokumente (sagen wir charakterisiert durch einen String und eine DateTime - z.B. eine EMail) und möchte wissen, ob diese Dokumente schon in der Datenbank vorhanden sind.
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#20

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 20:49
Grundsätzlich brauchst du ein Commit nur nach einem Schreibvorgang.
Andererseits muss man eine neue Transaktion auch dann beginnen, wenn man bei nur lesenden DB Zugriffen die zwischenzeitlich geänderten Daten sehen will. Die erste Aktion nach einem "COMMIT", "ROLLBACK" oder "CONNECT" beginnt eine neue Transaktion. Was man effektiv wann sieht, hängt noch vom Isolationslevel der Transaktion ab.
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 09:18 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