데이터베이스와 스토리지 협력
DB 서버의 SQL 처리와 셀의 데이터 선별을 나누고 Smart Scan, Storage Index, HCC, 플래시 캐시가 줄이는 대상을 구분함
#핵심 요약
일반 블록 I/O에서는 스토리지가 요청된 블록을 반환하고 DB 서버가 필요한 데이터를 선별함
Exadata는 스토리지 셀 소프트웨어가 지원되는 조건과 컬럼을 선별해 반환하는 방식으로 일부 작업을 분담함
기능마다 줄이는 대상이 저장량, 읽을 영역, 반환량, 읽기 지연으로 다름
#개념과 동작 원리
#블록 반환에서 작업 분담으로
| 단계 | 일반 스토리지의 설명 | Exadata의 설명 |
|---|---|---|
| SQL 준비 | DB 서버에서 분석, 실행 | DB 서버에서 SQL 해석, 실행계획 수립 |
| 데이터 읽기 | 요청된 블록 반환 | 셀에서 지원되는 스캔 처리 |
| 선별 | DB 서버에서 행, 컬럼 검사 | 셀에서 지원되는 조건, 필요 컬럼 선별 |
| 후속 처리 | DB 서버에서 결과 처리 | DB 서버에서 반환 결과의 조인, 정렬, 집계 등 처리 |
DB 서버의 일부 작업을 셀에 넘기는 것을 Offloading이라고 함
실습에서는 초기 Teradata, Netezza의 전용 프로세서, FPGA, Exadata의 스토리지 소프트웨어를 처리 기능의 배치 위치로 비교함
제품별 성능을 비교한 결과는 기재 없음
#기능별로 줄이는 대상
| 기능 | 처리 위치와 방식 | 줄이는 대상 |
|---|---|---|
| HCC | 컬럼 특성을 활용한 압축, 셀의 압축 해제 처리 | 저장량과 스캔할 압축 데이터량 |
| Partition Pruning | DB 옵티마이저가 조건과 무관한 파티션 제외 | 접근할 파티션 |
| Storage Index | 셀이 관리하는 영역별 최소, 최대 등 요약 정보 | 읽을 필요가 없는 저장 영역 |
| Smart Scan | 셀에서 조건과 컬럼 선별 | DB 서버로 반환하는 바이트 |
| Smart Flash Cache | 셀 플래시에 재사용할 데이터 캐시 | 느린 디스크 접근 지연 |
Storage Index는 DBA가 생성하는 B-tree 인덱스와 구분되며 실습에서는 셀 자동 관리 메타데이터로 설명함
Partition Pruning은 일반 Oracle DB에서도 적용하는 옵티마이저 기능임
실습 VM의 영역별 최소, 최대값 SQL은 Storage Index의 판단 원리를 재현하고, HCC 어드바이저는 압축 비율을 추정함
실제 셀에서 측정한 Storage Index 실행 결과와 HCC 저장 크기는 기재 없음
#여러 기능을 결합한 실습 예시
| 실습 단계 | 설명용 데이터량 | 수치가 가리키는 대상 |
|---|---|---|
| 초기 데이터 | 10TB | 압축 전 논리적 크기 |
| HCC | 1TB | 압축 후 저장 크기 |
| Partition Pruning | 100GB | 관련 파티션의 후보 범위 |
| Storage Index | 20GB | 읽을 영역의 예시 |
| Smart Scan | 5GB | 조건, 컬럼 선별 후 반환 결과의 예시 |
위 수치는 가정값임
데이터량 차이를 ‘스캔 2000배’로 표현했으나 실행 시간 개선률은 아님
압축 저장 데이터와 반환 데이터는 형식이 다를 수 있어 20GB와 5GB만으로 조건에 맞는 행의 비율을 계산할 수 없음
Flash Cache 효과는 데이터량 감소율에 곱할 수 없음
셀에서 조건과 컬럼을 선별하는 흐름은 Smart Scan에서 다룸
#사용 조건과 주의사항
지원되는 연산과 접근 방식에 따라 셀에 분담할 수 있는 범위가 달라짐
물리적으로 모인 데이터는 영역별 값의 범위가 좁아 Storage Index의 제외 효과가 커질 수 있으며 분산된 데이터는 효과가 제한될 수 있음
실습은 HCC 비율 추정, 파티션 동작, 영역별 SQL 계산, DB 서버 측 필터 시뮬레이션으로 나뉨
SQL마다 처리 순서와 데이터 감소율은 달라질 수 있음