오라클 엑사데이터의 스마트 스캔(Smart Scan) 기능은 Exadata의 핵심 성능 향상 기술 중 하나로, 데이터베이스 서버의 작업 부하를 스토리지 레벨에서 처리하여 성능을 크게 향상시키는 기술입니다.

스마트 스캔
• 기존의 데이터베이스 방식에서는 DB 서버가 스토리지로부터 데이터를 모두 가져와서(DB로 전송) 필터링, 연산 처리를 수행합니다.
• Exadata 스마트 스캔은 데이터 필터링과 연산 작업을 스토리지 노드에서 먼저 수행한 후, 필요한 데이터만 DB 서버로 전송합니다.
• 이를 통해 DB 서버의 CPU 부하, 네트워크 부하를 감소시키고 쿼리 속도를 향상시킵니다.
스마트 스캔의 동작 원리
• 스마트 스캔은 다음 절차로 수행됩니다.
작업 단계 | 설명 |
DB 요청 전달 | DB 서버가 쿼리 수행 요청을 Exadata 스토리지로 전달 |
스토리지 레벨 필터링 | 스토리지 서버는 요청된 데이터에서 불필요한 데이터를 제거(WHERE 조건 필터링, 컬럼 선택 등) |
결과만 DB 서버로 전달 | 스토리지 노드에서 선별된 결과만 DB 서버에 반환 |
DB 서버 처리 최적화 | DB 서버는 받은 최소한의 데이터를 처리하여 최종 결과를 빠르게 반환 |
스마트 스캔의 주요 기능과 이점
1. 쿼리 성능 향상
• 불필요한 데이터 전송량을 감소시켜 I/O 병목현상 최소화
• 대용량 테이블 Full Table Scan에 탁월한 성능 개선 효과
2. CPU 부하 감소
• 스토리지에서 사전 연산 수행으로 DB 서버 CPU 자원을 절약
• 많은 사용자 요청을 처리하는 환경에서 성능 안정성 유지
3. 네트워크 부하 감소
• 네트워크를 통해 전달되는 데이터가 최소화됨으로써 성능 및 응답 속도 개선
4. 스마트 스캔이 효과적인 경우
• 스마트 스캔은 다음과 같은 조건에서 특히 큰 효과를 발휘합니다.
✔︎ 대용량 테이블 조회(Full Table Scan) 시 매우 효과적
✔︎ 데이터 웨어하우스(DW) 환경과 분석용 쿼리에 특히 적합
✔︎ 집계함수(SUM, COUNT, AVG 등), 그룹핑(GROUP BY) 연산에서 성능 최적화 효과가 큼
✔︎ Partitioned Table 및 Hybrid Columnar Compression(HCC)된 테이블에서 효율 증가
• 반면, 소규모 테이블 조회나 인덱스 기반 검색(Index Range Scan)에서는 스마트 스캔의 이점이 제한적일 수 있습니다.
5. 스마트 스캔이 사용되는 조건
• 다음 조건이 충족될 때 스마트 스캔이 작동합니다.
✔︎ Direct Path Reads(직접 경로 읽기)를 수행할 때
✔︎ Parallel Query(병렬 쿼리) 수행 시
✔︎ Exadata 호환 파일 시스템인 ASM(Automatic Storage Management)을 통해 관리되는 데이터일 때
✔︎ 쿼리에 특정 필터(WHERE 조건)나 컬럼 선택이 있을 때
6. 스마트 스캔 확인 방법
• 스마트 스캔이 수행되는지 여부는 오라클의 V$SQL 또는 AWR 보고서에서 확인 가능합니다.
SELECT sql_id, executions, io_cell_offload_eligible_bytes, io_cell_offload_returned_bytes
FROM v$sql
WHERE sql_id = '<쿼리ID>';
- io_cell_offload_eligible_bytes : 스마트 스캔에 의해 처리된 전체 바이트 수
- io_cell_offload_returned_bytes : DB 서버로 반환된 실제 데이터 바이트 수
- 반환된 바이트가 처리된 바이트보다 현저히 적다면, 스마트 스캔이 제대로 작동하고 있다는 뜻입니다.
스마트 스캔 활용 가이드
1. Exadata 환경 설정 확인하기
• 스마트 스캔은 Exadata 환경이 적절히 구성되었을 때만 가능합니다.
• 필수 구성 요소
✔︎ ASM(Automatic Storage Management) 구성된 스토리지 환경
✔︎ 데이터 파일이 Exadata 스토리지 셀(Cells)에 위치해야 함
✔︎ DB 초기화 파라미터 설정
cell_offload_processing = TRUE -- 스마트 스캔 활성화 여부(기본값: TRUE)
✔︎ 확인 방법
SHOW PARAMETER cell_offload_processing;
2. 스마트 스캔이 가능한 쿼리 작성
• 스마트 스캔을 활용하려면 Direct Path Read(직접경로 읽기)를 유발하는 방식의 쿼리를 작성해야 합니다.
• 스마트 스캔이 자주 발생하는 상황
✔︎ Full Table Scan (인덱스를 우회하는 방식)
✔︎ Parallel Query를 사용한 병렬 처리 쿼리
✔︎ 대규모 분석 쿼리, 집계 연산(aggregation, group by), 대용량 데이터 검색 시
✔︎ 예시 쿼리 : 아래 쿼리는 명시적으로 FULL 힌트와 병렬처리를 통해 스마트 스캔을 유발합니다.
-- 병렬 힌트로 스마트 스캔 강제 유발
SELECT /*+ FULL(t) PARALLEL(t,4) */ count(*)
FROM sales_history t
WHERE sale_date BETWEEN TO_DATE('2023-01-01') AND TO_DATE('2023-12-31');
3. 인덱스 전략 조정하기
• 스마트 스캔은 대부분 인덱스 없이 Full Scan 방식으로 접근할 때 더 큰 효과가 있습니다.
• 기존 인덱스 전략을 재검토하여 필요 없는 인덱스는 줄이고, 스마트 스캔의 특성을 살릴 수 있도록 전략을 수정합니다.
• 추천 방법
✔︎ 불필요한 인덱스 제거
✔︎ 지나친 인덱스 사용은 스마트 스캔이 아닌 Index Range Scan을 유도하여 스마트 스캔 효과 감소
✔︎ 대규모 테이블은 파티셔닝(partitioning) 을 활용하여 Full Scan 성능 개선
4. Hybrid Columnar Compression(HCC) 활용
• 엑사데이터에서 제공하는 HCC 압축 기능을 이용하면 스마트 스캔의 효율성이 더 높아집니다.
• 압축을 통해 IO가 줄어들고 스마트 스캔 처리 효율이 크게 향상
• 테이블 생성 시 압축 옵션 지정 예시
CREATE TABLE sales_history_compressed (
...
)
COMPRESS FOR QUERY HIGH; -- 또는 QUERY LOW, ARCHIVE HIGH, ARCHIVE LOW 등
5. 스마트 스캔 성능 모니터링 및 튜닝
• 스마트 스캔의 동작 여부 및 성능 효과를 모니터링 가능
• 스마트 스캔 여부 확인 쿼리
SELECT sql_id,
io_cell_offload_eligible_bytes,
io_cell_offload_returned_bytes
FROM v$sql
WHERE sql_text LIKE '%sales_history%';
• 추가 튜닝 방법
✔︎ AWR(Automatic Workload Repository) 보고서 분석
✔︎ ASH로 병목 현상 식별 및 수정
✔︎ Exadata Storage Cell 레벨에서의 추가 모니터링 및 최적화 (ExaWatcher 활용)
6. 스마트 스캔 성능 극대화를 위한 권장 사항
✔︎ 병렬 처리(Parallel Processing) 적극 사용
✔︎ 병렬 쿼리(PARALLEL Hint)로 스마트 스캔 효과 극대화
✔︎ 쿼리 최적화 힌트 적극 사용 : FULL Hint, PARALLEL Hint, NO_INDEX Hint 등 필요 시 적극 활용하여 스마트 스캔 유도
✔︎ 파티셔닝된 대용량 데이터 테이블에 대해 Partition Pruning 활성화
✔︎ 데이터 접근량을 최소화하여 스마트 스캔 효율 극대화
'IT > Oracle' 카테고리의 다른 글
오라클 프로시저 상태 조회 (0) | 2025.02.25 |
---|---|
병합 조인(Cartesian Join) 비용 증가 (1) | 2025.02.24 |
오라클 19c - PDB(Pluggable Database, 플러그형 데이터베이스) (1) | 2025.02.23 |
오라클 Job 스케줄링 및 모니터링 (1) | 2025.02.23 |
오라클 힌트 조회 (2) | 2025.02.23 |