1. 개선 요약
- Greenplum 6.32.0에서 Array 컬럼이 다수 포함된 테이블에 Analyze 수행시 메모리 사용량 감소 및 수행시간 획기적 개선
- 실 테스트 데이터 기준: 테이블 용량 237GB, 전체 컬럼수 136개, array 컬럼 97개
- 마스터 노드 메모리 사용량 : 28,000MB -> 128MB (245배 메모리 사용량 개선)
- 수행 속도: 140초 -> 2초 (70배 속도 향상)
2. 적용 방법
1) Greenplum 6.32.0+ 버전 사용
- 기능 개선 사항:
- Greenplum 6.32.0에서 Array 컬럼이 다수 포함된 테이블에 Analyze 수행시 메모리 사용량 감소 및 수행시간 획기적 개선
- 실 테스트 데이터 기준: 테이블 용량 237GB, 전체 컬럼수 136개, array 컬럼 97개
- 마스터 노드 메모리 사용량 : 28,000MB -> 128MB (245배 메모리 사용량 개선)
- 수행 속도: 140초 -> 2초 (70배 속도 향상)
2. 적용 방법
1) Greenplum 6.32.0+ 버전 사용
- 기능 개선 사항:
* Analyze 수행시 테이블의 데이터 샘플링을 하는데, 컬럼에 statistics = 0으로 설정된 컬럼에 대해서는 샘플링하지 않음.
* 기존에는 analyze table_name(column1) 으로 수행하더라도 데이터 샘플링하는 경우에는 모든 컬럼에 대해서 샘플링 하였음.
- https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/6/greenplum-database/relnotes-release-notes.html
- The ANALYZE command now skips columns with a zero statistics target during sampling.
- The ANALYZE command now skips columns with a zero statistics target during sampling.
This optimization significantly improves overall runtime and reduces coordinator memory usage
when tables contain numerous columns with zero statistics targets.
2) 적용 방법
- 모든 Array 컬럼에 대해서 통계 수집을 0으로 설정
ALTER TABLE table_name ALTER COLUMN array_colmun SET STATISTICS 0;
- 모든 Array 컬럼에 대해서 통계 수집을 0으로 설정
ALTER TABLE table_name ALTER COLUMN array_colmun SET STATISTICS 0;
- Analyze table_name;
3. 사용자 테이블 실 테스트 결과
- 테이블 용량 237GB, 전체 컬럼 136개, array 컬럼 97개
- 데이터 건수와 Array 컬럼 개수, Array 건수에 영향을 받기 때문에, 각 케이스마다는 차이가 발생할 수 있으나,
메모리 및 Analyze 수행시간은 확실하게 개선 됨.
4. 테이블 통계 (Analyze)
1) Analyze는 테이블 통계를 업데이트하는데 쿼리 플랜 생성시 테이블 통계를 이용함.
- 테이블 통계는 쿼리 플랜 생성시 테이블 건수, Join, Where, Sort, Group by, Having 절에 사용됨.
2) array 컬럼을 조인/where조건, Order by, Group by, Having 절에 사용하지 않으므로, 통계 생성할 필요 없음.
댓글 없음:
댓글 쓰기