62 lines
3.5 KiB
Markdown
62 lines
3.5 KiB
Markdown
# Tahap 16 — Skalabilitas database dan performa
|
|
|
|
## Implementasi
|
|
|
|
- Migration `20260902000100` menambahkan indeks query transaksi, database session, dashboard summary, queue, dead-letter, dan metrik database.
|
|
- Migration `20260902000200` menyediakan shared application cache.
|
|
- Migration `20260902000300` menyediakan arsip activity log.
|
|
- Session default menggunakan driver database (`ci_sessions`). Production dapat mengatur `SESSION_DRIVER=database`; Redis dapat dipilih setelah extension dan server Redis tersedia.
|
|
- Dashboard summary di-cache 5 menit per company. Chart dapat dikembangkan dengan pola cache yang sama bila volume jurnal sudah besar.
|
|
- Endpoint `lookups/search/{customer|item|account|employee|supplier}` memakai pencarian dan pagination maksimal 30 baris.
|
|
- Form penerimaan pelanggan telah berhenti memuat seluruh customer dan menggunakan AJAX lookup.
|
|
- Queue memiliki claim transaction/row lock, idempotency key, exponential retry, batas percobaan, dan dead-letter.
|
|
- Handler tersedia untuk report PDF/Excel/CSV, email/reminder, penyusutan, dan payroll calculation.
|
|
- Retention worker memindahkan activity log lama ke `activity_logs_archive` dalam batch, lalu membersihkan cache, session, dan completed job lama.
|
|
- DB monitor menyimpan latency koneksi/query, threads, slow query counter, dan ukuran database.
|
|
|
|
## Perintah operasional
|
|
|
|
Jalankan dari folder aplikasi melalui Task Scheduler/cron:
|
|
|
|
```text
|
|
php index.php queueworker run reports 20
|
|
php index.php queueworker run default 20
|
|
php index.php maintenanceworker retention 365 5000
|
|
php index.php dbmonitor run
|
|
php index.php scalabilitycheck index 20
|
|
php index.php stage16check
|
|
```
|
|
|
|
Saran jadwal: queue setiap menit, DB monitor setiap 5 menit, retention setiap malam, scalability check pada CI/staging.
|
|
|
|
## Baseline development 2 September 2026
|
|
|
|
- Database: 6.19 MB.
|
|
- Journal: 123 header / 388 detail.
|
|
- Activity log: 654.
|
|
- Latency koneksi: 16.926 ms.
|
|
- Latency query health check: 10.053 ms.
|
|
- Dashboard summary p95: 11.046 ms.
|
|
- Open receivables p95: 22.089 ms.
|
|
- General ledger berada jauh di bawah target 2 detik.
|
|
- Queue integration: idempotent dan berhasil menghasilkan file background.
|
|
|
|
Volume development masih kecil. Angka ini baseline fungsi, bukan bukti kapasitas production.
|
|
|
|
## Audit lanjutan untuk staging
|
|
|
|
- 29 view memakai DataTables; 13 sudah `serverSide:true`. Tabel master/transaksi yang tumbuh tanpa batas harus dimigrasikan bertahap ke server-side. Tabel referensi kecil boleh tetap client-side dengan hard limit.
|
|
- Jalankan load test menggunakan salinan data yang sudah dianonimkan: minimal 100 ribu jurnal, 50 ribu invoice, 25 ribu item/barcode, dan 1 juta stock/activity ledger.
|
|
- Uji 25, 50, lalu 100 virtual user untuk dashboard, pencarian, daftar transaksi, posting invoice, pembayaran, dan transfer stok.
|
|
- Gunakan akun serta session khusus staging; jangan melakukan load test transaksi pada production.
|
|
- Acceptance: daftar p95 <2 detik, dashboard p95 <3 detik, error <1%, tidak ada duplikasi nomor/stok/job.
|
|
|
|
## Catatan production
|
|
|
|
- Backup dan jalankan migration sampai `20260902000300`.
|
|
- Perubahan file-session ke database-session akan meminta user login kembali saat deploy.
|
|
- Jalankan worker hanya satu instance dahulu; tambah worker setelah memastikan locking MariaDB bekerja pada versi production.
|
|
- Konfigurasikan SMTP sebelum mengaktifkan job email/reminder.
|
|
- Pantau pertumbuhan `app_dead_letters`; setiap dead-letter harus mempunyai tindak lanjut dan mekanisme replay terkontrol.
|
|
- Aktifkan slow query log pada database production dan review query di atas ambang 500 ms.
|