Performance Now! Was tun bei Besucherspitzen?

Preview:

DESCRIPTION

Performance Now! Was tun bei Besucherspitzen? von Martin Reichard, LOTUM, am 7. Februar 2011 beim 7. Webmontag.talk in Manhheim.

Citation preview

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ß

Recommended