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 5 von 8   « Erste     345 67     Letzte » 
jobo

Registriert seit: 29. Nov 2010
2.656 Beiträge
 
Delphi 2010 Enterprise
 
#41

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

  Alt 13. Aug 2019, 22:57
Also ich finde, man kann erstmal niemand vorwerfen, dass er das System nutzt (und dabei überfordert bzw. nicht optimal arbeitet).
Und diese Dataset Klamotten und die datensensitiven Komponenten sind ja immerhin ein Teil der Erfolgsgeschichte. Warum soll ich mit Delphi ein RAD Tool einsetzen, mit dem ich aber lieber nicht RAD Entwicklung mache, sondern die DB schone?

Es gibt eine Geschichte -ich weiß nicht, ob sie stimmt- von einem Deutschen LKW Hersteller in Indien, wo ständig die Wagen zusammengebrochen sind und die Kunden sich beschwert haben. Der Hersteller hat gesagt, Ihr habt den Wagen überladen, das ist gegen die Nutzungs- und Garantiebestimmungen. Und die Kunden haben gesagt: Ich habe den Wagen einfach nur voll geladen.
Da der Hersteller in diesem Markt Fuß fassen wollte, hat er begonnen, seine LKW stärker auszulegen.

Mir ist ehrlich gesagt nicht klar gewesen, dass es so drastische Unterschiede gibt zwischen den System. Zu Delphizeiten habe ich mit Oracle gearbeitet. Nun arbeite ich viel mit Postgres, das sich angeblich ähnlich (schlecht) schlägt, wie Firebird. Das Phänomen ist mir aber in Webprojekten mit Postgres noch nicht aufgefallen.

Die Frage wäre doch nun, wie man dieses Manko aus Datenbanksicht erklären und ausbessern kann, ohne dabei alles umzukrempeln (in den Client Programmen). Denn das ist ja in vielen Fällen clientseitig offenbar aussichtslos (Aufwand).

Und es sind ja auch schon gute Punkte genannt worden.

Wieso nimmt Firebird sich nicht den verfügbaren Hauptspeicher, so dreist wie es MSSQL macht?! Es gibt sicher nichts schnelleres, als alles was geht im Hauptspeicher zu puffern! Vielleicht weil FB auch eine süße, kleine embedded DB ist und das einfach in den Köpfen der Entwickler rumwabert? Welches Feature macht da den Unterschied?
Wieso macht es Postgres nicht? Die Systeme laufen standardmäßig auch auf Raspy & Co und das ist eine Hardwareausrüstung, die vor 20 Jahren noch Desktop/Server Niveau war, heute ein Witz für Server. Teuren Speicher nahm man sich nicht einfach so. Aber, Speicher ist nicht mehr teuer. Warum nicht mal die Schleusentore öffnen? Das großzügiger zu handhaben dürfte doch nicht so ein Riesenfeature sein.

Ganz klar, ich bin nicht dafür, stumpf seinen inperformanten Standard Code abzuliefern, im Gegenteil. An vielen Stellen muss man halt erstmal drauf kommen, wie es besser gehen könnte. Dabei helfen solche Threads ja vielleicht.
Aber ich sag auch:
Wenn man von Delphi Entwicklern fordert, dass sie endlich mal ihre Hausaufgaben machen, dann fordert man das doch am besten auch von den Programmieren der Datenbank oder?
Gruß, Jo
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.295 Beiträge
 
Delphi XE4 Professional
 
#42

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

  Alt 13. Aug 2019, 23:22
Hallo,
also ich hatte ja schon geschrieben.

Wir benutzen nur FB.

Jede Query bei uns wird geprüft, ob sinnvolle Indices vorhanden sind usw..
Und das bei verschiedenen DB-Größen (Stichwort Selektivität),
Das erfordert einen großen Aufwand, der sich im Endeffekt aber rechnet.
Trotzdem fallen wir manchmal doch rein, wenn z.B. ein Index sogar bei einem Select bremst,
kann passieren, kommt aber selten vor.

Wir benutzen übrigens keine TDB-Komponenten (aka datensensitiv).
Alle Listenanzeigen kommen in <TList>'s und werden über entsprechende Grid-Renderer "bearbeitet".

Viele Queries sind es nicht, die pro Arbeitsschritt (=Workflow) gestartet werden,
vielleicht mal 20/30, aber das sind dann schon viele.

Deshalb komme ich nicht in das Problem "FB viele Queries -> doof".
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
393 Beiträge
 
FreePascal / Lazarus
 
#43

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

  Alt 14. Aug 2019, 01:11
Wieso nimmt Firebird sich nicht den verfügbaren Hauptspeicher, so dreist wie es MSSQL macht?! Es gibt sicher nichts schnelleres, als alles was geht im Hauptspeicher zu puffern! Vielleicht weil FB auch eine süße, kleine embedded DB ist und das einfach in den Köpfen der Entwickler rumwabert? Welches Feature macht da den Unterschied?
Gerne ein wenig Erklärung dazu: stell dir mal vor du hast eine 100GB DB mit 100 tabellen die jeweils 1GB belegen, deine Abfrage beziehen sich aber ausschliesslich auf Daten einer Tabelle, deren Rohdaten 1GB belegen (nennt man bei firebird datenpages, indexpages, und noch ein wenig krams aus kleineren Systemtabellen und transaktionsdaten).

Ein ganz banaler select count() auf dieser Tabelle kann von Firebird nur dann beantwortet werden, wenn jede Recordversion auf sichtbarkeit/gelöscht geprüft wurde für den Transaktionskontext, aus dem das aufgerufen wurde. Repeatableread connections können zB andere Anzahlen sehen als Readcommitted usw.

Wie behandelt firebird nun deine Abfrage:

Es lädt sich alle erforderlich Pages von der Platte in den RAM und im RAM wird das dann auseinandergefrickelt.

Nehmen wir an, deine DB benutzt den Superserver 2x oder 30, bei dem es einen gemeinsamen Cache für alle gibt. In Tools wie IBExpert siehst du dann das zB der Wert Reads beim ersten Zugriff ziemlich hoch ist, reads sind die pages, die von platte in den RAM geladen wurden. Gehen wir mal davon aus das du 16k Pagegröße beim Anlegen der DB benutzt hast und als cache buffers 100000 eingestellt hast. Damit weiss firebird, es kann bis zu 1,6 GB RAM fest benutzen. Deine komplette Tabelle belegt aber gerade mal 1GB, also ca 65000 pages. In den Reads wirst du sehen, das zu deinem SQL 65000 pages in reads stehen und die wurden auch im Speicher in etwa nun physikalisch belegt +x für das was der prozess eh braucht.

Warum aber Firebird irgendwas in den RAM packen sollte was keiner wissen will, erschliesst sich mir nicht.

Nun kommt der zweite Client und will auch noch mal einen Count wissen. Was passiert? Firebird nimmt das SQL entgegen,analysiert dazu wie schon beim ersten Mal die erforderlichen Pages und merkt beim Superserver, huch, die sind ja schon im Speicher, also brauch nix nachgeladen werden, sondern es kann gleich im RAM losgehen. In den Reads liest du nun übrigens auch 0 , d.h. alles was gebraucht wird, war schon im ram.

Solange nicht alle zugewiesenen CachePages belegt sind und für andere Pages weiterer RAM gebraucht wird, wird firebird superserver die daten auch nicht mehr aus dem ram rausschmeissen, es sei denn, die letzte Connection meldet sich dann auch noch ab und es ist kein Client mehr verbunden. Sobald jemand dann neu kommt geht das wieder von vorne los, wenn man das vermeiden möchte lässt man immer einen client aktiv.

Es ergibt aber immer noch keinen sinn, die nächten 100GB RAM mit Tabellen vollzumüllen, die keiner braucht. Schon gar nicht auf einer Maschine, die eben nicht 1GB RAM frei hat (Bedenke, es gab bis vor einigen Jahren und auch heute noch 32bit Versionen von Datenbanksystemen, die bei 2GB dicke backen machen. Firebird kann auch als 32bit Version im Gegensatz zum Beispiel zu MS Access mdb auch eine 10TB Datenbankdatei öffnen und sauber verwalten, aber prozesstechnisch gehen da nicht mehr als 2GB RAM in der 32 Bit Welt).

Und spätestens bei der 2TB Datenbank könnte es eng werden mit alles im RAM.

Sicherlich erfordern komplexe Abfrage mit group by etc einiges mehr an RAM, Global Temp Tables arbeiten komplett im RAM oder Recordversionen, Tempspace ist zunächst ram, wenn aber mehr gebraucht wird, ausgelagert, aber das ist alles konfigurierbar, wen man es braucht und der RAM da ist. Firebird läuft aber auch heute noch auf minimal Hardware mit vollem Funktionsumfang und insbesondere mit Betriebssystemen wie Linux ist das sehr gut skalierbar. Und die Standard Konfiguration ist nicht so schlecht, mit falschen Parametern kann man auch viel falsch machen.

Zu viel RAM muss übrigens kein Vorteil sein, weil dann ggf zu ändernde Pages wesentlich länger im RAM bleiben und erst mit dem Commit auf den Datenträger geschrieben werden (das aber eben mit forced writes in einer extrem robusten reihenfolge, die bei windows ohne forced writes verändert wird und ein servercrash ohne forced writes auf windows gerne mal in einer kaputten datenbank enden kann. Unter linux kann ich das auf filesystemeben vermeiden und deutlich besser optimieren, als das was windows in ntfs das selber macht. Bei Dialogsoftware kommt dann unglücklicherweise beim speichern eine Wartezeit zustande, die der Anwender merkt, aber bei kleinerem Cache wären die Pages ggf zum Teil schon vorher wieder auf dem Datenträger.

Microsoft SQL Server ist von Microsoft und hat halt unter Windows die Angewohnheit zu sagen, der Rechner gehört mir und nur wenn was übrig bleibt, kann das jemand anders haben.
Welche Tricks da laufen weiß ich nicht, aber ein von mir mal auf Linux gemachter tpc Benchmark mit Firebird30 und MSSQL auf Linux brachte eine überraschend ähnliche Leistung, bei der Firebird aber sogar noch besser war, der erreichte tpc Wert für den MSSQL Server auf dieser Maschine (Kosten ca 4000€) aber laut Vergleichstabelle dieses tpc benchmarks in Bereichen lag, die ansonsten kein aktueller Windows mssql server unter 40000 US$ gebracht hat.

Leider hab ich das nicht gut dokumentiert und müsste das ggf ncoh mal zusammensuchen, aber wer weiß, wenn ich zeit hab mach ich das noch mal.

Wie schon geschildert, MSSQL mag scheinbar mit dataset/datasource/lookup/master-detail Delphi Applikationen wie besser klarkommen, es ist aber für optimierte Anwendung nicht annähernd 4-10 mal schneller.

btw: RAM und x4 m.2 SSDs sind vom Speed her nicht mehr so unterschiedlich, Ram ist bei größeren Blöcken oft gerade mal doppelt so schnell, wenn überhaupt. Mach einfach mal benchmarktests auf ssd und auf Ramdisk, das ist je nach Aufgabenstellung meiste nähere aneinander als man erwarten würde.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
1.972 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#44

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

  Alt 14. Aug 2019, 06:59
Also wenn man die Changelogs zu FB 4.0 liest merkt man schon, dass die Entwickler eine Flaschenhälse im Netzwerkinterface von FB angegangen sind. Speziell bei vielen kleinen Anfragen trennt FB sehr früh die TCP-Verbindung, sodass die neu ausgehandelt werden muss. Insofern würde ich sagen, schaukeln sich hier die Eigenarten von FB und Delphi gegenseitig zu einem Problem hoch.

Aus den o.g. Gründen bewirken Einstellungen am DB-Cache auch verhältnismäßig wenig. Und umso stärker wirkt sich das Problem aus, je mehr Clients am Server hängen und je schlechter das Netzwerk konstruiert ist (z.B. billige Switches mit minimalem ARP-Cache, Mesh-WLAN etc.).

In der Konsequenz müssen Delphientwickler die FB nutzen, einen erhöhten Aufwand betreiben, performante Clients zu schreiben. Damit wird der Gedanke, der hinter RAD mal stand, ad absurdum geführt. Die Tatsache, dass es Spezialisten (neudeutsch "Berater") braucht, die Delphientwickler coachen, bestätigt das ja ein Stück weit. Klar kann man mit FB performante Anwendungen schreiben. Kann man wohl mit jedem aktuellen, auf heutige Multicore-CPUs optimierten DBMS.

Die entscheidende Frage ist: Mit welchem DBMS kann man mit Delphi am schnellsten das RAD-Konzept umsetzen? Intuitiv so, wie es mal von Borland gedacht war. Die Antwort möge jeder sich selbst geben...
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
Schokohase
(Gast)

n/a Beiträge
 
#45

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

  Alt 14. Aug 2019, 08:07
Dieses RAD ist ja ganz nett für ein Prototyping, "schnell mal was darstellen" oder wirklich einfache Projekte.

Aber sobald das Projekt anfängt ernsthafter zu werden und eine gewisse Komplexität erreicht, dann sollte man sich von RAD verabschieden und die Anwendung in Schichten aufbauen.

Bei RAD bekommt man keinen (unabhängig) testbaren Code (Unit-Tests) und das sollte ab einer bestimmten Komplexität ein NO-GO sein.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.295 Beiträge
 
Delphi XE4 Professional
 
#46

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

  Alt 14. Aug 2019, 10:16
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;
Wer stur den Code in TForm1.Btn1Click reinschreibt
-> OK, Vorredner hat Recht
Heiko
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.565 Beiträge
 
Delphi 6 Enterprise
 
#47

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

  Alt 14. Aug 2019, 11:06
Der eine sagt, wenn der Entwickler vernünftig arbeitet klappt es auch mit der Datenabank.
Der andere sagt, wenn die bei der Datenbank was ändern wäre die vielleicht besser mir Delphi, ander könnens ja auch.

Es hat aber noch keiner gesagt: Wenn die DB-Controls verbessert würden, könnte auch vieles besser werden, oder?


Es kann natürlich sein, dass da keiner mehr Arbeit rein stecken will, weil der Trend ja eh von RAD/DB-Controls weg geht, wegen der Dinge die Schokohase gesagt hat und weil die DB-Controls ja auch andere Probleme haben. Aber ich wollte trotzdem die dritte Ecke dieses Spannungsdreiecks erwähnt haben.
Ralph
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.656 Beiträge
 
Delphi 2010 Enterprise
 
#48

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

  Alt 14. Aug 2019, 11:35
Muss man wirklich den Nutzen von Cache Mechanismen bezweifeln oder die Nachteile von Chaching als Argument gegen eine Optimierung nehmen? Muss man angesichts von tausenden Libs, Komponenten und Frameworks in Frage stellen, ob RAD eine Berechtigung hat?
Ich hab es sicher schon mal irgendwo geschrieben, aber ich habe an Delphi immer die Kontinuität geschätzt, die durch die VCL möglich wurde. Egal ob und was MS erfunden oder in die Tonne gehauen hat, es war mit Delphi meist kein Weltuntergang.

Ich finde es super, wenn in Threads wie diesen Potential für Verbesserungen aufgedeckt wird. Keine Ahnung, wieviel Firebird Entwickler hier mitlesen-vielleicht keiner-, aber was Delphi selbst und das Verbesserungspotential seiner Komponenten angeht, sehe ich da schon Potential. Über die gemeinsame Geschichte mit Interbase gibt es ja vielleicht auch an der Ecke eine Wahrnehmung. Die Hinweise von Codehunter zeigen so oder so, dass man offenbar einige Probleme wahrnimmt und angeht.

Und wir alle wissen, was passiert, wenn man an einer Seite der Tischdecke zieht. Spannend wird es doch, wenn solche Diskussion zeigen, wo Falten in der Tischdecke sind und man sich damit auseinandersetzen kann, diese glatt zu ziehen, aus welcher Ecke auch immer. (Oder künftig wenigstens sein Geschirr neben die Falten stellen zu können, wem es reicht)
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
393 Beiträge
 
FreePascal / Lazarus
 
#49

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

  Alt 14. Aug 2019, 15:22
Also wenn man die Changelogs zu FB 4.0 liest merkt man schon, dass die Entwickler eine Flaschenhälse im Netzwerkinterface von FB angegangen sind. Speziell bei vielen kleinen Anfragen trennt FB sehr früh die TCP-Verbindung, sodass die neu ausgehandelt werden muss. Insofern würde ich sagen, schaukeln sich hier die Eigenarten von FB und Delphi gegenseitig zu einem Problem hoch.
sorry, vielleicht bin ich ja auch nur zu blöd, das zu verstehen, aber Firebird trennt gar keine TCP/IP Verbindung, ohne das der Client das verursacht. Wo die Info also her kommt ist mir neu. Und wenn eine TCP Verbindung bzw Socketconnection z.B. durch den tcpipe.exe connected ist, wird da weder was ab- noch ungefragt wieder aufgebaut, es sei denn, der Client möchte das oder der Server ist der Meinung, der Client ist dauerhaft nicht erreichbar. Ich für meinen Teil sehe keine technische Grundlage für die o.a. Aussage und ich hab schon mehr als genug Socketconnections auf dem Wege damit untersucht.

Das Flaschenhälse im Netzwerkinterface existieren ist unbestritten und das die in fb4 im Fokus stehen, ist auch ok, aber das sich da irgendwas ohne Grund auf und wieder abbaut ist mir neu.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
224 Beiträge
 
Delphi XE6 Enterprise
 
#50

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

  Alt 14. Aug 2019, 16:54
Es gab mal bei HK Software einen DB-Monitor,
wo man die einzelnen SQL-Befehle protokollieren konnte,
ohne das es die eigentliche Anwendung mitbekommt ...
Ich finde den Monitor aber nicht mehr (habe den damals sogar selber gekauft).
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.
  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 06:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf