Query planning(1)

ggulcha·2022년 8월 5일
1

Amazon Redshift

목록 보기
8/10
post-thumbnail

✅ Query planner가 항상 최고의 실행 계획을 작성하는 것은 아님

  • Query 작성자가 직접 검토할 필요가 있음
  • Query 실행 전 실행계획을 분석
  • Query 실행 완료 후 query profiling

✅ Query plannig
레드 시프트에서 쿼리플래닝이 의미하는 바는 다음과같다
리더 노드가 컴퓨팅 노드에 작업을 요청하기 전에 쿼리를 분석하고 최적화하는 과정
<레드시프트 쿼리 플랜 과정>

1. 클라이언트는 리더 노드에 연결해 쿼리를 실행
2. 리더 노드의 파서는 쿼리를 파싱해서 쿼리 문법에 문제가 없는지 확인하고
이 과정에서 생선된 쿼리 트리를 옵티마이저에게 전달
❗️옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진
3. 옵티마이저는 쿼리트리를 최적화된 구조로 재구성
4. 옵티마이저 실행계획 작성
5. 실행계획은 실행 엔진에 전달되고 실행 엔진은 세 가지 단위로 분리
<스텝> : 가장 작은 단위
<세그먼트> : 슬라이스에서 병렬 처리 가능한 스텝의 묶음
<스트림> : 세그먼트의 묶음 (쿼리는 하나 이상의 세그먼트로 구성)
6. 첫 번째 스트림 선택 , c++ 컴파일 코드생성
7. 컴파일 코드 -> 컴퓨팅 노드에 전달 -> 리더 노드의 캐시 메모리에 LRU 방식으로 저장.
8. 세그먼트는 컴퓨팅 노드의 WLM 쿼리 슬롯을 통해 병렬로 실행
독립적인 프로세스 생성하고 PID부여
9. 스트림의 모든 세그먼트 작업이 완료되면 다음 스트림의 세그먼트를 컴파일
미리 모든 세그먼트를 컴파일하지 않는 이유는 실행된 세그먼트 작업 결과와 성능을 분석하고 다음 세그먼트를 최적화하기 위함.
10. 컴퓨팅 노드에서 모든 스트림 작업이 끝나면 리더 노드에게 결과 데이터를 전송
11. 리더 노드는 전달받은 결과 데이터를 취합하고, 필요에 따라 정렬과 집계,LIMIT 마무리 작업 후 , 클라이언트에게 최종 결과를 전달

0개의 댓글