In Dieser Präsentation zeige ich Euch wie Ihr mit ein paar Konfigurationseinstellungen noch etwas aus Eurem MySQL-Server herausholen könnt. Dabei gehe ich speziell auf das filesorting ein.
3. Warum das Ganze?
●
SAP Export → MySQL
●
1.800.000 Datensätze
●
Bis zu 12 Filterkriterien
●
Jede Spalte sortierbar
4. Was werden wir machen?
●
Auflistung verschiedener MySQL-Parameter
●
Auswirkung der Parameter schätzen/fühlen
●
Der beste Wert für einen Parameter
●
Vorstellung einer Report-Extension
9. table_cache
●
Öffnen von Tabellen kostet Zeit
●
Anzahl gleichzeitig geöffneter Tabellen im RAM:
– Opened_tables
– Open_tables
●
SHOW OPEN TABLES;
●
Tabellenheader (keine Daten!) = klein
●
Gilt für jede Verbindung
●
1000 Tabellen * 100 Verbindungen = 100.000
10. MySQL
Sortieren (filesorts)
2 Algorithmen stehen zur Verfügung
Ihr könnt nicht entscheiden!
11. Filesorts
●
Explain-Syntax informiert
– Extra = Using filesort
●
Wenn kein Index zur Verfügung steht
●
Naming: Egal ob im Speicher oder Dateiebene
●
Ein LIMIT wird NACH dem filesort ausgeführt
12. Algorithmus 1
●
Suche alle Datensätze, die zur Abfrage passen
●
Sortierschlüssel und Zeilenzeiger erstellen
– sort_buffer_size
– Wenn voll: Auslagern auf Dateiebene
▪ Sort_merge_passes
●
Dateien zusammenführen
●
Datei in sortierter Reihenfolge auslesen
– read_rnd_buffer_size
●
2mal die Datenbank abfragen
13. Algorithmus 2
●
Suche alle Datensätze, die zur Abfrage passen
●
Sortierschlüssel, Zeilenzeiger UND Spalten
●
sort_buffer_size schneller voll
●
Gefahr: Mehr I/O auf der Festplatte
●
Lösung: max_length_for_sort_data
●
1mal die Datenbank abfragen
14. Algorithmuswahl
●
Der 2-Stufige Algorithmus wird verwenden,
wenn:
– Die Gesamtgröße aller Spalten, die für eine Abfrage
benötigt werden, PLUS die ORDER BY-Spalten größer
ist als max_length_for_sort_data
– Irgendeine Spalte vom Typ TEXT oder BLOB ist
▪ Mit SUBSTRING() kann versucht werden den 1-
Stufigen Algerithmus auszulösen.
15. sort_buffer_size
●
Wird durch den CPU-Cache beeinflusst
●
Wenn voll: Sort_merge_passes++
●
Nicht verwechselt mit myisam_sort_buffer_size
– Nur relevant für REPAIR TABLE und CREATE INDEX
●
Wird immer vollständig verwendet
●
> 2MB könnte das Sortieren verlangsamen
●
http://inaugust.com/post/15
●
mmap <==> malloc
22. read_buffer_size
●
http://www.mysqlperformanceblog.com/2007/09/1
●
Anpassen an Read-Ahead des Servers
●
Anpassen an das I/O-Subsystem des Servers
●
128KB scheint ein guter Wert zu sein
25. InnoDB Buffer
●
innodb_buffer_pool_size (Daten + Index)
●
innodb_log_buffer_size
– Was schaffte Eure Festplatte innerhalb einer Sekunde
zu schreiben? Standard von 8M ist OK.
27. innodb_additional_mem_pool_siz
e
●
Standard 1MB
●
Speichert Informationen der Daten
●
Speichert Strukturen der Daten
●
Wenn voll → Warnungen im Error log
– Raufsetzen auf 2MB
●
Fast kein Performancegewinn
28. innodb_flush_log_at_trx_commit
●
Sehr hoher Performancegewinn
●
Wert 1 (Standard)
– Commit → In Logdatei anfügen → Schreiben
●
Wert 0 (Daten weg bei MySQL-Absturz)
– Pro Sekunde wird der Buffer in die Logdatei geschrieben
●
Wert 2 (Daten weg bei OS-Absturz)
– Commit → In Logdatei anfügen → Pro Sekunde Logdatei
schreiben
29. Dumps zum Spielen
●
http://dumps.wikimedia.org/backup-index.html
●
Getestet mit enwikinews-[datum]-page.sql
– 480.000 Datensätze
●
Getestet mit Daten aus einem Kundenprojekt
– 1.800.000 Datensätze
30. Danke ...
●
für's Zuhören
●
für Rückfragen
●
für Applaus
●
an die Community
●
an die TYPO3-Entwickler
●
an das Catering :-)
Stefan Frömken | www.kennziffer.com GmbH