![]() |
Datenbank: Firebird/Interbase • Version: 2.0.3/7.1 • Zugriff über: IBX/FIBPlus
Performance: Interbase vs. Firebird
Hallo an alle Datenbank-Experten,
ich mache gerade Performance-Tests (Insert, Update, Select, Delete mit 1000 Records) mit den Datenbanken Interbase und Firebird. Als Zugriffskomponeten habe ich bisher IBX und FIBPlus verwendet. Ergebnis: Interbase ist deutlich schneller als Firebird. Sogar ein Remote-Zugriff ist bei Interbase schneller als lokal bei Firebird. Besonders das Prepare-Statement bei Interbase bringt eine erhebliche Performance-Steigerung. Folgende Komponenten benutze ich für DB-Aktionen: IBX: Insert, Update, Delete: TIBSQL Select: TIBDataSet FIBPlus: Insert, Update, Delete: TpFIBQuery Select: TpFIBDataSet Hat jemand gleiche oder andere Erfahrungswerte? |
Re: Performance: Interbase vs. Firebird
|
Re: Performance: Interbase vs. Firebird
Naja laut deren Testergebnisse ist Firebird schneller :?:
Das ist doch sehr merkwürdig... |
Re: Performance: Interbase vs. Firebird
Dort wird aber ein standardisierter Test verwendet und höchstwahrscheinlich nicht aus Delphi heraus.
Es könnte zusätzlich auch mit den Komponenten zusammenhängen. Welches ODS hatten deine verwendeten Datenbanken? |
Re: Performance: Interbase vs. Firebird
Was meinst du mit ODS der Datenbanken?
|
Re: Performance: Interbase vs. Firebird
ODS = On Disc Structure. Ist das Format der Datenbankdateistruktur. FB kann seine Vorteile nur ausspielen, wenn die passende neure ODS Version vorliegt. Ältere IB6-Datenbanken werden von FB nicht automatisch angepasst.
|
Re: Performance: Interbase vs. Firebird
Ich habe für meinen Test 2 neue Datenbanken angelegt.
Eine Datenbank besteht auch nur aus einer Tabelle. |
Re: Performance: Interbase vs. Firebird
also das thema würde mich auch mal interessieren und zwar
gibt es wo ein programm, mit dem ich einenleistungsindex der verschiedenen Datenbanken machen kann? - aber einen, der nicht einfach ein SQL Script abarbeitet, sondern einen, der von verschiedenen threads abfragen an die Datenbank schickt? hintergrund ist, möchte gerne wissen, wieviel es bringt
einfach zu sehen, wo kann ich bessere komponenten reinstecken, und was bringt das dann wirklich in einem stresstest. Bin schon am überlegen, mir ein eigenes testprogramm zu erzeugen, am besten wäre es dann natürlich, wenn der server dann nicht isntalliert werden muß, sondern einfach als exe im selben dir gestartet wird (sollte doch gehen bei FB oder?) und dieser mit ein paar unterschiedlichen Konfigurationen dann die testscripts ablaufen lässt hat schon mal wer was in die richtung gemacht? PS.: habs in diesen thread dazugeostet, da ich schon länger mit dem gedanken spiele, und durch diesen thread wieder dran denke ... |
Re: Performance: Interbase vs. Firebird
meine Tests basieren auf Delphi und Fibplus weil das die Plattform ist mit der IBExpert programmiert ist.
Zu einzelnen connections kann aich nichts sagen, aber auf Basis der IBExpert Demo DB dauert das erzeugen und verarbeiten der prozedur initall mit dem parameter 10000: auf ib75 und ib2007: ca 60 Sekunden auf fb15: ca 50 Sekunden auf fb20: ca 30 Sekunden Das sind ca 800000 genau reproduzierbare Operationen, gut verteilt auf select, insert, update und delete. Die Prozedur kann man mit wenigen Änderungen auch als ibeblock ablaufen lassen, dann wird jede Operation gesonderte per Client API ausgeführt, also wie ein ganz normales Delphiprogramm das ohne Stored Procedure auf dem Server auch machen würde. auf ib75 und ib2007: ca 230 Sekunden auf fb15: ca 210 Sekunden auf fb20: ca 210 Sekunden auf fb21: ca 140 Sekunden Das war immer die gleiche Hardware und die DB wurde vor dem Test neu erstellt. Einen Geschwindigkeitsvorteil kann ich aufgrund dieses Tests nicht erkennen, heisst aber nicht das andere Tests nicht Vorteile zeigen können. Gruß Holger ![]() |
Re: Performance: Interbase vs. Firebird
Leider kann ich das überhaupt nicht nachvollziehen.
Poste mal mein Programmcode für einen Update mit TpFIBQuery... die Prozedur mit 1000 mal aufgerufen...
Delphi-Quellcode:
Mache ich rigendwas falsch?
DataRec.LastUpdate := Now;
FQueryUpdate.Transaction.StartTransaction; if (not FQueryUpdate.Prepared) then begin FQueryUpdate.SQL.Text := 'UPDATE table_test SET name=:name, number=:number, lastupdate=:lastupdate WHERE id=:id'; FQueryUpdate.Prepare; end; FQueryUpdate.ParamByName('id').AsInteger := DataRec.Id; FQueryUpdate.ParamByName('name').AsString := DataRec.Name; FQueryUpdate.ParamByName('number').AsInteger := DataRec.Id; FQueryUpdate.ParamByName('lastupdate').AsDateTime := DataRec.LastUpdate; FQueryUpdate.ExecQuery; FQueryUpdate.Commit; Zeiten bei 1000 Datensätzen: Interbase: ~ 224 ms Firebird: ~ 1400 ms |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 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