성능 튜닝
GenD 플랫폼의 성능 최적화 및 튜닝 가이드입니다.
개요
GenD의 성능 병목은 주로 Trino 쿼리 실행, API 응답 시간, 데이터베이스 커넥션에서 발생합니다. Grafana 대시보드와 Prometheus 메트릭을 활용하여 병목을 식별합니다.
Trino 쿼리 성능
메모리 설정
| 설정 | 개발 | 프로덕션 권장 |
|---|---|---|
query.max-memory | 2GB | 8GB+ |
query.max-memory-per-node | 1GB | 4GB+ |
coordinator.jvm.maxHeapSize | 3G | 8G+ |
worker.jvm.maxHeapSize | 3G | 8G+ |
워커 스케일링
쿼리 처리량이 부족하면 워커를 추가합니다.
# 워커 수 증가
helm upgrade trino trino/trino -n gend --set worker.replicas=3
리소스 그룹 튜닝
역할별 동시 쿼리 수와 메모리 할당을 조정합니다 (resource-groups.json).
GenD API 성능
응답 시간 모니터링
Prometheus 메트릭으로 API 레이턴시를 모니터링합니다:
# P95 응답 시간
histogram_quantile(0.95, rate(gend_http_request_duration_seconds_bucket[5m]))
# 초당 요청 수
rate(gend_http_requests_total[5m])
HPA 기반 자동 스케일링
CPU 70%/메모리 80% 초과 시 자동 스케일 아웃됩니다.
# HPA 상태 확인
kubectl get hpa gend-api-hpa -n gend
# 현재 메트릭 확인
kubectl describe hpa gend-api-hpa -n gend
쿼리 캐시
쿼리 캐시를 활성화하면 동일 쿼리의 반복 실행을 최적화합니다.
GEND_QUERY_CACHE_ENABLED=true
GEND_QUERY_CACHE_THRESHOLD=0.95 # 유사도 임계값
스키마 동기화 주기
스키마 자동 동기화가 부하를 유발하면 주기를 늘립니다.
GEND_SCHEMA_SYNC_INTERVAL_SECONDS=600 # 기본 300초 -> 600초
PostgreSQL 튜닝
- 커넥션 풀: SQLAlchemy async pool 크기 조정
- 인덱스: 자주 사용하는 컬럼에 인덱스 확인
- VACUUM: 정기적 VACUUM ANALYZE 실행
네트워크 최적화
- Pod 코로케이션: API와 Trino를 동일 노드에 배치 (nodeAffinity)
- 서비스 메시: 대규모 환경에서 서비스 메시 도입 검토