🖥️ 들어가며
📌 One SQL
📌 Granule: 블록 기반/파티션 기반 Granule
📌 IN-OUT 오퍼레이션: S to P(P from S), P to S, P to P
✏️ 1. 배치 프로그램 구현 패턴과 튜닝 방안
- 절차형 프로그램 vs. 집합적(=One SQL) 프로그램
- 절차형 프로그램
: 애플리케이션 커서를 열고 → 루프 내에서 또다른 SQL이나 서브 프로시저를 호출하면서 → "같은 처리"를 "반복"합니다. - 집합적 프로그램
: One SQL로 구성하거나, 집합적으로 정의된 여러 SQL을 단계적으로 실행합니다.
구분 | 튜닝 방안 |
절차형 프로그램 | - 병목을 일으키는 개별 SQL을 찾아 I/O 튜닝: 인덱스를 재구성하고 액세스 경로를 최적화 - 프로그램 Parallel 활용: 메인 SQL이 읽는 데이터 범위를 달리하여 프로그램을 동시에 여러 개 수행 - Array Processing 활용 - 가능하다면 One SQL 위주 프로그램으로 다시 구현 |
집합적 프로그램 (One SQL) |
- 병목을 일으키는 오퍼레이션을 찾아 I/O 튜닝: (1) Index scan 보다는 Full Table Scan 방식으로 처리 (2) NL Join 보다는 Hash Join 방식으로 처리 - 임시 테이블 활용 - 파티션 활용 - 병렬처리 활용: SQL문이 수행해야 할 작업 범위를 여러 개 작은 단위로 나누어 여러 프로세스(또는 스레드)가 동시 처리하는 것을 의미함 |
✏️ 2-1. 병렬처리 활용: Granule
- Granule: 데이터를 병렬로 처리할 때 일의 최소 단위를 말합니다.
- Granule의 종류
- 종류 1: 블록 기반 Granule
- 대부분의 병렬 오퍼레이션에 적용되는 기본 작업단위입니다.
- 파티션 여부와 상관없이 병렬도를 지정할 수 있습니다.
- Granule 할당은 QC가 수행합니다.
- 실행계획 표기: PX BLOCK ITERATOR
- 종류 2: 파티션 기반 Granule (=파티션 Granule)
- 하나의 파티션은 하나의 병렬프로세스가 처리합니다. (프로세스 하나가 파티션 두 개 처리 XXX)
- 병렬도는 전체 파티션 개수 이하로 설정 가능합니다.
- 실행계획 표기: PX PARTITION RANGE ALL 또는 PX PARTITION RANGE ITERATOR
- 종류 1: 블록 기반 Granule
✏️ 2-2. 병렬처리 활용: IN-OUT 오퍼레이션
구분 | 명칭 | 설명 | Intra/Inter Operation Parallelism |
오퍼레이션 |
S → P | Parallel From Serial | QC가 읽은 데이터를 테이블 큐를 통해 병렬서버프로세스에게 전송 |
- | 직렬 |
P → S | Parallel To Serial | 각 병렬서버프로세스가 처리한 데이터를 QC에게 전송 |
Inter | 병렬 |
P → P | Parallel To Parallel | 데이터를 재분배하는 오퍼레이션* 데이터를 정렬 또는 그룹핑하거나 조인을 위해 동적 파티셔닝할 때 사용 |
Inter | 병렬 |
*데이터 재분배: Range, Hash, Broadcast, Key, Round-Robin
📒 정리하면
- 배치 프로그램: 절차형과 집합적(One SQL) 프로그램으로 나뉘며, 각각 다른 튜닝 방안이 적용됩니다.
- Granule: 병렬처리에서 작업의 최소 단위로, 블록 기반과 파티션 기반 Granule 두 종류가 있습니다.
- IN-OUT 오퍼레이션
- S → P (Parallel From Serial)
- P → S (Parallel To Serial)
- P → P (Parallel To Parallel)
반응형