ab Siteniz vb çerezleri, ihtiyacı varsa, ab çok basit biraz can sıkıcı.
Temel olarak, birkaç imploding PHP web siteleri sabitleme benim deneyim, genellikle bu gibi gider:
1) İnsanlar MySQL kullanabilirsiniz
Tamamen MySQL, facebook ve flickr kullanabilirsiniz SİZ Gotchas KNOW IF (mysql fanboys bu aşk) bunu:
- Olmayan bir salt okunur MyISAM tablo ve uzun 100'den herhangi bir sorgu varsa bize (hatta seçer) sen öldün
"Onun site güce ihtiyacı" çünkü sabit bir sitede, adam bir çift dört çekirdekli sunucu kiraladı. Ben onun yerinde bak, ben> 100K üyeleri ve bir lanet Via C7 mikro-yarım-pizzabox sunucuda koştu torrent izleyiciden ile benim önceki sitesinde bakmak, ve ben öyle sitenizin Celeron 300 iyi çalışır, ona benim bodrum, ve hatta overkill, ben lol, senin Xeon yarı fiyatına size kiralayabilirsiniz.
Bu adam iyi bir geliştirici ve gerçek bir güzel adam oldu çıktı ama o MySQL emdi, bu yüzden onun sitesi herhangi bir web sitesine öldürebilir From Hell tipik Arama Sorgusu vardı:
- Saniyede cehennemden 10 arama sorguları (onun yasadışı warez sitesinde 300K üyeleri gibi oldu)
- 0.2 saniye - cehennemden arama sorgusu yaklaşık 0.1 sürer
- baharat şeyler kadar aynı MyISAM tablo eşzamanlı güncellemeleri küçük bir dere
=> Tüm sorulara toplam serileştirme (MyISAM yazma kilitler). 1 çekirdek% 100, 7 çekirdekler boşta, loadavg> 1000 (evet o apache kullanıyordum), sayfa kez> 30 saniye, çalışır.
Fix kolay oldu: InnoDB, lighttpd için anahtarı geçiş, aşağıda) noktası 2 düzeltmek, cehennem arama sorgusu optimize. loadavg 0.02 düştü
2) UPDATE'ler
Noone is interested in page counters.
Issue 1 UPDATE for every page view and you are dead.
Add some MyISAM for more effects. Also a killer on InnoDB, not about locking, rather about sync disk IO waits.
3) FULLTEXT
- Çünkü kilitleme okuma-yazma tablolar için kullanışlı değildir MyISAM.
- MyISAM (aslında, daha az bir ramdisk'in kadar güvenilir ki: sadece MySQL kaza ihtiyacı ya da sadece çok fazla aynı anda vurarak, sen "bilinmeyen tablo motoru hatası" alırsınız MyISAM tabloları bozarak, bozuk bir ramdisk'in bir işletim kaza gerekir, I) Bunu birçok kez gördüm
- InnoDB mevcut değil FULLTEXT
- Any insertion in a FULLTEXT index triggers almost a full index rebuild (when I inserted a
forum post it was rebuilding 400 MB of index)
Tam metin indeksleme, performans ve güvenilirlik gerekiyorsa ==>, Sfenks ya Xapian kullanın.
Ben Sphinx (insanlar onun hakkında iyi şeyler söylemek) denedim değil, ama Xapian mutlu bir çırpıda metin 4GB arar.
4) İnsanlar apache kullanın.
Bu güzel yukarıdaki noktaları ile birleştirir.
CPU kullanımı mümkün değildir lighttpd gibi uygun bir sunucunun aksine (crummy Via C7 100 HTTP hit / s yapıyordu ve lighttpd'nin% 1'den az CPU kullanılır), apache senin kutu öldürecek.
MySQL (kolayca ölür) ölmeye başladığında, müşteriler sert F5 vurmak başlar ve kısa sürede yaklaşık 1000 apache süreçleri, bir PHP yorumlayıcı tutan her vardır, ve her PHP yorumlayıcı bir MyISAM kilit bekleyen, boşta MySQL bağlantı tutar sayfa görünümü sayaç bazı önemsiz update yapıyor, ama, çünkü sunucu 1000 apache ve php 1000 ve 1000 mysql süreçlerin, öğle takas gitti çünkü bu, biraz zaman alır, biri dışında.
Lighttpd statik sayfalar için hiçbir cpu kullanır. Eğer 20K gibi istekleri / s apachebench ile sert vurdu eğer CPU doyurmak için lighttpd için tek yoldur. Sonra birkaç MySQL bağlantıları konuşmak 10 php-fcgi backendleri (çekirdek başına 2-4 iyidir) gibi, bir kaç Lighttpd konuşur. Her şey bir sonucu olarak çok daha hızlı ve aşırı zaman, değil patlayarak, incelikle düşürür.
Asıl soruya almak için, kesinlikle SQL sorguları profile istiyorum. Sonuna kadar da PHP script başlangıcından itibaren süreyi, (sadece size) sorgularının listesini ve aldıkları zaman görüntüler, ve PHP uygulaması için bir sorgu günlük Ekle (header / footer içeren için iyi bir yer vardır Bu).
Karmaşık bir sayfada (arama hariç) için yaklaşık 3 ms MySQL ve 3 ms PHP, bu iyi bir hedef beklersiniz. Elbette bir PHP kodu derlenmiş önbellek gerekir.