🚀 Firebird 성능 진단 체크리스트(실무용 완성본)
이 문서는 Firebird 데이터베이스 성능 문제를 빠르게 진단할 수 있도록 만들어진
현장용 체크리스트입니다.
총 7개 영역(50개 항목)으로 구성되어 있으며 하루 진단 / 주간 점검 / 월간 점검에 모두 사용할 수 있습니다.
1️⃣ 인덱스 점검
✔ 기본 인덱스 상태
- WHERE 조건에 사용되는 컬럼에 인덱스가 있는가?
- JOIN ON 절에 사용되는 컬럼에 인덱스가 있는가?
- PRIMARY KEY / FOREIGN KEY 인덱스가 정상적으로 생성되어 있는가?
- 인덱스가 너무 많은 것은 아닌가? (10개 이상이면 리뷰 필요)
✔ 인덱스 품질(선택도)
- 선택도(Selectivity)가 낮은 인덱스는 제거 대상인가?
- 중복값이 많은 컬럼에 인덱스를 구성하지 않았는가?
- 날짜/상태값(Y/N, 0/1) 같은 저선택도 컬럼에 인덱스가 남발되지 않았는가?
✔ 인덱스 스캔 확인
- 주요 쿼리의 PLAN에서 NATURAL 발생 여부 확인
- 테이블 크기(> 100만 로우)인데 NATURAL 스캔이면 반드시 원인 조사
2️⃣ SQL 쿼리 성능 점검
✔ SELECT
- SELECT * 사용을 피하고 필요한 컬럼만 가져오는가?
- ORDER BY에 함수/표현식을 사용하여 인덱스를 무력화하고 있지 않은가?
- LIKE '%keyword%' 사용 빈도가 높은가? (Full scan 유발)
✔ JOIN 성능
- JOIN 컬럼 양쪽 모두 인덱스가 있는가?
- FULL JOIN을 사용하고 있지 않은가? (Firebird에서 매우 느림 → 반드시 재작성)
- LEFT JOIN이 남용되어 있지는 않은가?
✔ 서브쿼리
- 상관 서브쿼리(Correlated Subquery)를 JOIN으로 대체 가능한가?
- EXIST/IN/NOT IN에서 인덱스가 사용되는지 확인했는가?
3️⃣ 테이블 상태 & 데이터 구조
✔ 테이블 크기 관리
- 100만 로우 이상 테이블은 월간 점검 대상인가?
- 불필요한 로그/백업 테이블에 purge 전략이 있는가?
- 대량 DELETE 시 분할 삭제(batch delete)를 사용하는가?
✔ 컬럼 구조
- TEXT/BLOB 컬럼이 과하게 사용되고 있는가?
- UPPER(), TRIM() 등 함수 기반 정규화 컬럼이 필요한가?
- Generated Column으로 인덱스를 만들 여지가 있는가?
4️⃣ 트랜잭션 관리
✔ 트랜잭션 상태
- 장시간 오픈(몇 시간~며칠)된 트랜잭션이 존재하지 않는가?
- Commit/Rollback 누락이 발생하지 않는지 모니터링되는가?
- Autocommit의 남용이 있는가?
✔ 스냅샷 기반의 문제 예방
- Oldest Active / Oldest Snapshot / Next Transaction Number 간의 갭이 너무 크지 않은가?
→ 큰 갭 = 오래된 트랜잭션 방치 = 성능 저하 - Sweep가 정상적으로 동작하고 있는가?
5️⃣ 서버 설정 & 환경 점검
✔ Firebird 설정(firebird.conf)
- DefaultDBCachePages 설정이 환경에 맞는가?
- TempCacheLimit이 충분한가?
- LockHashSlots 등 Lock 관리 설정 정상?
✔ OS & 하드웨어
- SSD 기반인가? (HDD는 Firebird에서 느림)
- RAID 구성 시 write penalty 최소화 구조(RAID 10 등)인가?
- RAM 용량이 충분한가? (8GB 이상 권장, 대형 DB는 16GB~32GB)
✔ 네트워크
- 3050 포트 지연 없음
- 중간 방화벽/프로시가 session을 끊지 않는가?
6️⃣ 백업/복구 & 유지관리
✔ 백업(gbak)
- gbak 풀 백업이 최근 7일 안에 정상 실행되었는가?
- 백업 파일이 무결한지 검증되었는가?
- 백업 스케줄이 병목을 일으키지 않는가?
✔ 복구(grestore)
- 주기적으로 test restore를 실행하는가?
- 복구 시 performance degradation 체크 여부
✔ Rebuild (옵션)
- 인덱스 rebuild 필요 여부 검토
- OAT/OST 갭 체크 후 필요 시 sweep or manual cleanup 진행
7️⃣ 스토어드 프로시저 & 트리거
✔ 스토어드 프로시저
- SELECT FOR 루프 내부에 NATURAL scan이 있는가?
- 필요 시 PLAN을 명시했는가?
- 임시 테이블 사용 여부 정상인가?
✔ 트리거
- AFTER UPDATE/INSERT 트리거가 과도한 연산을 하는가?
- BLOB 업데이트 등 무거운 작업을 트리거에 넣지 않았는가?
- 트리거 내부에서 불필요한 SELECT/UPDATE가 없는가?
🎯 Firebird 성능 문제를 의심해야 하는 신호들
다음 중 하나라도 발생하면 즉시 점검 대상입니다:
- 쿼리가 갑자기 느려졌다
- CPU가 높지 않은데도 DB 응답이 느리다
- NATURAL 스캔이 증가했다
- Oldest Active Transaction(OAT) 정체
- Sweep이 비정상적으로 오래 걸린다
- 인덱스가 “stuck” 상태
- 백업 파일 크기가 갑자기 증가
- 특정 시간대에만 응답이 느려진다
📌 Firebird 성능 점검 10분 프로세스(요약 버전)
- PLAN 확인 (NATURAL 여부 체크)
- 인덱스 확인 (유효한가? 선택도는?)
- 트랜잭션 상태 확인 (OAT, OST)
- 대량 DELETE/UPDATE 여부 (미완료 트랜잭션 있는지)
- 스케줄러 작업 확인 (백업/Sweep 시간)
- 서버 리소스 체크 (Disk I/O, RAM, Swap, CPU)
- 스키마 변경 이력 확인 (최근 인덱스 삭제?)
- 어플리케이션 로그 확인
- 쿼리 캐시/실행 빈도 점검
- Firebird 로그(firebird.log) 점검
'DB관련' 카테고리의 다른 글
| Firebird 데이터베이스 수동 업데이트 완벽 가이드 (윈도우 초보자도 쉽게 따라하기) (0) | 2025.11.28 |
|---|---|
| Firebird SQL 튜닝 자동화 체크 규칙 리스트 (1) | 2025.11.28 |
| IBExpert vs RedExpert 비교 + Firebird 성능 튜닝 핵심 정리 (0) | 2025.11.28 |
| IBExpert vs RedExpert: Firebird DB 관리 툴 비교 — 다운로드, 기능, 가격 총정리 (0) | 2025.11.28 |
| SQL Server 로그 깨짐 긴급복구 가이드 (0) | 2025.11.26 |