Laboratuvar / Açık yöntem
PHP rapor optimizasyonu: tek geçişte hesaplama
200.000 siparişten rapor: 1,27 sn → 8,49 ms. Sentetik laboratuvar; 10 tekrarın medyanı. Kod ve ham veri açık.
Her müşteri için tekrar taraşu sistemeTek geçişte özetle
PHP 8.4 LABORATUVAR ÖLÇÜMÜ
Aynı siparişleri tekrar tekrar okumayın.
Müşteri bazında sipariş toplamları. Aynı PHP sürümü, aynı veri, aynı sonuç; değişen şey hesaplama biçimi.
Raporu tekrar çalıştırmanın işlemci maliyeti düşer. Ekibiniz sonuç beklerken açık kalan işlemler kısalır.
Her müşteri için tekrar tara
Aynı sipariş listesi her müşteride baştan okunur.
- CPU süresi
- 1,265 sn
Tek geçişte özetle
Siparişler bir kez okunur; toplamlar müşteri anahtarında birikir.
- CPU süresi
- 8,495 ms
Çubuklar sıfırdan başlar; tüm uygulamalarda aynı süre ölçeği kullanılır.
Müşteri başına tam tarama yerine, siparişlerden müşteri anahtarlı toplamlar ürettik. İş kuralı ve kuruş cinsinden tutarlar değişmedi.
Tüm yük noktaları ve ölçüm tablosu
| Uygulama | Medyan süre | CPU süresi |
|---|---|---|
| Her müşteri için tekrar tara | 2,93 ms | 2,916 ms |
| Tek geçişte özetle | 0,04 ms | 0,041 ms |
| Uygulama | Medyan süre | CPU süresi |
|---|---|---|
| Her müşteri için tekrar tara | 8,362 ms | 8,363 ms |
| Tek geçişte özetle | 0,114 ms | 0,114 ms |
| Uygulama | Medyan süre | CPU süresi |
|---|---|---|
| Her müşteri için tekrar tara | 28,426 ms | 28,429 ms |
| Tek geçişte özetle | 0,371 ms | 0,373 ms |
| Uygulama | Medyan süre | CPU süresi |
|---|---|---|
| Her müşteri için tekrar tara | 83,354 ms | 83,352 ms |
| Tek geçişte özetle | 0,898 ms | 0,902 ms |
| Uygulama | Medyan süre | CPU süresi |
|---|---|---|
| Her müşteri için tekrar tara | 190,504 ms | 190,479 ms |
| Tek geçişte özetle | 2,059 ms | 2,065 ms |
| Uygulama | Medyan süre | CPU süresi |
|---|---|---|
| Her müşteri için tekrar tara | 436,716 ms | 436,251 ms |
| Tek geçişte özetle | 4,175 ms | 4,183 ms |
| Uygulama | Medyan süre | CPU süresi |
|---|---|---|
| Her müşteri için tekrar tara | 1,265 sn | 1,265 sn |
| Tek geçişte özetle | 8,487 ms | 8,495 ms |
İş yükünüzle CPU maliyeti
Ölçülen işlemci süresini kendi aylık hacminizle karşılaştırın.
Bir çalıştırma = 200.000 Sipariş kaydı.
Azalan CPU süresi / ay3,49 saat
İşlem bedeli farkı / ay—Birim bedel girildiğinde hesaplanır.
Laboratuvar CPU süresi × girdiğiniz hacim ve birim bedel. Hosting faturası tahmini değildir; boşta kaynak, ağ, depolama, lisans ve geçiş dahil değil.
Sorguyu ve müşteri erişimini birlikte düzelttik.
Normal sipariş
ÖnceGeçti
✓ SonraGeçti
Bulunmayan sipariş
ÖnceGeçti
✓ SonraGeçti
Kesme işaretli sipariş adı
ÖnceSorgu hatası
✓ SonraGeçti
SQL girdisiyle filtreyi aşma
Önce6 yetkisiz satır
✓ SonraGeçti
SQL girdisiyle başka müşteriyi seçme
Önce6 yetkisiz satır
✓ SonraGeçti
Başka müşterinin numarasıyla erişim
Önce1 yetkisiz satır
✓ SonraGeçti
Kendiniz deneyin
Kayıtlı laboratuvar sonuçlarını birlikte oynatın.
Ölçek arttığında
İş yüküne göre süre
- Önce
- Sonra
İş yüküne göre süre (ms)
Tablo olarak göster
| Sipariş kaydı | Önce | Sonra |
|---|---|---|
| 1.000 | 2,93 ms | 0,04 ms |
| 3.000 | 8,36 ms | 0,11 ms |
| 10.000 | 28,43 ms | 0,37 ms |
| 30.000 | 83,35 ms | 0,9 ms |
| 60.000 | 190,5 ms | 2,06 ms |
| 100.000 | 436,72 ms | 4,18 ms |
| 200.000 | 1.265,12 ms | 8,49 ms |
Nasıl ölçtük?
Ortam, protokol ve teknik değerlendirme
Ortam ve veri
- Ortam
- Apple M3; Docker Linux arm64, 2 CPU kotası, 1 GiB bellek. PHP 8.4.26 / SQLite 3.46.1.
- Veri seti
- 200 müşteri; 1.000–200.000 deterministik sipariş. Her kolun bütün sonuçları ve kuruş toplamları eşit.
- Araçlar
- PHP 8.4.26 · SQLite 3.46.1 · hrtime / getrusage · OPcache / JIT off · native arm64 Docker
- Tekrarlar
- 7 yük × 5 uygulama × 10 tekrar; ayrıca 70 ısınma gözlemi. Her ölçüm saklandı, kol sırası dönüşümlü.
Aynı siparişleri tekrar tekrar okumayın.
Müşteri bazında sipariş toplamları. Aynı PHP sürümü, aynı veri, aynı sonuç; değişen şey hesaplama biçimi.
Aynı PHP/SQLite sürümleri, aynı sentetik kayıtlar, 200 müşteri. İki ısınma ardından her kol/boyut için 10 tekrar; bütün sonuç dizileri bağımsız oracle ile eşit. PHP toplam haritası her tekrarda yeniden kurulur. SQL okuma süreleri sıcak bellek içi veride; veri yükleme/indeks oluşturma dışında. İndeks boyutu ve tek kurulum gözlemi ham pakette ayrı. Birincil 200.000 kayıt noktası önceden seçildi.
Ölçüm betiğini inceleyin ↗İşinize ne kazandırır?
Raporu tekrar çalıştırmanın işlemci maliyeti düşer. Ekibiniz sonuç beklerken açık kalan işlemler kısalır.
Değişiklik ve kapsam
Müşteri başına tam tarama yerine, siparişlerden müşteri anahtarlı toplamlar ürettik. İş kuralı ve kuruş cinsinden tutarlar değişmedi.
PHP 8.4.26 CLI; bellek içindeki sentetik veri, 200 müşteri. OPcache/JIT kapalı. Bu kod iyileştirmesi deneyidir; PHP 7 → 8 sürüm hızlanması değildir.
Parametre kullanmak ve yetkiyi korumak
Ayrı, sentetik sipariş araması deneyi; performans sayılarıyla karıştırılmaz. Altı kontrolün tümü yayımlanır.
| Uygulama | Geçen kontrol | Açık kalan sorun |
|---|---|---|
| Sorgu metnine girdi ekleme | 2 / 6 | Kesme işareti, sorgu enjeksiyonu ve başka müşteriye erişim |
| Yalnız parametreli sorgu | 5 / 6 | Başka müşterinin doğrudan numarası hâlâ erişilebilir |
| Parametre + müşteri kapsamı | 6 / 6 | Bu altı kontrolde sorun görülmedi |
Her girdiyi ve dönen kaydı inceleyin. PHP sürümünü yükseltmek bu kontrollerin yerine geçmez.
Kendi sisteminizde başlangıç
En çok bekleten işlemi, veri miktarını ve yoğun saatleri birlikte belirleyelim. Önce bu işin baz ölçümünü alır, sonra kodu ve erişim biçimini değiştirip aynı sonucu karşılaştırırız.
Ne yaptık?
İş kuralı ve veri
YZSentetik iş akışı, testler ve ölçüm otomasyonu hazırlandı.
DoğrulamaYayınlanan kod ve ham sonuçlar incelemeye açıktır; müşteri projesi değildir.
Uygulama değişikliği
YZMüşteri başına tam tarama yerine, siparişlerden müşteri anahtarlı toplamlar ürettik. İş kuralı ve kuruş cinsinden tutarlar değişmedi.
DoğrulamaÇıktı eşitliği bağımsız kontrolle doğrulandı; bütün tekrarlar pakette tutuldu.