baeckerman83
Registered User
Hiho!
Die Zugriffe auf meinen Webserver werden immer mehr. Ich biete eine Statistik App an, diese holt sich die Daten per REST (JSON String) von meinem Webserver. Leider geht kein direkter MYSQL Zugriff.
Nun versuche ich meine Datenbank zu optimieren, da die Zugriffe immer mehr werden. An ruhigen Tagen dauert der Datenbank Zugriff unter 1 sec pro Abfrage. An tagen wo viele User die App nutzen habe ich Zugriffszeiten von mehr als 15sekunden pro Request. Auch wenn ich den Request (call oder select auf eine View) in der Konsole aufrufe habe ich diese Zeiten.
Mit Indexes arbeite ich schon. Habe mit dem mysqltuner auch schon versucht zu optimieren. Aber ich komme jetzt nicht mehr weiter.
1. Ich finde die Joins nicht, die keine Indexes nutzen. Wie kann ich mir diese anzeigen lassen? Ich habe mir per mod_status von apache anzeigen lassen welche Anfragen laufen und mir diese angeschaut, da finde ich keine ohne Indexes in den JOINS.
2. Hilft hier nur noch mehr RAM? Oder kann ich noch etwas optimieren?
Hier meine Server Daten:
Hier mal mein mysqltuner.pl Auszug:
Die Zugriffe auf meinen Webserver werden immer mehr. Ich biete eine Statistik App an, diese holt sich die Daten per REST (JSON String) von meinem Webserver. Leider geht kein direkter MYSQL Zugriff.
Nun versuche ich meine Datenbank zu optimieren, da die Zugriffe immer mehr werden. An ruhigen Tagen dauert der Datenbank Zugriff unter 1 sec pro Abfrage. An tagen wo viele User die App nutzen habe ich Zugriffszeiten von mehr als 15sekunden pro Request. Auch wenn ich den Request (call oder select auf eine View) in der Konsole aufrufe habe ich diese Zeiten.
Mit Indexes arbeite ich schon. Habe mit dem mysqltuner auch schon versucht zu optimieren. Aber ich komme jetzt nicht mehr weiter.
1. Ich finde die Joins nicht, die keine Indexes nutzen. Wie kann ich mir diese anzeigen lassen? Ich habe mir per mod_status von apache anzeigen lassen welche Anfragen laufen und mir diese angeschaut, da finde ich keine ohne Indexes in den JOINS.
2. Hilft hier nur noch mehr RAM? Oder kann ich noch etwas optimieren?
Hier meine Server Daten:
Code:
Strato V-PowerServer M (v4.2) - 1 CPU Kern - 2GB Ram garantiert
top - 12:42:45 up 31 days, 18:14, 2 users, load average: 19.17, 15.36, 14.06
Tasks: 71 total, 3 running, 68 sleeping, 0 stopped, 0 zombie
Cpu(s): 94.5%us, 5.5%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2097152k total, 1033524k used, 1063628k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
Hier mal mein mysqltuner.pl Auszug:
Code:
-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.51a-24+lenny5-log
[OK] Operating on 32-bit architecture with less than 2GB RAM
-------- Storage Engine Statistics -------------------------------------------
[--] Status: +Archive -BDB +Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 42M (Tables: 229)
[--] Data in InnoDB tables: 133M (Tables: 95)
[--] Data in MEMORY tables: 0B (Tables: 1)
[!!] Total fragmented tables: 20
-------- Security Recommendations -------------------------------------------
[OK] All database users have passwords assigned
-------- Performance Metrics -------------------------------------------------
[--] Up for: 12d 18h 37m 38s (343M q [311.264 qps], 2M conn, TX: 2B, RX: 873M)
[--] Reads / Writes: 48% / 52%
[--] Total buffers: 398.0M global + 7.5M per thread (150 max threads)
[OK] Maximum possible memory usage: 1.5G (74% of installed RAM)
[OK] Slow queries: 0% (1M/343M)
[!!] Highest connection usage: 100% (151/150)
[OK] Key buffer size / total MyISAM indexes: 60.0M/32.0M
[OK] Key buffer hit rate: 99.5% (4M cached / 25K reads)
[!!] Query cache efficiency: 2.4% (56 cached / 2K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 1K sorts)
[!!] Joins performed without indexes: 148
[OK] Temporary tables created on disk: 4% (144 on disk / 3K total)
[OK] Thread cache hit rate: 87% (332 created / 2K connections)
[!!] Table cache hit rate: 9% (400 open / 4K opened)
[OK] Open file limit used: 10% (109/1K)
[OK] Table locks acquired immediately: 100% (7K immediate / 7K locks)
[OK] InnoDB data size / buffer pool: 134.0M/256.0M
-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
Adjust your join queries to always utilize indexes
Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
query_cache_limit (> 600M, or use smaller result sets)
join_buffer_size (> 5.0M, or always use indexes with joins)
table_cache (> 400)