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.

TamamlandıKOBİKurumsal BTPartner

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.

İşinize etkisi

Raporu tekrar çalıştırmanın işlemci maliyeti düşer. Ekibiniz sonuç beklerken açık kalan işlemler kısalır.

ÖNCEHer müşteri için tekrar tara
YENİLENENTek geçişte özetle
Sipariş kaydı200.000
1.000Yalnız ölçülen yükler200.000
Gerçek zaman ölçeği
AYNI İŞ · AYNI VERİ10 tekrar · medyan
01

Her müşteri için tekrar tara

Aynı sipariş listesi her müşteride baştan okunur.

1,265 sn
CPU süresi
1,265 sn
02

Tek geçişte özetle

Siparişler bir kez okunur; toplamlar müşteri anahtarında birikir.

8,487 ms
CPU süresi
8,495 ms

Çubuklar sıfırdan başlar; tüm uygulamalarda aynı süre ölçeği kullanılır.

Tamamlanma süresi azaldı99,3%Süre farkı: 1,257 snEski uygulama → yenilenen uygulama
Ne değişti?

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
1.000 · Sipariş kaydı
UygulamaMedyan süreCPU süresi
Her müşteri için tekrar tara2,93 ms2,916 ms
Tek geçişte özetle0,04 ms0,041 ms
3.000 · Sipariş kaydı
UygulamaMedyan süreCPU süresi
Her müşteri için tekrar tara8,362 ms8,363 ms
Tek geçişte özetle0,114 ms0,114 ms
10.000 · Sipariş kaydı
UygulamaMedyan süreCPU süresi
Her müşteri için tekrar tara28,426 ms28,429 ms
Tek geçişte özetle0,371 ms0,373 ms
30.000 · Sipariş kaydı
UygulamaMedyan süreCPU süresi
Her müşteri için tekrar tara83,354 ms83,352 ms
Tek geçişte özetle0,898 ms0,902 ms
60.000 · Sipariş kaydı
UygulamaMedyan süreCPU süresi
Her müşteri için tekrar tara190,504 ms190,479 ms
Tek geçişte özetle2,059 ms2,065 ms
100.000 · Sipariş kaydı
UygulamaMedyan süreCPU süresi
Her müşteri için tekrar tara436,716 ms436,251 ms
Tek geçişte özetle4,175 ms4,183 ms
200.000 · Sipariş kaydı
UygulamaMedyan süreCPU süresi
Her müşteri için tekrar tara1,265 sn1,265 sn
Tek geçişte özetle8,487 ms8,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ş

    Önce

    Geçti

    ✓ Sonra

    Geçti

  • Bulunmayan sipariş

    Önce

    Geçti

    ✓ Sonra

    Geçti

  • Kesme işaretli sipariş adı

    Önce

    Sorgu hatası

    ✓ Sonra

    Geçti

  • SQL girdisiyle filtreyi aşma

    Önce

    6 yetkisiz satır

    ✓ Sonra

    Geçti

  • SQL girdisiyle başka müşteriyi seçme

    Önce

    6 yetkisiz satır

    ✓ Sonra

    Geçti

  • Başka müşterinin numarasıyla erişim

    Önce

    1 yetkisiz satır

    ✓ Sonra

    Geçti

Güvenlik deneyi ve kaydı ↗

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)

05001.0001.5001.00060.000100.000200.0001.265,12 ms8,49 ms

Veri noktasını seçin

05001.0001.5001.00060.000200.0008,49 ms

Veri noktasını seçin

Sipariş kaydıİşaretçiler: ölçülen noktalar
Tablo olarak göster
İş yüküne göre süre
Sipariş kaydıÖnceSonra
1.0002,93 ms0,04 ms
3.0008,36 ms0,11 ms
10.00028,43 ms0,37 ms
30.00083,35 ms0,9 ms
60.000190,5 ms2,06 ms
100.000436,72 ms4,18 ms
200.0001.265,12 ms8,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ü.
Ham ölçüm verisini açın ↗

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?

  1. İş 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.

  2. 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.