AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken IBDAC extrem langsam (16 x langsamer als IBX)
Thema durchsuchen
Ansicht
Themen-Optionen

IBDAC extrem langsam (16 x langsamer als IBX)

Ein Thema von BlueStarHH · begonnen am 27. Jan 2011 · letzter Beitrag vom 28. Jan 2011
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#1

IBDAC extrem langsam (16 x langsamer als IBX)

  Alt 27. Jan 2011, 08:44
Datenbank: Firebird • Version: 1.5 • Zugriff über: IBDAC
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:
Verwendet wird: TIBCQuery, TIBCConnection, TDataSource, TDBGrid

  DB.Connect;
  IBCQuery1.SQL.Text := 'select * from mytable;
  IBCQuery1.Prepare;
  IBCQuery1.Open;
IBX braucht 4 Sekunden:
Code:
Verwendet wird: TIBQuery, TIBDatabase,TDataSource, TDBGrid

  IBDatabase1.Connected := true;
  IBQuery1.SQL.Text := 'select * from mytable;
  IBQuery1.Prepare;
  IBQuery1.Open;
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).

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?
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: IBDAC extrem langsam (16 x langsamer als IBX)

  Alt 27. Jan 2011, 09:16
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
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: IBDAC extrem langsam (16 x langsamer als IBX)

  Alt 27. Jan 2011, 09:29
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..
Danke, wenn ich "CacheArray" und "CacheBlobs" abschalte, läuft es wirklich wieder schnell. Was ist denn der Nachteil, wenn diese beiden Optionen dauerhaft abgeschaltet bleiben? Ich habe DBMemos die werden ja als Blobs gespeichert. Wann wird das Array genutzt? Ich melde das mal beim IBDac-Support.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: IBDAC extrem langsam (16 x langsamer als IBX)

  Alt 27. Jan 2011, 09:43
Hi,

Danke, wenn ich "CacheArray" und "CacheBlobs" abschalte, läuft es wirklich wieder schnell. Was ist denn der Nachteil, wenn diese beiden Optionen dauerhaft abgeschaltet bleiben? Ich habe DBMemos die werden ja als Blobs gespeichert. Wann wird das Array genutzt? Ich melde das mal beim IBDac-Support.
genau das weiß ich nicht - in der Hilfe steht darüber nicht wirklich was drin und ich habe auch gerade erst mit IBDAC angefangen.. Genau frag mal beim Support nach, ich schau ob ich noch Infos auftreiben kann...
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: IBDAC extrem langsam (16 x langsamer als IBX)

  Alt 27. Jan 2011, 09:45
Ich hab mal nach "CacheArray" und "CacheBlobs" gegoogelt. Und das gefunden:

http://www.devart.com/forums/viewtop...r=asc&start=15

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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: IBDAC extrem langsam (16 x langsamer als IBX)

  Alt 27. Jan 2011, 09:47
Vom Namen her, sorgt es für ein verzögerrtes Lesen von Blobs
Markus Kinzler
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: IBDAC extrem langsam (16 x langsamer als IBX)

  Alt 27. Jan 2011, 09:49
Hi,

wenn ich Deferred einfach mal so übersetze heißt das verzögert, verschoben (http://www.dict.cc/?s=deferred)
Was da allerdings genau passiert weiß ich nicht - wie gesagt meine Hilfe zu den IBDac ist gerade nicht sehr mitteilsam....

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von DelphiBandit
DelphiBandit

Registriert seit: 19. Feb 2007
Ort: bei Walsrode
165 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: IBDAC extrem langsam (16 x langsamer als IBX)

  Alt 27. Jan 2011, 09:54
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:
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
Nachteil:
Wesentlich mehr Schreibaufwand beim SQL-Statement
Carsten
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: IBDAC extrem langsam (16 x langsamer als IBX)

  Alt 28. Jan 2011, 16:35
Hier die Antwort vom Hersteller-Support (http://www.devart.com/forums/viewtopic.php?t=20112)

Zitat:
The CacheArray, CacheBlobs, DeferredBlobRead, and DeferredArrayRead options manage the way of working with BLOB and array content. If the CacheBlobs property is set to True, then local memory buffer is allocated to hold a copy of the BLOB content. If the DeferredBlobRead property is set to True, all BLOB values are only fetched when they are explicitly requested. To get the highest performance you should set DeferredBlobRead to True and CacheBlobs to True. In this case only requested portions of data will be fetched from the server. It's the same with the CacheArray and DeferredArrayRead options. For more information please read the IBDAC documentation.
  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 10:14 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