![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: IBDAC
IBDAC extrem langsam (16 x langsamer als IBX)
Hallo,
ich greife über IBDAC auf eine Firebild-Datenbank zu, die auf einem Server liegt und per TCP angesprochen wird. Die DB hat ca. 20.000 Datensätze. Mit den IBDAC-Kompinenten dauert ein Select und der sprung zum letzten Datensatz mehr als 16 mal länger als mit IBX, die bei Delphi 2010 im Lieferumfang sind. Wie kann das sein? Wer hat Lösungsvorschläge? So kann man damit nicht arbeiten. Hier ein Beispiel: Folgender Code wird per Buttonklick ausgeführt und dann wird im DBGrid zum letzten Datensatz gesprungen. Auch wenn man mit Query.Last dorthin springt, ändert sich nichts an den Zeiten. IBDAC braucht 67 Sekunden:
Code:
IBX braucht 4 Sekunden:
Verwendet wird: TIBCQuery, TIBCConnection, TDataSource, TDBGrid
DB.Connect; IBCQuery1.SQL.Text := 'select * from mytable; IBCQuery1.Prepare; IBCQuery1.Open;
Code:
Der Geschwindigkeitsunterschied bleibt bestehen, auch wenn ein where an das SQL-Statement angehängt wird. In diesem Test wurden 10.000 Datensätze zurückgegeben. Ja es müssen so viele sein. (=Alle Buchungen eines Monats).
Verwendet wird: TIBQuery, TIBDatabase,TDataSource, TDBGrid
IBDatabase1.Connected := true; IBQuery1.SQL.Text := 'select * from mytable; IBQuery1.Prepare; IBQuery1.Open; Alle Komponenten wurde so wie sie sind aus der Komponentenpalette aufs Form gezogen. Es wurden keine weiteren Einstellung vorgenommen außer DBName + ServerIP. Wer hat eine Idee das mit IBDAC schneller hinzubekommen? Woher kommen die drastischen Zeitunterschiede? |
AW: IBDAC extrem langsam (16 x langsamer als IBX)
Hallo,
jetzt bin ich doch auch überrascht.. auch bei mir ist Faktor 10 drin. Wenn ich allerdings in der TIBCQuery in den Optionen "CacheArray" und "CacheBlobs" abschalte, sind beide wieder gleich schnell... Frag doch mal beim Support/Forum bei IBDac nach ob das bekannt ist.. Grüße |
AW: IBDAC extrem langsam (16 x langsamer als IBX)
Zitat:
|
AW: IBDAC extrem langsam (16 x langsamer als IBX)
Hi,
Zitat:
|
AW: IBDAC extrem langsam (16 x langsamer als IBX)
Ich hab mal nach "CacheArray" und "CacheBlobs" gegoogelt. Und das gefunden:
![]() Ein ähnliches Problem. Dort wird u.a. auch DeferredBlobRead := false gesetzt. Das alleine reicht schon aus, um die Geschwindigkeit zu erhöhen. "CacheArray" und "CacheBlobs" können dann auf true bleiben. Was macht DeferredBlobRead genau? |
AW: IBDAC extrem langsam (16 x langsamer als IBX)
Vom Namen her, sorgt es für ein verzögerrtes Lesen von Blobs
|
AW: IBDAC extrem langsam (16 x langsamer als IBX)
Hi,
wenn ich Deferred einfach mal so übersetze heißt das verzögert, verschoben ( ![]() Was da allerdings genau passiert weiß ich nicht - wie gesagt meine Hilfe zu den IBDac ist gerade nicht sehr mitteilsam.... Grüße |
AW: IBDAC extrem langsam (16 x langsamer als IBX)
Wenn Du die Inhalte Deiner Blobs in Deiner Anzeige benötigst - also das Blob-Fetchen nicht abschalten kannst - und eine ungefähre Idee hast, wie lang die Blobs sein könnten, dann kann man sie nach VarChar casten, welches auch einen immensen Zeitvorteil bringt.
Beispiel:
Code:
Nachteil:
SELECT id, surname, firstname, remarks FROM PERSONS; // remarks ist ein Textblob
... stattdessen SELECT id, surname, firstname, CAST(SUBSTRING(remarks FROM 1 FOR 2048) AS VARCHAR(2048)) remarks FROM PERSONS Wesentlich mehr Schreibaufwand beim SQL-Statement |
AW: IBDAC extrem langsam (16 x langsamer als IBX)
Hier die Antwort vom Hersteller-Support (
![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 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