AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Fragen bezüglich Performance von Firebird in einer Anwendung

Fragen bezüglich Performance von Firebird in einer Anwendung

Ein Thema von TK8782 · begonnen am 8. Aug 2019 · letzter Beitrag vom 15. Aug 2019
Antwort Antwort
Seite 6 von 8   « Erste     456 78   
tsteinmaurer

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

AW: Fragen bezüglich Performance von Firebird in einer Anwendung

  Alt 14. Aug 2019, 16:17
Zitat:
So ein Tool suche ich auch noch. Der SQL-Monitor von DevArt ist leider auf einem Auge blind, wenn es um von IBDAC generierten SQL-Code wie beim IBCLoader oder Array-DML geht.
Falls es über die Firebird Trace API sein darf (benötigt Firebird 2.5 oder höher), dann z.B.: https://www.upscene.com/fb_tracemanager/

IBExpert hat auch eine Firebird Trace API Integration: https://www.ibexpert.net/ibe/pmwiki.....TraceAndAudit
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#52

AW: Fragen bezüglich Performance von Firebird in einer Anwendung

  Alt 14. Aug 2019, 17:55
Hallo,
Zitat:
Bei RAD bekommt man keinen (unabhängig) testbaren Code (Unit-Tests)
Einspruch Euer Ehren.

Delphi-Quellcode:
procedure TForm1.Btn1Click (OK, Btn1 ist schon mal doof ;) )
begin
  TMeinController.MacheWasWichtiges()
end;

class procedure TMeinController.MacheWasWichtiges();
begin
  if IrgendEineAbfrage() then
  begin
    TMeinService.NuAber().
  end;
end;
Ja, nee ... das ist auf jeden Fall nicht das was ich meinte ... das ist (nein, ich sage es nicht).
  Mit Zitat antworten Zitat
mlc42

Registriert seit: 9. Feb 2013
123 Beiträge
 
#53

AW: Fragen bezüglich Performance von Firebird in einer Anwendung

  Alt 14. Aug 2019, 20:27
Weiß jemand ob FireDAC schon mit FB4 klar kommt? Dann würde ich gerne mal Tests machen
ob sich da etwas grundsätzlich verbessert hat.

Ich finde es ein bischen Schade das seitens der Firebirdanhänger meist argumentiert wird,
FB ist super, da muss man nix verbessern, der Anwendungsprogrammierer hat die falschen Werkzeuge
benutzt oder schlicht keine Ahnung. So trivial ist es in der Praxis nicht.
Wenn man vor der Wahl steht Berge von altem Code zu ändern, die geprüfte Verläßlichkeit dabei
aufzugeben oder einfach ein dafür geeigneteres Werkzeug zu verwenden liegt es auf der Hand
welchen Weg man aus wirtschaftlichen, zeitlichen und Stabilitätsgründen geht.

Der Threaderöffner fragte ja nach der Anwendungsperformance die man von Firebird erwarten kann.
Er kann aus dem Thread die Erkenntniss mitnehmen das FB eine gute Performance liefert wenn man
passend programmiert und gewisse Fallstricke vermeidet.

Ich für meinen Teil habe kein Problem damit , da ich bei den Kunden einfach umschalten kann.
Ich würde mich freuen wenn die 4.0 das besser macht. Warum nicht ein gutes Produkt verbessern
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#54

AW: Fragen bezüglich Performance von Firebird in einer Anwendung

  Alt 14. Aug 2019, 21:40
Ich muss sagen, ich finde dieser Thread hier ist eine der Sternstunden der DP. Hier kommt so viel Knowhow zusammen. Wenn man als Frontend-Entwickler aufmerksam mitliest, sieht man das es nicht den einen golden Weg gibt. Es ist nie verkehrt, Dinge zu hinterfragen, selbst wenn man etwas schon 20 Jahre auf eine bestimmte Weise gemacht hat.

Zur "Firebird-Sentimentalität": In gewisser Weise verhält sich Firebird zu Interbase so, wie MariaDB zu MySQL. Der Community-Fork gegen den kommerziellen Platzhirsch. Stellenweise ist die Community flexibler, liberaler und manchmal einfach auch schneller mit der Einführung neuer Features.

Letztendlich verdiene ich aber nicht mit Firebird und Dienstleistungen drumherum sondern mit Businessanwendungen, die Firebird nutzen. Heißt, das DBMS muss arbeiten. Effizient und zügig. Entscheidend ist also vor allem: Wie viel Aufwand muss ich treiben, um meine Milestones zu erreichen? In dem Punkt scheint FB doch eine recht teure Gratis-Lösung zu sein.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#55

AW: Fragen bezüglich Performance von Firebird in einer Anwendung

  Alt 14. Aug 2019, 23:06
Letztendlich verdiene ich aber nicht mit Firebird und Dienstleistungen drumherum sondern mit Businessanwendungen, die Firebird nutzen. Heißt, das DBMS muss arbeiten. Effizient und zügig. Entscheidend ist also vor allem: Wie viel Aufwand muss ich treiben, um meine Milestones zu erreichen? In dem Punkt scheint FB doch eine recht teure Gratis-Lösung zu sein.
Gut gebrüllt Löwe, aber bei den Platzhirschen O&M wird zähneknirschend ein DB-Admin mit ein paar Kursen akzeptiert, bei FB,Postgres und Konsorten soll das vom Himmel fallen?
Eine Einführung welche Schrauben was bewirken, sollte schon dabei sein, aber ein notwendiges Tuning für z.B. stark BLOB-lastige DB darf schon etwas kosten, aber dann sollte auch klar darauf hingewiesen werden, das die gewünschten Fähigkeiten eben nicht so einfach als Standardinstallation verfügbar sind.


Gruß
K-H

P.S.
Auch ich begrüße es, wenn durch Selbststudium das Wissen erweitert werden kann, aber irgendwann muß man auch fragen ob tagelanges Suchen und Basteln wirklich biliger ist als 2*8Stunden intensive Fortbildung.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (14. Aug 2019 um 23:09 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#56

AW: Fragen bezüglich Performance von Firebird in einer Anwendung

  Alt 15. Aug 2019, 05:15
Hallo,
#Schokohase

mir ging es um testbaren Code in einem RAD-System.
Der (angedachte) Service wäre dann über einen Unit-Test testbar.
Heiko
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#57

AW: Fragen bezüglich Performance von Firebird in einer Anwendung

  Alt 15. Aug 2019, 05:38
mir ging es um testbaren Code in einem RAD-System.
Der (angedachte) Service wäre dann über einen Unit-Test testbar.
Der ist nicht testbar im Sinne von Unit-Tests.

Denn dort erstellt man sich Instanzen mit gemockten Abhängigkeiten und überprüft das Zusammenspiel mit diesen Abhängigkeiten.

Der angedachte Service muss sich von irgendwo die Daten holen und genau dieses irgendwie erstetzt man für den Test damit man eben nicht auf die Datenbank zugreifen muss. Natürlich muss man irgendwann auch Tests mit der Datenbank durchführen, aber das ist Teil eines anderen Test-Komplexes und passiert niemals innerhalb der Unit-Tests.

https://de.wikipedia.org/wiki/Softwaretest#Teststufen

Geändert von Schokohase (15. Aug 2019 um 05:42 Uhr)
  Mit Zitat antworten Zitat
tsteinmaurer

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

AW: Fragen bezüglich Performance von Firebird in einer Anwendung

  Alt 15. Aug 2019, 13:25
Zitat:
Letztendlich verdiene ich aber nicht mit Firebird und Dienstleistungen drumherum sondern mit Businessanwendungen, die Firebird nutzen. Heißt, das DBMS muss arbeiten. Effizient und zügig.
Verständlich, dass Freibier (ah, sorry: kostenloser Firebird) performen soll wie Sau, wenn möglich. Böse Zungen behaupten, da deutschsprachige Kollegen bei der Gründung dabei waren, dass sich Firebird (Fb) von Freibier (Fb) ableitet, aber vielleicht war es dann doch der Phönix (Vogel) aus der Asche. Aber das ist eine andere Geschichte ...

Ich bin in der glücklichen Lage, dass mir Firebird nicht meine Familie ernährt. Darum muss ich auch nicht Firebird (+ meine Dienste) bei jeder Gelegenheit verteidigen bzw. an den Mann / die Frau bringen, sondern auch kritisch hinterfragen. So zB finde ich, dass Firebird viel zu spät auf den SMP-Zug in der SuperServer Architektur aufgesprungen ist. Da hatte InterBase definitiv die Nase vorne, aber vielleicht auch nur, weil ein paar größere Kunden diese Skalierbarkeitsthema einfach eingefordert hatten (reine Mutmaßung, in der Hoffnung, dass ich von InterBase-Insidern nicht gesteinigt werde ). Firebird punktete mit einer massiven Flotte an SQL-Spracherweiterungen, um auf die anderen Hersteller aufzuschließen.

Grundsätzlich soll jeder das nehmen, was am Besten funktioniert. Warum ist dann Firebird weiterhin im Rennen, wenn es so viel schlechter als Oracle oder MSSQL performt?
Vielleicht sind es dann doch so Dinge wie:
* kostet nix (auch wenn die Entwicklung an Firebird vor 10 Jahren sich in der Gegend von 5-stelligen USD pro Monat abspielte)
* klein und handlich mit einfacher Installation
* Multi-OS Support
* wenig Administration (ein bisschen automatisiertes gbak, gfix)
* enormer SQL-Sprachumfang, sowohl client- als auch serverseitig
* hohe Read/Write-Concurrency Fähigkeit (record versioning)
* Repeatable Read / Snapshot Isolation für eine stabile Sicht auf die Daten z.b. bei Reporting Use-Cases
* etc ...

Vor allem die Read/Write-Concurrency Fähigkeit war ein beliebtes Beispiel was z.b. MSSQL ja bis Version 2005 gar nicht konnte bzw. auch dort by Default OFF war, weil dann die tempdb ein echter Flaschenhals wurde. Ich möchte nicht wissen, wieviel clientseitiger Code fürs Locking-Exception-Handling mit Re-Try Mechanismen notwendig war, um das stabil zu bekommen. Aber gut, die Zeit verging und MSSQL ist da mit Sicherheit viel besser geworden. Andere böse Zungen (TM) behaupteten, dass in der MSQL Welt deswegen auch so stark die Trennung von OLTP und OLAP auf einer Datenbasis forciert wurde, weil dir mit einer MSSQL Datenbank Reads auf nicht committeten Writes mit Locks nur so um die Ohren geflogen ist. Und vom Thema "Lock Escalation" von Locking auf Datensatz in Richtung Page-Ebene sprechen wir noch gar nicht. Die Leute haben halt dann angefangen mit dem NOLOCK Hint zu arbeiten. ACID Eigenschaften Goodbye.

Holger hat ja schon das Problem mit der SELECT COUNT(*) ... Performance geschildert. Ist dem Record Versioning und der hohen Read/Write-Concurrency Fähigkeit geschuldet. Aber man darf da hier schon den Anwendungsentwickler (oder Komponentenhersteller) in die Pflicht nehmen und z.b. folgendes
hinterfragen (Pseudocode unten):

Code:
...
anzahl = SELECT COUNT(*) FROM ... [WHERE ...];
IF (anzahl > 0) THEN
BEGIN
  ...
END
Großes Potential für eine Optimierung zB mit:

Code:
...
IF (EXISTS(SELECT 1 FROM ... [WHERE ...])) THEN
BEGIN
  ...
END
...
Oben war nur ein kleines Negativbeispiel aus der Praxis, das ich in dieser Form oft gesehen haben. Zusätzlich bin ich persönlich der Meinung, dass man sich mit jedem DBMS und dessen Eigenschaften auseinandersetzen MUSS, bevor man mit der Anwendungsentwicklung startet. Bei Firebird sind es halt dann so Eigenheiten wie die Wichtigkeit des Transaktionshandlings, OIT/OAT etc ... Da fährt der Zug drüber . Des Weiteren bin ich auch der Meinung, dass es nicht umsonst Software Engineering auf der Uni, Fachhochschule gibt und Leute dort 5+ Jahre verbringen, um das Rüstzeug für solide Architekturen und testbaren Code zu bekommen. Danach hat es auch sehr, sehr viel mit Erfahrung zu tun und mit Fehlern, die man hoffentlich machen darf, sofern man daraus lernt. Letztendlich ist es ein Handwerk, das man von der Pike lernen muss und über die Jahre verbessert/verfeinert.

Ein weiteres Thema mit massiven negativen Auswirkungen auf Datenbank-Backends sind O/R Mapper. In Bezug auf Performance und Optimierung haben O/R Mapper einen ganzen Industriezweig geprägt. Hersteller von Performance-Monitoring-Tools haben hier sehr gut verdient. O/R Mapper falsch eingesetzt, haben für mich immer folgende Analogie: Ein Rennpferd sieht einen 300kg Aushilfs-Jockey auf sich zukommen und denkt sich: "Shit, und jetzt muss ich genau so performen wie vor einer Woche mit einem 40kg Jockey?". Wenn man dann mal die Anwendungsentwicklung und einen fähigen DBA an einem Tisch bringt, wirds interessant, weil der DBA einfach nicht glauben will, was da alles für ein Sch... ausgeführt wird. Gut aber das ist jetzt hier nicht wirklich das Thema, aber O/R Mapper, falsch eingesetzt, sind eine tolle Spielwiese für inperformanten SQL Code.

Weil das Thema Caching gefallen ist. Ein herrliches und zugleich furchtbares Thema. Für mich ist der beste Cache der, den man nicht benötigt. Ein Cache ist eigentlich nur dann effektiv, wenn es sich um stabile Daten handelt, zB einmal beim Startup geladen und sich dann über die Programmlaufzeit nicht mehr verändert. Nur so wird man vermutlich eine hohe Cache-Hitrate von > 95% erhalten. Zum Beispiel Länder-ISO-Codes und deren Länderbezeichnungen oder etwas interessanter - da größer - Geo-Datenbanken (Mapping von Geo-Koordinaten auf Orte/Städte ...). Ab dem Zeitpunkt wo Daten im Cache verändert werden, wirds bedeutend kniffliger. Cache-Aktualität, Invalidierung, Lock Contention beim Updaten etc. werden dann wichtige Themen. Noch viel, viel schlimmer wirds bei verteilten Caches über Prozesse/Maschinen hinweg. zB ein Broadcast von Cacheänderungen hat gleich mal eine O(n2) Komplexität, was nicht skaliert. Es sind Projekte am (verteilten) Caching als Allheilmittel für Probleme in der Architektur böse gescheitert. Vor allem im Java-Umfeld. Im Delphi-Umfeld gehe ich jetzt nicht auf TClientDataset und CachedUpdates im Detail ein (bzw. ist auch schon sehr lange her). Man stelle sich vor, dass 50 Anwender/Maschinen Updates lokal cachen (uh, Caching) und dann auf die DB losgehen. Performance ist ev. das eine. Das andere sind dann Themen mit Datenintegrität (FK-Constraints), wo es ev. wieder Exceptions schmeißt, weil in einem cached Update ein Datensatz gelöscht wurde, den ein anderer Benutzer voraussetzt, dass es diesen gibt und was passiert dann mit dem Rest der gecachten Änderungen ...

Zurück zum Thema, warum mich dieser Thread interessiert. Firebird und Performance. Vor allem habe ich dann > 80K IOPS gelesen. Ist schon abartig was man 2019 alles zur Verfügung hat und dann trotzdem nichts hilft.

Aus Firebird-Sicht finde ich es toll wo das Projekt steht, vor allem auch weil die Entwicklung Geld kostet. Gut, wünschenwert wäre natürlich immer "mehr und besser". Aber es gibt ein stabiles 2.5/3.0er Release. Erste 4.0er Dev Builds sind verfügbar.
Es gibt eine 2019er Konferenz (https://firebirdsql.org/en/firebird-conference-2019/), wo auch 5.0 erwähnt wird. Macht irgendwo Bock nach Berlin zu fahren.

Aus Sicht der Anwendungsentwicklung wäre es natürlich schön, wenn jede DB gleich tickt. Tut es leider - oder vielleicht Gott sei Dank - nicht?

Nur ein paar Gedanken, in der Hoffnung, dass ich niemanden auf die Füße getreten bin.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Fragen bezüglich Performance von Firebird in einer Anwendung

  Alt 15. Aug 2019, 13:44
@Thomas
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#60

AW: Fragen bezüglich Performance von Firebird in einer Anwendung

  Alt 15. Aug 2019, 14:26
Hat ja auch jeder eine andere Perspektive aufgrund ganz unterschiedlicher Anforderungen. Ich hatte ja geschrieben, ich brauche möglichst einfache Mittel, um einfach nur Daten zu pumpen. Bei MariaDB hatte ich A) wesentlich größere Blöcke und B) sowas simples wie Multi-Row-Inserts:

INSERT INTO Tabelle (Feld1, Feld2) VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5,5); Macht in Summe genau 80 Zeichen. Bei Firebird habe ich stattdessen Execute-Blocks, womit für das selbe Ergebnis folgendes zu notieren wäre:
SQL-Code:
EXECUTE BLOCK AS BEGIN
INSERT INTO Tabelle (Feld1, Feld2) VALUES (1, 1);
INSERT INTO Tabelle (Feld1, Feld2) VALUES (2, 2);
INSERT INTO Tabelle (Feld1, Feld2) VALUES (3, 3);
INSERT INTO Tabelle (Feld1, Feld2) VALUES (4, 4);
INSERT INTO Tabelle (Feld1, Feld2) VALUES (5, 5);
END
Jetzt extrapoliere man das auf 50.000 Rows hoch, dann erkennt man den Overhead bei Firebird. Einfaches sprachliches Defizit würde ich sagen. In Kombination mit der geringen Blockgröße provoziert Firebird unnötig viele Requests und damit genau das Laster wo es ohnehin seine größte Schwäche hat (TCP).

PS: Kommentare wie "Dann nimm doch wieder MariaDB" wären überflüssig. Es sind zwei völlig verschiedene Projekte und eine Migration steht nicht zur Debatte.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:23 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