performance now! was tun bei besucherspitzen?
Post on 20-Jan-2015
701 Views
Preview:
DESCRIPTION
TRANSCRIPT
Performance Now!Was tun bei Besucherspitzen?
Ich
Martin ReichardCEO & Head of Technology
28 Jahre altInformatik: FH Gießen und Uni Karlsruhe
reichard@lotum.de@Mart_out
LOTUM
- Seit 2006- Bad Nauheim- Schueler.CC- Revolution
Schueler.CC
Zweitgrößtes deutsches Schülernetzwerk
Über 2 Mio. angemeldete Schüler
Von Reichweite her in Top10 der deutschen Websites (laut IVW)
Situation
Website
plötzlicher Besucheransturm
Server überlastet
Website langsam
http://www.flickr.com/photos/72969187@N00/248272298/ http://www.flickr.com/photos/lynac/321100379/
=>
Voraussetzungen
MySQL
PHP
noch kein ausgereiftes Server-Cluster
Oh mein Gott! Was soll ich machen?!
Don‘t Panic!
Überblick verschaffen
kein purer Aktionismus (wie z.B. Micro-Optimierungen)
http://www.flickr.com/photos/lifeontheedge/416514144/
InnoDB statt MyIsam
mysql> SHOW PROCESSLIST;
häufig „locked“?
=> evtl. InnoDB statt MyIsam
my.cnf
max_connections = ?
innodb_buffer_pool_size = ?(RAM sollte sinnvoll ausgenutzt werden)
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
Query-Optimierung
Query Summe AvgTime MaxTime Count
QueryName1 208.43736219406 0.008399 3.001617 24818
QueryName2 188.77226877213 0.009765 3.288036 19332
QueryName3 142.97422361374 0.006405 3.002347 22323
QueryName4 136.00585031509 0.004564 2.998144 29802
QueryName5 108.8049595356 0.029567 4.778876 3680
QueryName6 101.94781637192 0.010236 3.129176 9960
QueryName7 95.042063713074 0.002791 1.439899 34047
QueryName8 94.692739009857 0.016085 4.106811 5887
mysqldumpslow /var/log/mysql/mysql-slow.log | less
Oder besser:
Query-Optimierung: Indizes
mysql> SELECT COUNT(*) FROM wm_tip WHERE Goals_Team1=1;+----------+| count(*) |+----------+| 1092778 | +----------+1 row in set (0.87 sec)
mysql> EXPLAIN SELECT COUNT(*) FROM wm_tip WHERE Goals_Team1=1;+----+-------------+---------+------+------------------+------------------+---------+-------+---------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+---------+------+------------------+------------------+---------+-------+---------+-------------+| 1 | SIMPLE | wm_tip | ALL | NULL | NULL | NULL | NULL | 3029244 | Using where | +----+-------------+---------+------+------------------+------------------+---------+-------+---------+-------------+1 row in set (0.02 sec)
Query-Optimierung:weitere Möglichkeiten
direkte Optimierung
Caching (z.B. mit memcache)
$memcache = new Memcache;$memcache->connect('localhost', 11211);$memcache->set('key', $variable, false, 60);$get_result = $memcache->get('key');
Webserver
http://www.flickr.com/photos/swift/315996596/
Webserver
OpCode-Caching
APC, eAccelerator, Xcache
http://en.wikipedia.org/wiki/List_of_PHP_accelerators
http://www.flickr.com/photos/renaissancechambara/2288556895/
Webserver: Sessions
Sessions in Memcache ablegen
einfach php.ini anpassen
session.save_handler = memcachesession.save_path="<memcache_server>:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
Auf lange Sicht
Umfassendes Monitoring
Skalierbares Serversystem
Replikation / Sharding
Sphinx / SolR
NoSQL
Individuelle Technologien
Cloud?
...
lotum.de
Fragen?
Spannende Aufgaben
gute (und nette) Kollegen
viel Freiheit
viel Spaß
lotum.de
Fragen?
Spannende Aufgaben
gute (und nette) Kollegen
viel Freiheit
viel Spaß
top related