# Estimate Activity History - Scale Strategy (Step 4)

Dokumen ini adalah panduan operasional untuk menjaga performa dan skalabilitas tabel history saat volume transaksi bertambah.

## 1) Tujuan
- Menjaga query timeline tetap cepat di volume data besar.
- Mencegah pertumbuhan tabel history membebani server.
- Menyediakan monitoring rutin untuk deteksi dini risiko.

## 2) Index Strategy
Gunakan script:
- [SQL_ESTIMATE_ACTIVITY_HISTORY_PERFORMANCE_STEP4.sql](z:\san_ibb_master\files\SQL_ESTIMATE_ACTIVITY_HISTORY_PERFORMANCE_STEP4.sql)

Index kunci yang ditambahkan:
1. `idx_estimate_cycle_activity_entry (estimate_id, cycle_no, activity_code, activity_entry_no)`
2. `idx_estimate_event_version (estimate_id, event_type, version_no)`
3. `idx_estimate_activity_version (estimate_id, activity_code, version_no)`
4. `idx_changed_by_changed_at (changed_by, changed_at)` (audit/reporting)

## 3) Monitoring Routine
Gunakan script:
- [SQL_ESTIMATE_ACTIVITY_HISTORY_MONITORING_STEP4.sql](z:\san_ibb_master\files\SQL_ESTIMATE_ACTIVITY_HISTORY_MONITORING_STEP4.sql)

Jadwal minimum:
1. Harian:
- volume rows per hari
- event mix (EDIT / STATUS_CHANGE / SYSTEM_SYNC)

2. Mingguan:
- top estimate dengan history terbanyak
- hash mismatch sample check

3. Bulanan:
- ukuran tabel (data/index MB)
- tren pertumbuhan 30 hari

## 4) Growth Threshold (Rekomendasi Awal)
Trigger tindakan saat:
1. `rise_estimate_activity_history` > 2 juta rows, atau
2. ukuran tabel > 5 GB, atau
3. query timeline p95 > 2 detik.

## 5) Archive Strategy (Rolling)
Model retensi yang disarankan:
1. Hot data:
- Simpan full online 24 bulan terakhir.

2. Warm/Archive:
- Data >24 bulan dipindah bertahap ke tabel archive (`rise_estimate_activity_history_archive`) per batch.
- Batch rekomendasi: 5.000-20.000 rows per eksekusi.

3. Audit safety:
- Selalu verifikasi hash sebelum dan sesudah pemindahan.
- Archive table tetap read-only.

## 6) Partition Guidance (Opsional Lanjutan)
Partition bisa dipertimbangkan jika:
1. volume > 10 juta rows, dan
2. growth bulanan tinggi stabil.

Catatan:
- Karena ada unique key `(estimate_id, version_no)`, desain partition harus diuji detail terlebih dahulu.
- Lakukan di window maintenance + backup penuh.

## 7) Operational Checklist
- [ ] Jalankan SQL index optimization.
- [ ] Jalankan monitoring SQL pack dan simpan baseline.
- [ ] Tetapkan threshold alert internal.
- [ ] Finalisasi SOP archive + jadwal eksekusi.
- [ ] UAT performa timeline setelah index update.

