2026년 2월 5일 목요일

다수 Array 컬럼이 포함된 테이블에 Analyze 수행시 메모리 사용량 및 수행시간 개선

 

1. 개선 요약
   - 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. 
        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;  
      - Analyze table_name;

3. 사용자 테이블 실 테스트 결과 
      - 테이블 용량 237GB, 전체 컬럼 136개, array 컬럼 97개
      - 데이터 건수와 Array 컬럼 개수, Array 건수에 영향을 받기 때문에, 각 케이스마다는 차이가 발생할 수 있으나, 
         메모리 및 Analyze 수행시간은 확실하게 개선 됨.
Greenplum 6.28.2Greenplum 6.32.0개선비(배)
메모리 사용량 (MB)소요시간(sec)메모리 사용량 (MB)소요시간(sec)메모리 개선비소요시간 개선비
1차28,380139116224570
2차28,632141116224771
3차28,456141116224571
평균28,489140116224670

4. 테이블 통계 (Analyze) 
     1)  Analyze는 테이블 통계를 업데이트하는데 쿼리 플랜 생성시 테이블 통계를 이용함.
          - 테이블 통계는 쿼리 플랜 생성시 테이블 건수, Join, Where, Sort, Group by, Having 절에 사용됨.
     2) array 컬럼을 조인/where조건, Order by, Group by, Having 절에 사용하지 않으므로, 통계 생성할 필요 없음.

댓글 없음:

댓글 쓰기

다수 Array 컬럼이 포함된 테이블에 Analyze 수행시 메모리 사용량 및 수행시간 개선

  1. 개선 요약    - Greenplum 6.32.0에서 Array 컬럼이 다수 포함된 테이블에 Analyze 수행시 메모리 사용량 감소 및 수행시간 획기적 개선    - 실 테스트 데이터 기준: 테이블 용량 237GB, 전체 컬럼수 136개, ...