Geschwindigkeit in MySQL-Installation, Netzwerkmitschnitt

JVerein-Benutzer diskutieren über Erweiterungswünsche

Moderator: heiner

Antworten
vof
Beiträge: 12
Registriert: Freitag 8. April 2022, 10:52
Verein: Behindertensportgemeinschaft Mönchengladbach e. V.
Mitglieder: 120
JVerein-Version: 2.8.18 20190623 b521 db 417
Betriebssystem: Win10 MySQL

Geschwindigkeit in MySQL-Installation, Netzwerkmitschnitt

Beitrag von vof »

Hallo zusammen!

Ich habe, um herauszufinden, warum in der Installation mit MySQL die Abfragen nach Mitglieder- oder Adreßtyplisten so lange dauern, mir zuerst drei Netzwerkmitschnitte erstellt und folgendes gefunden:


Unsere Mitarbeiter im Büro (drei Arbeitsplätze an Fritzbox 7430, 2 * 100 Mbit/sec LAN, 1 * WLAN) stellen erhebliche Verzögerungen beim Aufruf von Mitglieder- oder Adreßtyplisten ohne gesetzten Namensfilter fest. Manchmal wird anscheinend die Abfrage zweimal durchgeführt, weil der Scrollbalken am rechten Rand zweimal seine Größe ändert. Wir reden über Ladezeiten einer solchen Liste von bis zu einer halben Minute, die im Arbeitsablauf (Liste aufbauen, Mitglied auswählen, D-Klicken, Daten ändern, speichern, Wiederaufbau der Liste) mehrfach anfallen.

Berücksichtigt werden muß dabei, daß ich für unseren Gebrauch geändert habe:
• Erweiterung des Speichers für Lesefelder von 1.000 Byte auf 25.000 Byte, was auch als Code verwendet wird
• Anlage von 88 Eigenschaften
• Anlage von 156 Felddefinitionen
• Anlage von 22 Formularen

Ohne vorerst einen sorgfältigen Blick in den Quellcode ( https://github.com/openjverein/jverein ) zu werfen, habe ich Wireshark ( https://www.wireshark.org/ ) benutzt, um mir einen Überblick über die vom Klienten erzeugten SQL-Abfragen (Request Querys) zu verschaffen.

Die komischen Namen wie 3114_vo1_ab sind die Namen der von mir erstellten Zusatzfelder, die in den Listen angezeigt werden; also nicht JVerein-spezifisch.

1. Mitschnitt; Jameica auf Start, dann in JVerein auf Mitglieder, wobei ein Filter auf dem Namen vorher so gesetzt ist, daß nur ein Mitglied (hier: mitglied.id = 5522) gefunden wird. Die Request Querys sind
1. select * from adresstyp where id = 1
2. select adresstyp.* from adresstyp where jvereinid = 1 and jvereinid != 1 or jvereinid is null order by bezeichnung
3. select count(*) from beitragsgruppe
4. select beitragsgruppe.* from beitragsgruppe ORDER BY bezeichnung
5. select count(*) from beitragsgruppe
6. select felddefinition.* from felddefinition
7. select distinct mitglied.*, ucase(name), ucase(vorname) from mitglied where adresstyp = 1 AND (austritt is null) AND (lower(name) like '1%') ORDER BY ucase(name), ucase(vorname)
8. select * from mitglied where id = 5522
9. select felddefinition.* from felddefinition
10. select formular.* from formular where art = 4
11. select felddefinition.* from felddefinition where name = '3114_vo1_ab'
12. select zusatzfelder.* from zusatzfelder where felddefinition = '63' AND mitglied = '5522'
13. select felddefinition.* from felddefinition where name = '3115_vo1_bis'
14. select zusatzfelder.* from zusatzfelder where felddefinition = '64' AND mitglied = '5522'
15. select felddefinition.* from felddefinition where name = '3116_vo1_verl'
16. select zusatzfelder.* from zusatzfelder where felddefinition = '65' AND mitglied = '5522'
17. select felddefinition.* from felddefinition where name = '1122_vw_aufn_bem'
18. select zusatzfelder.* from zusatzfelder where felddefinition = '195' AND mitglied = '5522'
19. select felddefinition.* from felddefinition where name = '3111_vo1_von_tn_am'
20. select zusatzfelder.* from zusatzfelder where felddefinition = '211' AND mitglied = '5522'
21. select felddefinition.* from felddefinition where name = '3114_vo1_ab'
22. select zusatzfelder.* from zusatzfelder where felddefinition = '63' AND mitglied = '5522'
23. select felddefinition.* from felddefinition where name = '3115_vo1_bis'
24. select zusatzfelder.* from zusatzfelder where felddefinition = '64' AND mitglied = '5522'
25. select felddefinition.* from felddefinition where name = '3116_vo1_verl'
26. select zusatzfelder.* from zusatzfelder where felddefinition = '65' AND mitglied = '5522'
27. select felddefinition.* from felddefinition where name = '1122_vw_aufn_bem'
28. select zusatzfelder.* from zusatzfelder where felddefinition = '195' AND mitglied = '5522'
29. select felddefinition.* from felddefinition where name = '3111_vo1_von_tn_am'
30. select zusatzfelder.* from zusatzfelder where felddefinition = '211' AND mitglied = '5522'
Von der ersten bis zur letzten Request Query dauert es etwa eine Sekunde; die längste Wartezeit entsteht zwischen 10. und 11. mit über einer Sekunde; die Antwort auf 10. besteht aus fast 3.900 TCP-Paketen (den Formular-BLOBs, nehme ich an).

2. Mitschnitt; Jameica auf Start, dann in JVerein auf Mitglieder klicken, wobei kein Filter gesetzt ist und 67 Mitglieder angezeigt werden. Von der ersten bis zur letzten von 769 Request Querys dauert es etwa 12 Sekunden; längere Wartezeiten von 1/10 Sekunde treten mehrfach auf.

3. Mitschnitt; Jameica auf Start, dann in JVerein auf Adressen klicken, wobei kein Filter gesetzt ist und 159 Datensätze von dem eingestellten Adreßtyp angezeigt werden. Vom ersten bis zum letzten Paket bei 1.781 Request Querys und insgesamt 8.009 Paketen dauert es etwa 23 Sekunden.
vof
Beiträge: 12
Registriert: Freitag 8. April 2022, 10:52
Verein: Behindertensportgemeinschaft Mönchengladbach e. V.
Mitglieder: 120
JVerein-Version: 2.8.18 20190623 b521 db 417
Betriebssystem: Win10 MySQL

Re: Geschwindigkeit in MySQL-Installation, Netzwerkmitschnitt

Beitrag von vof »

Ergänzend: ich hab alle beteiligten Netzwerkgeräte auf einen GbE-Switch (von 100 Mb/sec an der FB) gelegt, was die Antwortzeit beim Endbenutzer um 40% verringert.
Antworten