MariaDB에서 통계 정보는 쿼리 최적화, 인덱스 활용, 리소스 관리 등 성능을 향상시키는 데 핵심 역할을 합니다. 옵티마이저는 테이블 행 수, 인덱스 분포도, 히스토그램과 같은 데이터를 바탕으로 실행 계획을 수립합니다.
Q. 옵티마이저가 제대로 기능하지 않는다면, 쿼리는 어떻게 될까요?
→ 실행 계획이 부정확해져 불필요한 스캔, 과도한 I/O, 느린 응답이 발생할 수 있습니다.
1. MariaDB 쿼리 실행 흐름: 어디서 통계가 쓰일까?
•
SQL 파싱 → 옵티마이저 실행 계획 수립 → 스토리지 엔진과 연동
•
통계는 옵티마이저의 핵심 정보 기반
2. 통계 수집 방식 정리
•
디스크에 저장되며 재부팅 후에도 유효
•
innodb_stats_persistent 변수로 제어
•
MyISAM, Aria 등에서도 사용 가능
•
use_stat_tables 설정, ANALYZE TABLE 명령 필요
•
히스토그램 포함 (데이터 편중 상황 유리)
3. 히스토그램 통계: 옵티마이저의 ‘데이터 분포 지문’
•
비인덱스 열의 분포 인식 가능
•
Height-Balanced 또는 JSON 히스토그램(MariaDB 10.7+)
Q. 데이터가 몰린 값만 계속 조회된다면, 옵티마이저는 최선의 길을 찾을 수 있을까요?
4. 통계 갱신 전략
•
수동 갱신: ANALYZE TABLE 명령으로 필요한 열만 갱신 가능
•
통계 저장 테이블: mysql.table_stats, mysql.column_stats 등
주의: 잘못된 수동 갱신은 쿼리 성능 악화 가능
마무리 요약
•
정확하고 최신 통계 = 최적화된 쿼리 계획
•
영구 통계 + 히스토그램 = 성능 안정성
•
자동 vs 수동 전략적으로 선택
•
정기 갱신 = 운영 안정성 핵심