오라클® 엑사데이터(Exadata®) 시스템은 데이터베이스 성능을 향상시키는 스토리지 인덱스(storage index) 기능을 제공합니다. 스토리지 인덱스는 핵심 통계 정보를 담고 있는 메모리 기반 구조물로, 모든 행을 하나씩 읽는 대신 인덱스를 먼저 확인해 관련 데이터를 찾음으로써 디스크 I/O 작업과 쿼리 처리 속도를 크게 높여 줍니다.
스토리지 인덱스에서 반드시 기억해야 할 점은, 엑사데이터가 I/O 절감 효과를 얻으려면 해당 데이터가 셀 서버(cell server)의 리전 인덱스 메모리 구조에 미리 로드(prime)되어 있어야 한다는 것입니다. 따라서 쿼리를 처음 실행할 때는 리전 인덱스에 관련 정보가 없기 때문에 스토리지 인덱스에 의한 I/O 절감 효과를 기대하기 어렵습니다.
스토리지 인덱스의 작동 원리
스토리지 인덱스의 핵심 목표는 엑사데이터 스마트 스캔(Smart Scan) 요청을 처리하는 데 필요한 디스크 I/O량을 줄이는 것입니다. 실제 스캔된 데이터베이스 행 수를 기준으로 삼으면 스토리지 인덱스를 통해 얻은 I/O 절감 효과를 측정할 수 있습니다.
스토리지 인덱스는 다음 조건이 충족될 때 활성화됩니다.
- 다이렉트 패스 리드(direct-path read) 작업이 수행될 때
- 쿼리에 술어(predicate, 즉 WHERE 절)가 포함되어 있을 때
- 기반이 되는 ASM(Automatic Storage Management) 디스크 그룹에
cell.smart_scan_capable=TRUE속성이 설정되어 있을 때
즉, 스토리지 인덱스는 쿼리 술어가 포함된 SQL 문에 대해 엑사데이터 스마트 스캔을 보완하는 역할을 합니다. 또한 데이터가 쿼리 술어에 사용되는 열 기준으로 잘 정렬(ordered)되어 있을 때 가장 큰 성능 절감 효과를 얻을 수 있습니다.
오라클 엑사데이터 아키텍처 관점에서 본 스토리지 인덱스
설계 관점에서 스토리지 인덱스는 전통적인 오라클 B*Tree 인덱스나 기타 인덱스 유형과 확연히 다릅니다. 스토리지 인덱스는 데이터베이스 내부에 세그먼트 형태로 저장되는 물리적 구조가 아니라, 엑사데이터 스토리지 셀에 상주하는 메모리 구조입니다. 전통적인 인덱스의 목표가 테이블에서 원하는 행을 빠르게 찾도록 돕는 것이라면, 스토리지 인덱스의 목표는 셀 서비스 소프트웨어에 '요청된 데이터가 해당 행에 존재하지 않는다'고 알려 물리적인 행 읽기를 건너뛰도록 지시하는 매우 효율적인 수단을 제공하는 것입니다.
저장 영역(storage region)의 데이터가 쿼리 술어에 자주 사용되는 열 기준으로 잘 정렬되어 있다면, 스토리지 인덱스 덕분에 셀 서버(CELLSRV) 프로세스가 물리적 I/O 요청을 우회해 디스크 I/O를 절약할 수 있습니다. 이때 'cell physical IO bytes saved by storage index' 시스템 통계를 활용하면 절감된 I/O 효과를 정량적으로 측정할 수 있습니다.
반면 데이터가 잘 정렬되어 있지 않다면, 각 저장 영역이 특정 열이나 쿼리 술어에 대해 넓은 범위의 값을 포함할 가능성이 높아져 스토리지 인덱스의 효과가 제한적이거나 거의 없을 수 있습니다. 전통적인 B*Tree 인덱스와 마찬가지로, 스토리지 인덱스 역시 클러스터링(clustering)이 중요한 고려 사항입니다. 흥미로운 점은 엑사데이터의 CELLSVR 프로세스는 쿼리의 술어 값이 각 저장 영역에 대해 리전 인덱스가 추적하는 최솟값~최댓값 범위를 벗어나는 경우에만 스토리지 인덱스를 활용한다는 것입니다. 실제 해당 영역에 그 범위 안의 데이터가 존재하는지 여부와는 무관합니다.
구체적인 예를 들어 보겠습니다. 어떤 저장 영역에 테이블의 10개 행 데이터가 저장되어 있고, 이 행들의 FIRST_NAME 열에는 "john", "anto", "max", "leigh", "theo", "rachel", "lauren", "bob", "denise", "jen"이라는 값이 들어 있다고 가정합니다. 이 상태에서 FIRST_NAME="chris" 조건으로 쿼리를 실행하면, "chris"는 알파벳순으로 "anto"와 "theo" 사이에 위치하므로 기존 스토리지 인덱스는 해당 영역에 대한 접근을 배제하지 못합니다. 반면 FIRST_NAME="victor" 조건으로 쿼리를 실행하면 CELLSVR은 해당 값이 추적 범위를 벗어난다고 판단해 이 저장 영역에 대한 물리적 I/O를 우회합니다.
요약하면, 스토리지 인덱스는 (I/O 요청 발행을 허용하는 측면에서) 거짓 양성(false positive)을 반환할 수는 있지만, 거짓 음성(false negative)은 절대 반환하지 않습니다.
I/O 우회는 곧 물리적 읽기를 건너뛴다는 의미이며, 불필요한 물리적 읽기를 생략하면 그만큼 시간을 절약할 수 있습니다. 다음 이미지는 스토리지 인덱스의 작동 방식을 논리적으로 표현한 것입니다.
이미지 출처: John Clarke 저 『Oracle Exadata Recipes』
결론
엑사데이터는 애플리케이션 사용 패턴에 따라 시간 기반(time-based) 스토리지 인덱스를 자동으로 관리합니다. 데이터를 정렬해 스토리지 인덱스 활용을 유도하거나 애플리케이션의 쿼리 술어를 변경하는 경우를 제외하면, 엑사데이터 데이터베이스 머신 관리자(DMA)가 스토리지 인덱스의 동작에 직접 개입할 방법은 없습니다.
다음과 같은 상황에서 스토리지 인덱스 활용을 고려해 보세요.
- 다이렉트 패스 리드 작업 수행 시
- 스마트 스캔(Smart Scan) 사용 시
- 쿼리에 술어(WHERE 절)가 포함된 경우
스토리지 인덱스는 오라클 엑사데이터 제품군에서 가장 지능적인 기능으로, 데이터를 가장 빠르고 최적화된 방식으로 검색할 수 있도록 지원합니다.
궁금한 점이나 의견이 있다면 피드백 탭을 통해 남겨 주세요.
전문가의 관리·운영 서비스로 환경 최적화하기
Rackspace의 애플리케이션 서비스 (RAS) 전문가들은 폭넓은 애플리케이션 포트폴리오 전반에서 다음과 같은 전문 및 관리형 서비스를 제공합니다.
- 이커머스 및 디지털 경험 플랫폼
- 엔터프라이즈 리소스 플래닝(ERP)
- 비즈니스 인텔리전스(BI)
- Salesforce 고객 관계 관리(CRM)
- 데이터베이스
- 이메일 호스팅 및 생산성 솔루션
Rackspace가 제공하는 차별점은 다음과 같습니다.
- 편향 없는 전문성: 즉각적인 가치를 창출하는 역량에 집중해 현대화 여정을 단순화하고 안내합니다.
- 패널티컬 익스피리언스(Fanatical Experience)™: "프로세스가 먼저, 기술은 그다음(Process first. Technology second.®)" 철학과 전담 기술 지원을 결합해 종합적인 솔루션을 제공합니다.
- 탁월한 포트폴리오: 풍부한 클라우드 경험을 바탕으로 올바른 클라우드에 올바른 기술을 선택·배포할 수 있도록 돕습니다.
- 애자일한 서비스 제공: 고객의 여정 어느 단계에서든 함께하며, 우리의 성공을 고객의 성공과 맞춥니다.
지금 바로 채팅으로 문의해 시작해 보세요.