옵티마이저 -> 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업 담당
- 쿼리 실행 절차
- 옵티마이저의 종류
- 규칙 기반 최적화
- 대상 테이블의 레코드 건수나 선택도를 고려하지 않고 옵티마이저에 내장된 우선순위에 따라 실행 계획을 수립
- 비용 기반 최적화
- 실행 계획 별 비용 산출 후 최소 비용이 소요되는 처리 방식을 선택해서 실행
- 통계정보
- MariaDB에서 기본적으로 관리되는 통계 정보는 대략의 레코드 건수와 인덱스의 유니크한 값의 개수 정도
- MySQL 5.6의 통계 정보
- InnoDB 스토리지 엔진을 사용하는 테이블에 대한 통계 정보를 영구적으로 관리할 수 있게 개선
- innodb_index_stats/innodb_table_stats 테이블에서 인덱스 조회 가능
- 영구적으로 통계 정보 저장 여부 옵션 -> STATS_PERSISTENT| 0 : 저장하지 않음, 1 : 테이블에 저장함, DEFAULT : 시스템 설정 변수의 값을 따름|
- 테이블 통계 정보의 수집
- 테이블 생성
- 대량 레코드의 변경(전체 레코드의 1/16)
- ANALYZE TABLE 명령 실행
- SHOW TABLE STATUS / SHOW INDEX FROM 명령 실행
- InnoDB 모니터 활성화
- 통계 정보 자동 수집 여부 옵션 -> STATS_AUTO_RECLAC| 0 : ANALYZE TABLE 명령 실행 시 수집, 1 : 자동 수집, DEFAULT : 시스템 설정 변수의 값을 따름|
- 통계정보 생성 시 샘플링 할 테이블 블록 옵션
- innodb_stats_transient_sample_pages - 자동으로 통계 정보 수집이 실행 될 때 설정된 페이지만 임의로 샘플링, 기본값 8
- innodb_stats_persistent_sample_pages - ANALYZE TABLE 명령이 실행되면 설정된 페이지만 샘플링, 기본값 20
- MariaDB 10.0의 통계 정보 – ANALYZE TABLE 명령으로만 가능
- 인덱스되지 않은 컬럼에 대해서도 영구적으로 통계 정보 관리 가능 -> 정확도가 높은 통계 정보를 백업/복구해서 사용 가능
- 통계 정보가 부정확한 경우에 관리자가 직접 통계 정보 변경 가능 -> 옵티마이저가 조금 더 정확한 정보를 기준으로 실행 계획 수립 가능
- 통계정보 관리 방법
- use_stat_tables = 'never' : 통합 통계 정보 수집 불가
- use_stat_tables = 'complementary' : 통계 정보 사용 우선순위 1. 스토리지 엔진 통계 정보, 2. 통합 통계 정보
- use_stat_tables = 'preferably' : 통계 정보 사용 우선순위 1. 통합 통계 정보, 2. 스토리지 엔진 통계 정보
- 히스토그램 통계 정보
- 히스토그램은 컬럼 값의 분포도를 분석할 수 있는 통계 정보
- 히스토그램이란?
- 인덱스 여부와 상관 없이 원하는 컬럼에 대한 히스토그램 정보 저장 가능
- 히스토그램 관리 방법 : Height-Balanced Histogram -> 데이터를 정렬해서 그룹으로 나눈 다음 최대 값을 구해서 값의 분포도를 구함
- MariaDB에서 히스토그램 사용
- ANALYZE TABLE 명령으로 히스토그램 생성
- 히스토그램 사용 여부 옵션 : histogram_size| 0 : 사용 안함, 1 이상 : 사용, 기본값 0
- 히스토그램 정확도 옵션 – 히스토그램의 그룹 수 : DOUBLE_PREC_HB – 그룹 수 : (hist_size/2) / SINGLE_PRC_HB – 그룹 수 : hist_size
- 히스토그램을 사용할 때 MariaDB의 엔진 레벨과 스토리지 엔진 레벨의 통계 정보를 설정 값이 따라서 섞어서 사용 옵션 : optimizer_user_condition_selectivity
- MariaDB 5.5에서 사용되던 선택도 예측 방식 사용
- 인덱스가 생성되어 있는 컬럼의 조건에 대해서만 선택도 판단
- 히스토그램 사용 안 함
- 히스토그램 사용
- 히스토그램 사용 및 인덱스 레인지 스캔이 불가한 컬럼에 대해서 레코드 샘플링으로 선택도 판단
- 조인 옵티마이저 옵션
- Exhaustive 검색
- FROM 절에 명시된 모든 테이블의 조합에 대해서 실행 계획 비용 생성 후 최적의 조합 1개를 선택
- Heuristic 검색(Greedy 검색)
- 조인 최적화 시스템 변수
- optimizer_prune_level : 조인 알고리즘 선택| OFF : Exhaustive, ON : Greedy, 기본값 ON
- optimizer_search_depth : Greedy 검색에서 사용하는 옵션으로 설정된 개수의 테이블로 가능한 조인 조합을 생성할 때 사용, 기본값 60, 작아질수록 최적화 감소
'MariaDB > Admin' 카테고리의 다른 글
스토리지 엔진 2 (0) | 2015.10.20 |
---|---|
MariaDB 최적화 1 (0) | 2015.10.14 |
MariaDB 옵티마이저 힌트 및 실행 계획 분석 시 주의사항 (0) | 2015.10.12 |
MariaDB 란? (0) | 2015.10.07 |
MariaDB 설치 (0) | 2015.10.05 |