AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird + ZEOS: Erste query langsam
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird + ZEOS: Erste query langsam

Ein Thema von blackfin · begonnen am 9. Jul 2010 · letzter Beitrag vom 13. Jul 2010
Antwort Antwort
blackfin
(Gast)

n/a Beiträge
 
#1

Firebird + ZEOS: Erste query langsam

  Alt 9. Jul 2010, 14:58
Datenbank: Firebird • Version: 2.1.3 embedded • Zugriff über: ZEOS
Hallo liebe Experten,

Mir kommt etwas in Firebird Embedded + ZEOS etwas komisch vor:
Die erste Query dauert immer extrem lange, nämlich bis zu 10x so lange wie eine darauffolgende Query.
Das merkwürdige daran ist, dass es egal ist, ob ich als erste Query von einem komplett anderen table Selektert habe als bei der zweiten Query,
dann ist die zweite Query trotzdem schneller.

Beispiel:

Code:
'SELECT * FROM foo'
=> Ausführungszeit: 11 ms

danach nochmal:
Code:
'SELECT * FROM foo'
=> Ausführungszeit: 1 ms

Das kann ich jetzt noch mit einem Firebird internen Cache erklären.
ABER das folgende nicht:

--Programm-Neustart--

Code:
'SELECT * FROM bar'
=> Ausführungszeit: 12ms

danach:

Code:
'SELECT * FROM foo'
=> Ausführungszeit: 1 ms


Das verwirrt mich. Ist das ein Bug in ZEOS? Hat jemand schon ähnliche Erfahrungen damit gemacht?

Geändert von blackfin ( 9. Jul 2010 um 15:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Firebird + ZEOS: Erste query langsam

  Alt 9. Jul 2010, 19:06
Also bei 10ms würde ich ja fast schon von einer Messungenauigkeit des Timers sprechen... Womit hast Du gemessen?
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Firebird + ZEOS: Erste query langsam

  Alt 9. Jul 2010, 20:28
Wenn nur 10 ms sind - gähn.
Hier werden wohl bei der ersten Query interne Caches etc. aufgebaut. Und solche Caches etc. sind nicht unbedingt Tabellenspezifisch.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Firebird + ZEOS: Erste query langsam

  Alt 9. Jul 2010, 20:30
Oder Zeos baut die Verbindung zum Server erst zu diesem Zeitpunkt auf
Markus Kinzler
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#5

AW: Firebird + ZEOS: Erste query langsam

  Alt 9. Jul 2010, 20:38
Zitat:
Also bei 10ms würde ich ja fast schon von einer Messungenauigkeit des Timers sprechen... Womit hast Du gemessen?
Die Messroutine sieht folgendermaßen aus:

Delphi-Quellcode:

procedure CalibrateCPU() ;
var
 t,t2 : Int64 ;
begin
  t := GetTickCount;
  while t=GetTickCount do;
  t2 := GetCPUTicks;
  while GetTickCount<(t+400) do;
  t2 := GetCPUTicks - t2;
  CPUClock := 2.5e-6*t2;
end;

// CPU Cycles Count
function GetCPUTicks: Int64;
asm
   DB $0F,$31
end;

// Start Time Measurement
procedure StartGetTime() ;
begin
    ticks := GetCPUTicks() ;
end ;


// End Time Measurement
function EndGetTime(const InMilliSeconds: boolean = true) : OleVariant ;
var
  ticks2 : Int64 ;
begin
    ticks2 := GetCPUTicks() - ticks;
    if not InMilliSeconds then
      Result := ticks2 / CPUClock
    else
    Result := FloatToStrF((ticks2 / CPUClock) / 1000,fffixed,15,1) ;
end;
Beim Programmstart wird einmal CalibrateCPU() ausgeführt, und dann vor der Query ein StartGetTime() und direkt nach der Query ein EndGetTime(); ausgeführt.




Zitat:
Wenn nur 10 ms sind - gähn.
Hast eigentlich recht, aber das kann für mein Vorhaben u.U. doch relevant sein..naja egal

Zitat:
Oder Zeos baut die Verbindung zum Server erst zu diesem Zeitpunkt auf
Es gibt keinen "Server", ist ja embedded. Und das "connect" zur Datei passiert definitiv schon vorher.

Geändert von blackfin ( 9. Jul 2010 um 20:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Firebird + ZEOS: Erste query langsam

  Alt 13. Jul 2010, 09:50
Deine Methode der Zeitmessung ist sowieso schrecklich ungenau. (Abweichungen von ~3%, hab einfach in ner Schleife nen Sleep(100) gemessen)
Warum nicht QueryPerformanceCounter?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#7

AW: Firebird + ZEOS: Erste query langsam

  Alt 13. Jul 2010, 10:29
sleep() ist selbst ungenau und gearantiert nur, dass mindestens diese Zeit gewartet wird, kann aber auch etwas länger sein

Aber mal sehen, den Performance-Counter probiere ich auch mal aus!
Obwohl mir die Abweichung der Zeitmessung von ~3-4% eigentlich in diesem Fall egal ist, denn es geht bei meinem Problem um viel grössere Dimensionen als diese minimale Abweichung von ~3% bei der Query-Ausführung, nämlich um den Ausführungs-Faktor 10 oder mehr

Edit:
Der Thread kann als geschlossen betrachtet werden, ich werde erstmal selbst ein paar Dinge ausprobieren.

Geändert von blackfin (13. Jul 2010 um 10:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Firebird + ZEOS: Erste query langsam

  Alt 13. Jul 2010, 10:51
sleep() ist selbst ungenau und gearantiert nur, dass mindestens diese Zeit gewartet wird, kann aber auch etwas länger sein
Richtig, wenn das System nicht sofort Rechenzeit zur Verfügung stellt.
In meinem Test war das aber nicht ausschlaggebend. Mir gings nur um den Vergleich deiner Methode und TStopwatch (neu in Delphi 2010 in der Unit Diagnostics, ist aber nix anderes als nen angenehm zu nutzender Wrapper für QueryPerformanceCounter)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 09:22 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