Hacim Testi¶
Hacim testi tek bir soruya cevap verir: Veritabanında aylarca birikmiş veri varken, tek bir kişi liste ekranını açınca ne kadar bekler?
Bu test “aynı anda çok kullanıcı” senaryosu değildir. O konu yük testi. Burada satır sayısını artırıyoruz (fabrika, makine, görev) ve tek kullanıcı ile yükleme süresini ölçüyoruz — böylece veri kaynaklı yavaşlık, trafik kaynaklı yavaşlıktan ayrılır.
Güncel sayılar ve düzeltme durumu: optimization.tr.md. Sade özet: general-volume-testing.tr.md.
Son sonuçlar (1 Temmuz 2026)¶
Test boyutu: 200 fabrika, 4.000 makine, 5.000 görev (6 aylık projeksiyon), tek kullanıcı, yerel sunucu.
| Ekran | Düzeltme öncesi yükleme | Son düzeltme sonrası | Durum |
|---|---|---|---|
| Görev listesi | 437 ms | 23 ms | Düzeltildi |
| Fabrika listesi | 345 ms | 24 ms | Düzeltildi |
| Makine listesi | 351 ms | 320 ms | Düzeltildi |
| Profilim | 3 ms | 2 ms | OK (kontrol) |
437 ms yarım saniyenin altındadır. 23 ms kullanıcı için pratikte anında sayılır.
Bir dakikalık tekrar koşusu (yine tek kullanıcı): görev listesi yükleme 417 ms → 60 ms.
Koşu #1 (26 Haziran) görev listesi sorununu buldu. Koşu #2 (29 Haziran) test verisi yeniden eklendikten sonra düzeltmeyi doğruladı. Çıktılar: docs/volume-results/run-20260629-171059/.
Her koşu ne yapar¶
- Test verisi eklenmeden önce satır sayılarını kaydeder.
- Neredeyse boş veritabanında yükleme sürelerini ölçer (baz çizgi).
- Seçilen seviye için test verisi ekler (varsayılan: 6 ay / T1).
- Aynı ekranlar ve limitlerle tekrar ölçer.
- Tek kullanıcı ile bir dakikalık otomatik koşu (mobil uygulama trafiğiyle aynı ekran karışımı).
- Sorgu sayısı kontrolü — sunucunun sayfa başına yüzlerce ayrı veritabanı sorgusu çalıştırmadığını doğrular.
Ana ölçümler yalnızca tek istemci ile alınır; sonuç veri boyutunu yansıtır, eşzamanlı trafiği değil.
Ölçülen ekranlar¶
Mobil yük testiyle aynı karışım:
| Ekran | İstek | Neden |
|---|---|---|
| Fabrika listesi | GET /api/factories?limit=300 |
Ağır liste; mobil trafiğin %25’i |
| Makine listesi | GET /api/machines?limit=100 |
Sayfalama; %25 |
| Görev listesi | GET /api/tasks?limit=100 |
Ana ölçek sorunu buydu; %25 |
| Profilim | GET /api/users/me |
Kontrol — veri artsa da hızlı kalmalı |
Veri seviyeleri¶
| Seviye | Anlam | Fabrikalar | Makineler | Görevler |
|---|---|---|---|---|
| T0 | Baz (boş veya minimal) | ~1 | ~1 | 0 |
| T1 | ~6 ay | 200 + mevcut satırlar | 4.000 + mevcut | 5.000 |
| T2 | ~12–18 ay (henüz koşulmadı) | 1.000 | 25.000 | 25.000 |
Test satırları voltest_ öneki taşır. Gerçek veriye dokunmadan silmek için:
venv/bin/python scripts/volume/seed_volume_db.py clean
Nasıl çalıştırılır¶
Gerekli: PostgreSQL (migration uygulanmış), loadtest kullanıcısı, yerelde çalışan API ve kurulu k6.
API’yi başlat:
venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000
Tam T1 koşusu:
export BASE_URL=http://127.0.0.1:8000
export K6_USERNAME=loadtest
export K6_PASSWORD=your_password
export VOLUME_TIER=t1
./scripts/volume/run_volume_test.sh
Çıktı docs/volume-results/run-YYYYMMDD-HHMMSS/ altına yazılır. Yükleme sürelerini optimization.tr.md dosyasına işleyin.
Elle adımlar (betikle aynı):
venv/bin/python scripts/volume/seed_volume_db.py counts
venv/bin/python scripts/volume/measure_endpoints.py --tier-label t0 --output /tmp/t0.json
venv/bin/python scripts/volume/seed_volume_db.py seed --tier t1
venv/bin/python scripts/volume/measure_endpoints.py --tier-label t1 --output /tmp/t1.json
K6_SCENARIO=volume-baseline k6 run scripts/load/api-load.js
venv/bin/python -m pytest tests/test_volume_query_efficiency.py -q
Araçlar¶
| Betik | Görevi |
|---|---|
scripts/volume/seed_volume_db.py |
Test verisi ekle / sil |
scripts/volume/measure_endpoints.py |
Zamanlı istekler, tek kullanıcı (ekran başına 3 ısınma + 15 ölçüm) |
scripts/volume/run_volume_test.sh |
Yukarıdaki tüm adımları çalıştırır |
scripts/load/api-load.js |
Tek kullanıcılı doğrulama (K6_SCENARIO=volume-baseline) |
tests/test_volume_query_efficiency.py |
Satır sayısı artınca sorgu sayısı artarsa testi kırar |
Koşu geçmişi¶
| Tarih | Klasör | Not |
|---|---|---|
| 2026-06-26 | docs/volume-results/run-20260626-051613/ |
T1 baz; görev listesi 437 ms |
| 2026-06-29 | docs/volume-results/run-20260629-171059/ |
Görev listesi düzeltmesi; 23 ms |
Sınırlar¶
- Yerel makine, tek sunucu süreci, localhost — prod farklı olabilir.
- T1 (~5k görev) uygulama katmanı sorgu sorunlarını yakalar; çok büyük tablolar (100k+) için T2 gerekebilir.
- Boş veritabanında geçen yük testi, T1’deki liste hızını tahmin etmez. İkisini de koşun.