1. 개요

지난 번에 Exa의 간단한 역사와 소개에 대한 내용을 정리한 바 있다. 이번에는 DB 서버와 스토리지 서버 사이의 I/O 개선을 위한 좀 더 디테일한 내용을 정리해보고자 한다.


2. Infiniband

Infiniband는 DB 서버와 스토리지 서버 사이에 존재한다. 대역폭이 약 초당 40Gb 정도 되는데 기존 대비 훨씬 큰 처리량이다. DB 서버와 스토리지 서버 사이에도 Infiniband로 연결하는 스위치가 존재하지만 하나 이상의 Rack으로 구성 시 Rack끼리 연결 시에도 Infiniband로 연결하는 스위치가 존재한다.

사실 Infiniband는 오라클에 의한 새로운 개념이 아니다. 컴팩/IBM/HP의 Future I/O, 인텔/MS/Sun의 Next Generation I/O 이 두 기술이 1999년 합쳐져서 만들어졌다. Exa 이외에도 많은 클라우드 컴퓨터와 수퍼 컴퓨터들이 Infiniband를 사용하고 있다.

이더넷과는 다소 차이가 있다. 계층적 스위치 방식이 아니고 스위치 패브릭 방식의 아키텍처이다. 모든 전송은 채널 어댑터에서 시작하거나 끝난다. 각 프로세서는 HCA(호스트 채널 어댑터)를 가지고 있고, 각 주변 장치는 TCA(타켓 채널 어댑터)를 가지고 있다.

Infiniband와 경쟁하는 것은 기가 비트 이너넷이다. 다소 예전 자료이긴 하지만 2012년 기준으로 세계 500 수퍼 컴퓨터(Top 500)에서 Infiniband는 226개, 기가 비트 이더넷은 188개 사용되었다.


3. Flash Disk 

과거에는 디스크가 느려서 Random I/O의 병목이 발생했다. Exa는 스토리지 서버 내에 Flash Cache라는 Flash Disk 기반 캐시가 존재한다. 속도가 향상됐다.

테이블과 인덱스가 Flash Cache에 저장되어 있다면 Disk I/O 없이 Cache 내 값을 사용한다. X3 부터는 Write-back 옵션이 추가되었는데 이는 DML을 Cache 할 수 있는 것이다.

  • Smart Caching : Flash에 Cache 하는 것
  • Smart Flash Cache : Flash에서 직접 조회

4. MPP(Massively Parallel Processing)

  • 스토리지를 Parallel Storage Grid로 구성한다. 즉 여러 Cell 서버가 되는 것이다.
  • 위의 Cell 서버에 데이터를 분할하여 저장하고 처리한다.

장점 : 스토리지의 병목 현상 해결, Shared Nothing 형태로 관리할 수 있어 H/W의 Scale-out를 구현할 수 있다.

  • SMP -> 모든 CPU가 동일한 메모리, 디스크, I/O 공유
  • MPP -> 각기 다른 CPU, 디스크, I/O를 사용

5. Offloading

예전 시대에 서버는 DB 서버 + 스토리지 서버를 의미했다. 스토리지는 단지 데이터의 저장 역할을 담당할 뿐이었다. 그리고 DB의 성능은 I/O에 좌우되었다.

현재는? Exa의 스토리지(서버)는 자신의 CPU와 메모리를 가지고 SQL 처리를 수행할 수 있게 되었다.

Offloading은 기존 DB에서 처리한 것을 스토리지 레이어로 offload하여 처리한다는 개념이다. 말이 좀 어려운데 다시 말하자면 DB 서버와 스토리지 서버 간 방대한 데이터를 이동하는데 소모되는 비용을 줄이는데 목표가 있다.

  • Predicate filtering
  • Coumn projection

이 offloading 기법을 통해 최소한의 결과만 DB 서버로 넘어간다. 따라서 전송량이 줄어든다.

이를 구현하기 위한 기능들은 Smart Scan, Simple Join 등을 포함하여 여러가지가 있다.


6. Smart Scan

그러면 Smart Scan에 대해서 좀 더 알아보자.

alter session set cell_offload_processing=true;

Smart Scan은 위에서 말한 Predicate filtering, Column projection, 그리고 Storage index에 의해 구현된다고 할 수 있다.

1. Predicate filtering

  • where 절이 있어야 함
  • 필요한 레코드만 반환하는  Exa의 기능

2. Column projection 

  • 필요한 컬럼만 반환 -> DB 서버와 스토리지 서버 사이 데이터량을 최소화한다.
  • v$sql 뷰 내에는 다음과 같은 컬럼을 가지고 있다.
    1) IO_CELL_OFFLOAD_ELIGIBLE_BYTES : 절감 예상 데이터량 정의
    2) I
    O_INTERCONNECT_BYTES : 스토리지 서버에서 실제 반환한 데이터량

 3. Storage index

  • where 절이 있어야 함
  • Storage index의 목적은 DB 서버로 전송될 데이터량을 줄이는 것이 아니라, 스토리지 서버 자체에서 데이터를 읽는 시간을 줄이기 위함이다.
  • 기존 인덱스 : 읽어야 할 블록을 찾는다.
    Storage Index : 읽지 않아도 될 블록을 제거한다.