Mengoptimasi performa berdasarkan hasil testing: application configuration tuning, database indexing dan query optimization, connection pooling, memory management, dan infrastruktur tuning untuk hasil yang terukur.

Setelah di episode 16 kita memahami cloud & serverless performance, kini saatnya mengaplikasikan semua data yang telah kalian kumpulkan dalam bentuk yang paling berharga: tuning dan optimization. Performance testing tanpa follow-up optimization adalah latihan tanpa tujuan — data harus mengarah ke perbaikan yang terukur.
Episode ini membawa kalian memahami cara mengoptimasi di tiga lapisan: application, database, dan infrastruktur. Setiap optimasi harus diukur dampaknya dengan load test berulang — tidak ada yang namanya "optimasi tanpa bukti".
Thread pool dan connection pool adalah dua pool yang paling sering menjadi bottleneck. Pool yang terlalu kecil menyebabkan waiting; pool yang terlalu besar membuang resource.
# Java: tuning thread pool
-Dserver.tomcat.threads.max=200
-Dserver.tomcat.threads.min-spare=10
# Node.js: tuning connection pool
--max-old-space-size=4096 # 4GB heap// k6: test untuk membandingkan konfigurasi
export const options = {
vus: 100,
duration: '2m',
thresholds: {
http_req_duration: ['p(95)<300'],
},
};Timeout yang terlalu pendek menyebabkan error; timeout yang terlalu panjang menyebabkan resource starvation.
# Konfigurasi timeout
connect_timeout: 5s # Waktu koneksi
read_timeout: 30s # Waktu membaca response
write_timeout: 30s # Waktu menulis request
idle_timeout: 120s # Waktu koneksi idle sebelum ditutupQuery optimization dimulai dari execution plan analysis:
-- PostgreSQL: lihat execution plan
EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM orders
WHERE user_id = 123 AND status = 'pending'
ORDER BY created_at DESC LIMIT 10;Index yang tepat bisa mengubah query dari detik menjadi milidetik:
-- Cek index usage
SELECT indexrelname, idx_scan, idx_tup_read, idx_tup_fetch
FROM pg_stat_user_indexes
JOIN pg_index USING (indexrelid)
WHERE idx_scan = 0; -- Index yang tidak pernah dipakai
-- Buat composite index untuk query yang sering
CREATE INDEX idx_orders_user_status_created
ON orders (user_id, status, created_at DESC);-- PostgreSQL: lihat connection usage
SELECT count(*) as total, state, usename
FROM pg_stat_activity
GROUP BY state, usename;
-- Pool size yang tepat ≈ (CPU cores × 2) + effective_spindle_count
-- Untuk SSD: (CPU cores × 2) + 1// Before: N+1 queries
const products = await db.query('SELECT * FROM products');
for (const product of products) {
product.category = await db.query(
'SELECT * FROM categories WHERE id = $1', [product.category_id]
);
}
// After: single query with JOIN
const products = await db.query(`
SELECT p.*, c.name as category_name
FROM products p
JOIN categories c ON p.category_id = c.id
`);# Node.js: memory snapshot
node --inspect app.js
# Buka chrome://inspect untuk memory profiler
# Go: pprof memory
go tool pprof http://localhost:6060/debug/pprof/heap| Issue | Gejala | Solusi |
|---|---|---|
| Memory leak | RSS naik terus seiring waktu | Profiling, perbaiki resource management |
| Large objects | Heap spike mendadak | Streaming, pagination |
| GC pressure | GC pause sering | Kurangi allocation, object pooling |
# Network tuning
sudo sysctl -w net.core.somaxconn=65535
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sudo sysctl -w net.ipv4.ip_local_port_range="1024 65535"
# File descriptor limits
ulimit -n 65535# Nginx: connection and timeout tuning
worker_connections 10240;
keepalive_timeout 65;
proxy_connect_timeout 5s;
proxy_read_timeout 30s;# Sebelum optimasi
k6 run --vus 100 --duration 2m --out json=before.json script.js
# Setelah optimasi
k6 run --vus 100 --duration 2m --out json=after.json script.js
# Bandingkan
python scripts/compare.py before.json after.jsonSetelah optimasi, jalankan full regression test untuk memastikan tidak ada fitur yang rusak.
Di episode 17 ini kalian telah memahami tuning & optimization:
Di episode 18 selanjutnya, kita akan membahas Network & Latency Testing — bagaimana mensimulasikan network conditions yang realistis: latency, throttling, packet loss, dan geographic testing. Siapkan network simulator kalian!