Durch Screenshots wird eine langsame Abfrage festhalten und per Mail an einen herangetragen. Im Slow-Query Log ist die Abfrage mit mehr als 5 Sekunden zu finden, aber trotz SQL_NO_CACHE lässt sich die lange Laufzeit nicht nachstellen. Hier wird das Caching von MySQL beschrieben, um bestimmte Situationen zu verstehen und zu provozieren.
Wir betrachten den Query und Key Cache der von MySQL verwaltet wird und den File Cache der unter der Kontrolle des Betriebssystems steht. Als Szenario dient uns dieses Datenbankschema.
1 2 3 4 5 6 7 8 9 |
CREATE TABLE user ( id INT UNSIGNED AUTO_INCREMENT, name VARHCAR(100), password VARCHAR(100), role_id UNSIGNED INT, license_id UNSIGNED INT, PRIMARY KEY(id) ); |
Den Testdatensatz erzeugen wir durch:
1 2 3 4 5 |
for i in {1..1000000};do echo \"$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $(( ( RANDOM % 100 ) + 1 )) | head -n 1)\",\ \"$(( ( RANDOM % 4294967295 ) + 1 ))\",\ \"$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 100 | head -n 1)\",\ \"$(( ( RANDOM % 4294967295 ) + 1 ))\",\ \"$(( ( RANDOM % 4294967295 ) + 1 ))\"; done > test_data.csv |
Query Cache
Key Cache