Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi mySQL Funktion Performance (https://www.delphipraxis.net/185996-mysql-funktion-performance.html)

EarlyBird 25. Jul 2015 13:18

Datenbank: MySQL • Version: 5.6 • Zugriff über: egal

mySQL Funktion Performance
 
Hallo
Ich habe ein Problem mit einer MySQL Funktion.
Ich habe zwei Tabellen mit einer Master Detail Beziehung.
Die Funktion summiert Werte aus der Detailtabelle.
In einer View gebe ich die Daten der Mastertabelle mit den summierten Werten der Detailtabelle aus.
In der View werden ca 500 Datensätze ausgegeben.
Das ganze dauert auf meinem entwicklungs PC unter 0,5sec
Auf einem anderen system mit 100% identischem Datenbank Schema dauert diese Abfrage mindestens 15sekunden.
Die Anzahl der Datensätze ist auch auf beiden Systemen gleich.
Es ist die gleiche MySQL Version auf beiden Systemen
Die Hardware ist in etwa identisch.

Gibt es servervariabelen die eine solche Performancebremse auslösen?
Wie kann ich den Fehler am besten eingrenzen?
Bin für jeden Tipp dankbar
Gruß EarlyBird

mkinzler 25. Jul 2015 13:21

AW: mySQL Funktion Performance
 
Schließt das selbe Schema auch die selben Indizes ein?

Bernhard Geyer 25. Jul 2015 14:07

AW: mySQL Funktion Performance
 
Ist nur diese Abfrage langsame oder auch ander Abfragen?

jobo 25. Jul 2015 15:02

AW: mySQL Funktion Performance
 
1. Prüfen ob tatsächlich alles so identisch ist, oder ob man nur dachte, es sei identisch
betrifft besonders Indizes (auch zuviel/andere Indizierung kann sowas auslösen), Datenvolumen der Detailtabelle, Füllgrad
2. Falls 1. tatsächlich so ist, DB Konfiguration prüfen, insbesondere Buffergröße und Beständigkeit)
Entwicklersysteme haben geringere Anforderungen als das Produktivsystem (Multiuser / Last)
Kann sein, dass der Unterschied daher rührt, dass im ersten Fall Group/Agg im Speicher durchgeführt wird, im 2. Fall auf Platte, mangels (verfügbarer, nicht unbedingt definierter)RAM Ressourcen.
Konkret kann ich da aber bei mySQL keine Parameter benennen.

EarlyBird 25. Jul 2015 17:38

AW: mySQL Funktion Performance
 
Hallo
Danke für Eure Antworten.

Die Schemen sind tatsächlich 100% identisch.
Auch die Indizes.
Abfragen funktionieren normal schnell.
Nur wenn ich die Funktion in einer Abfrage einfüge wird es so extrem langsam.

Multiuser/Last kann ich eigentlich auch Ausschließen da das Problem auch dann auftritt wenn ich allein darauf zugreife.
Das Datenvolumen und der Füllgrad sind kann ich auch ausschließen (Maximal 5000 Datensätze in der Detailtabelle)

Zitat:

Zitat von jobo (Beitrag 1309818)
... Buffergröße und Beständigkeit)
Kann sein, dass der Unterschied daher rührt, dass im ersten Fall Group/Agg im Speicher durchgeführt wird, im 2. Fall auf Platte, mangels (verfügbarer, nicht unbedingt definierter)RAM Ressourcen.
Konkret kann ich da aber bei mySQL keine Parameter benennen.

Das könnte ich mir durchaus vorstellen.
Kann ich das irgendwie prüfen?

noch mal Danke für Eure Hilfe

jobo 26. Jul 2015 12:37

AW: mySQL Funktion Performance
 
Zitat:

Zitat von EarlyBird (Beitrag 1309831)
Die Schemen sind tatsächlich 100% identisch.
Auch die Indizes.

Wie hast Du das überprüft?

Zitat:

Zitat von EarlyBird (Beitrag 1309831)
Abfragen funktionieren normal schnell.
Nur wenn ich die Funktion in einer Abfrage einfüge wird es so extrem langsam.

Was soll das nun bedeuten? "Die Funktionen"?
Du hast oben von einer Group/Agg Abfrage geschrieben, die auf einem System langsamer als auf dem anderen System läuft.
Wie lautet das Statement?

Zitat:

Zitat von EarlyBird (Beitrag 1309831)
Zitat:

Zitat von jobo (Beitrag 1309818)
... Buffergröße und Beständigkeit)
Kann sein, dass der Unterschied daher rührt, dass im ersten Fall Group/Agg im Speicher durchgeführt wird, im 2. Fall auf Platte, mangels (verfügbarer, nicht unbedingt definierter)RAM Ressourcen.
Konkret kann ich da aber bei mySQL keine Parameter benennen.

Das könnte ich mir durchaus vorstellen.
Kann ich das irgendwie prüfen?

Probier mal
>show variables;
https://dev.mysql.com/doc/refman/5.0...variables.html
und vergleiche die Ergebnisse, auch mit verschiedenen scopes. Ich hab keine Adminkenntnisse von mysql.

EarlyBird 26. Jul 2015 16:57

AW: mySQL Funktion Performance
 
Zitat:

Zitat von jobo (Beitrag 1309871)
Zitat:

Zitat von EarlyBird (Beitrag 1309831)
Die Schemen sind tatsächlich 100% identisch.
Auch die Indizes.

Wie hast Du das überprüft?

1. habe ich das Schema auf dem Produktivsystem aus dem Backupschema des Entwicklungssystem erstellt
2. habe ich ein Tool von Devart dafür genutzt
3. Habe ich es selbst überprüft

Zitat:

Zitat von jobo (Beitrag 1309871)
Zitat:

Zitat von EarlyBird (Beitrag 1309831)
Abfragen funktionieren normal schnell.
Nur wenn ich die Funktion in einer Abfrage einfüge wird es so extrem langsam.

Was soll das nun bedeuten? "Die Funktionen"?
Du hast oben von einer Group/Agg Abfrage geschrieben, die auf einem System langsamer als auf dem anderen System läuft.
Wie lautet das Statement?

Ich habe die Group/Agg Abfrage in eine eigene Funktion ausgelagert.
Diese Funktion nutze ich in der View.


Zitat:

Zitat von jobo (Beitrag 1309871)
Zitat:

Zitat von EarlyBird (Beitrag 1309831)
Zitat:

Zitat von jobo (Beitrag 1309818)
... Buffergröße und Beständigkeit)
Kann sein, dass der Unterschied daher rührt, dass im ersten Fall Group/Agg im Speicher durchgeführt wird, im 2. Fall auf Platte, mangels (verfügbarer, nicht unbedingt definierter)RAM Ressourcen.
Konkret kann ich da aber bei mySQL keine Parameter benennen.

Das könnte ich mir durchaus vorstellen.
Kann ich das irgendwie prüfen?

Probier mal
>show variables;
https://dev.mysql.com/doc/refman/5.0...variables.html
und vergleiche die Ergebnisse, auch mit verschiedenen scopes. Ich hab keine Adminkenntnisse von mysql.

Die Variablen habe ich auch schon verglichen.
da gibt es schon so einige Unterschiede.
Ich weiß nur nicht welche die Performance so stark beeinflussen können.
Es sind auch insgesamt so viele das ich nicht einfach alles probieren kann.

jobo 26. Jul 2015 20:52

AW: mySQL Funktion Performance
 
Zitat:

Zitat von EarlyBird (Beitrag 1309877)
1. habe ich das Schema auf dem Produktivsystem aus dem Backupschema des Entwicklungssystem erstellt
2. habe ich ein Tool von Devart dafür genutzt
3. Habe ich es selbst überprüft

ok
Zitat:

Zitat von EarlyBird (Beitrag 1309877)
Ich habe die Group/Agg Abfrage in eine eigene Funktion ausgelagert.
Diese Funktion nutze ich in der View.

Das ist vielleicht problematisch, aber wenn es auf x schnell ist und auf y langsam, ist es wohl nicht das Kernproblem.
Allerdings, wenn bei so wenig Datensätzen schon so lange Laufzeiten entstehen, ist die Umsetzung dieser Funktion oder die Integration in den View vielleicht auch nicht sehr gelungen.
Zitat:

Zitat von EarlyBird (Beitrag 1309877)
Die Variablen habe ich auch schon verglichen.
da gibt es schon so einige Unterschiede.
Ich weiß nur nicht welche die Performance so stark beeinflussen können.
Es sind auch insgesamt so viele das ich nicht einfach alles probieren kann.

Tja, ich werds erst recht nicht nicht durchprobieren. :)
Vielleicht orientierst Du Dich an der Idee, dass es am verfügbaren Speicher für Sort und Group Anweisungen liegt, also Memory Settings (xy_buffer_size). Das dürfte eine überschaubare Anzahl von Einstellungen sein, vielleicht sogar einige identisch.
Dann gibt's da noch die Dokumentation, die liefert sicher Hinweise ohne Durchprobieren.

EarlyBird 27. Jul 2015 11:54

AW: mySQL Funktion Performance
 
Zitat:

Zitat von jobo (Beitrag 1309887)
Zitat:

Zitat von EarlyBird (Beitrag 1309877)
Ich habe die Group/Agg Abfrage in eine eigene Funktion ausgelagert.
Diese Funktion nutze ich in der View.

Das ist vielleicht problematisch, aber wenn es auf x schnell ist und auf y langsam, ist es wohl nicht das Kernproblem.
Allerdings, wenn bei so wenig Datensätzen schon so lange Laufzeiten entstehen, ist die Umsetzung dieser Funktion oder die Integration in den View vielleicht auch nicht sehr gelungen.

in der Funktion steht nur eine Einfache Select mit der Group Anweisung es wird ein Parameter übergeben.
Wenn ich das ganze direkt in der View einbinde ist das Problem auch identisch.

SQL-Code:
Select ..., ..., (select sum(wert) from TableB where TableA_ID = a.ID Group by TableA_ID) as wertgesamt from TableA as a
ist identisch mit
Select ..., ..., datenbankname.Funktion(ID) as wertgesamt from TableA

mquadrat 27. Jul 2015 13:45

AW: mySQL Funktion Performance
 
Inno-DB oder MYISAM? In der MySQL-Workbench kann man sich ganz gut die Füllstände der Buffer und die Last-Verteilung anschauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 Uhr.
Seite 1 von 2  1 2      

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