본문 바로가기

IT/Oracle

오라클 - 스마트 스캔

300x250

오라클 엑사데이터의 스마트 스캔(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 활성화
   ✔︎ 데이터 접근량을 최소화하여 스마트 스캔 효율 극대화

300x250