Search
Duplicate

통계를 수집하는 방법과 무효화 방법

문서번호 : 11-370756

Document Information

최초 작성일 : 2022.06.15
최종 수정일 : 2022.07.14
이 문서는 아래 버전을 기준으로 작성되었습니다.
SinglestoreDB : 7.8

Goal

통계를 수집하는 방법과 무효화 방법에 대해 알아본다.

Solution

사전지식

좋은 쿼리 계획을 만들기 위해서, optimizer는 테이블 데이터의 크기와 분포에 대한 정보가 필요하다.
autostats는 자동으로 통계를 수집하여 optimizer에게 필요한 정보를 제공한다.

autostats

전역 변수 default_autostats_enabled를 설정하여, 향후 Create Table 명령문에서 autostats 를 활성화 여부를 변경할 수 있다. (default = on)
set global default_autostats_enabled = on/off;
SQL
복사
개별 테이블에 대한 autostats 활성화 여부 설정 명령어는 아래와 같다.
ALTER TABLE <table_name> ENABLE/DISABLE AUTOSTATS;
SQL
복사

히스토그램 (Histogram = Range statistics)

ADVANCED_HISTOGRAMS 시스템 뷰는 컬럼의 데이터 분포에 대한 정보를 제공하며, 여러 버킷(데이터 포인트가 분할되는 그룹/간격)으로 구성된다.
select * from information_schema.ADVANCED_HISTOGRAMS;
SQL
복사
Create (default)
AUTOSTATS_HISTOGRAM_MODECREATE로 설정된 경우, information_schema.mv_prospective_histograms시스템 뷰에서, 동일한 컬럼이 최소 2번 이상 식별된 경우, autostats 가 컬럼에 대한 히스토그램을 생성하고 주기적으로 업데이트 한다.
ANALYZE 명령어를 사용하여 수동으로 수집할 수 있다.
ANALYZE TABLE table_name COLUMNS column_name [, ...] ENABLE;
SQL
복사
Update
AUTOSTATS_HISTOGRAM_MODE 가 UPDATE로 설정된 경우, 기존에 생성된 히스토그램이 생성된 컬럼은 최신 상태로 업데이트 되지만, 히스토그램에 존재하지 않던 컬럼에 대해서는 생성하지 않는다.

샘플링

히스토그램을 사용할 수 없는 경우, 옵티마이저는 샘플을 사용하여 추정치를 계산한다.
rowstore 테이블의 경우, 동적 샘플링(예: 테이블의 일부를 스캔하여 데이터 샘플링)을 사용하여 추정치를 계산한다.
columnstore 테이블의 경우, 저장된 columnstore 샘플을 사용한다. (기본값: on)
set global default_autostats_columnstore_sampling = on/off;
SQL
복사

플랜 무효화 (Plan invalidation)

자동 플랜 업데이트 (기본값: off)
계획을 자동으로 무효화하고, 테이블에 대한 통계를 다시 수집하고 업데이트 할 수 있다.
set global enable_background_plan_invalidation = on/off;
SQL
복사
수동 플랜 수집(ANALYZE)
계획을 수동으로 무효화하고, 테이블에 대한 통계를 다시 수집하고 업데이트할 수 있다.
autostats가 활성화된 경우, Analyze는 통계를 수집하지 않는다.
ANALYZE TABLE [table_name];
SQL
복사
플랜 삭제
계획이 다음에 실행될 때, 처음부터 최적화되고 생성되도록 강제한다.
DROP [<plan_id> | ALL] FROM PLANCACHE;
SQL
복사

References

History

일자
작성자
비고
2022.06.15
wee
신규작성
2022.06.20
wee
default_autostats_enabled 내용 수정
2022.06.29
wee
불필요한 내용 삭제
2022.07.14
wee
히스토그램 autostat 수정