AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi mySQL Funktion Performance
Thema durchsuchen
Ansicht
Themen-Optionen

mySQL Funktion Performance

Ein Thema von EarlyBird · begonnen am 25. Jul 2015 · letzter Beitrag vom 27. Jul 2015
Antwort Antwort
Seite 1 von 2  1 2      
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#1

mySQL Funktion Performance

  Alt 25. Jul 2015, 13:18
Datenbank: MySQL • Version: 5.6 • Zugriff über: egal
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: mySQL Funktion Performance

  Alt 25. Jul 2015, 13:21
Schließt das selbe Schema auch die selben Indizes ein?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: mySQL Funktion Performance

  Alt 25. Jul 2015, 14:07
Ist nur diese Abfrage langsame oder auch ander Abfragen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: mySQL Funktion Performance

  Alt 25. Jul 2015, 15:02
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.
Gruß, Jo
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#5

AW: mySQL Funktion Performance

  Alt 25. Jul 2015, 17:38
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)

... 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
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: mySQL Funktion Performance

  Alt 26. Jul 2015, 12:37
Die Schemen sind tatsächlich 100% identisch.
Auch die Indizes.
Wie hast Du das überprüft?

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?

... 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.
Gruß, Jo
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#7

AW: mySQL Funktion Performance

  Alt 26. Jul 2015, 16:57
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

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.


... 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.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: mySQL Funktion Performance

  Alt 26. Jul 2015, 20:52
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
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.
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.
Gruß, Jo

Geändert von jobo (26. Jul 2015 um 21:03 Uhr)
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#9

AW: mySQL Funktion Performance

  Alt 27. Jul 2015, 11:54
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
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#10

AW: mySQL Funktion Performance

  Alt 27. Jul 2015, 13:45
Inno-DB oder MYISAM? In der MySQL-Workbench kann man sich ganz gut die Füllstände der Buffer und die Last-Verteilung anschauen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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