문서번호 : 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
복사
•
다음 링크에는 모든 테이블에서 자동 통계를 활성화하는 스크립트가 있다.
https://docs.singlestore.com/db/v7.8/en/query-data/statistics-and-sampling/statistics-and-sampling-tasks.html#autostats-support-upon-upgrading-singlestore
히스토그램 (Histogram = Range statistics)
•
ADVANCED_HISTOGRAMS 시스템 뷰는 컬럼의 데이터 분포에 대한 정보를 제공하며, 여러 버킷(데이터 포인트가 분할되는 그룹/간격)으로 구성된다.
select * from information_schema.ADVANCED_HISTOGRAMS;
SQL
복사
•
Create (default)
◦
AUTOSTATS_HISTOGRAM_MODE가 CREATE로 설정된 경우, 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 수정 |