5. 옵티마이저와 통계정보#
이 장은 쿼리를 최적화하는데 있어 통계정보가 왜 중요한지를 알아보고, 사용자가 통계정보를 수집하고 설정하는 방법을 설명한다.
통계정보의 개요#
잘 구축된 통계정보는 옵티마이저가 최적의 실행 계획을 수립하는데 큰 역할을 한다. Altibase 서버는 쿼리 옵티마이저가 최적의 실행 계획을 수립할 수 있도록 아래와 같은 통계 정보를 지원한다.
테이블 통계#
-
레코드 개수
-
페이지 개수
-
레코드의 평균 길이
칼럼 통계#
-
칼럼에서 유일한 값의 개수
-
칼럼에서 NULL의 개수
-
칼럼의 평균 길이
인덱스 통계#
-
리프 노드 당 슬롯의 평균 개수
-
인덱스의 루트에서 리프 노드까지의 깊이
-
clustering factor: 데이터가 인덱스에 부합하게 정렬되어 있는 정도
-
인덱스의 최대값
-
인덱스의 최소값
데이터베이스 시스템 통계#
-
단일 페이지 읽기 평균 소요 시간
-
다중 페이지 읽기 평균 소요 시간
-
평균 해시 수행 시간
-
평균 비교 수행 시간
통계정보 관리#
Altibase는 수동 및 자동으로 통계정보를 수집할 수 있다.
통계정보 수집#
어떤 객체에 대한 최신의 통계가 필요하다면, 사용자가 DBMS Stats 저장 프로시저를 사용해서 통계를 수집하거나 직접 갱신해야 한다. 이렇게 수집된 통계정보는 옵티마이저가 실행 계획을 수립하는데 활용된다.
아래의 시스템 저장 프로시저를 호출하면 Altibase 서버가 샘플링 데이터를 기반으로 통계 정보를 수집한다. 샘플링 데이터의 비율을 높일수록 통계정보가 더 정확해질 것이다.
-
GATHER_SYSTEM_STATS
-
GATHER_DATABASE_STATS
-
GATHER_TABLE_STATS
-
GATHER_INDEX_STATS
아래의 시스템 저장 프로시저를 사용해서 사용자가 직접 객체 또는 시스템에 대한 통계를 설정할 수도 있다.
-
SET_SYSTEM_STATS
-
SET_TABLE_STATS
-
SET_INDEX_STATS
-
SET_COLUMN_STATS
아래의 시스템 저장 프로시저를 사용해서 사용자가 직접 테이블 통계를 잠그거나 잠금을 해제할 수 있다.
- LOCK_TABLE_STATS
- UNLOCK_TABLE_STATS
각 저장 프로시저에 대한 상세한 설명은 Stored Procedures Manual 의 DBMS Stats를 참고한다.
자동 통계정보 수집(Auto Stats)#
통계정보 조회#
수집된 통계는 V$DBMS_STATS 성능 뷰에 저장된다. V$DBMS_STATS 성능 뷰에 대한 자세한 내용은 General Reference > 3장. 데이터 딕셔너리를 참조한다.
주의 사항#
시스템 통계의 경우, Altibase 서버를 구동한 후 일정량의 부하(FULL SCAN과 INDEX SCAN을 반복적으로 수행)를 가한 상태에서 1회만 수집할 것을 권장한다. 그렇지 않으면 일부 통계 값이 제대로 측정되지 않을 수 있다.
데이터베이스의 객체와 데이터는 끊임없이 변경되므로, 쿼리 최적화를 위해 사용자는 주기적으로 통계정보를 갱신할 필요가 있다. 테이블 통계는 월단위로 수집하거나 데이터 변경이 많이 발생한 경우에 수집할 것을 권장한다.