이 글에서는 Oracle Exadata 스마트 플래시 캐시(Smart Flash Cache) 기능과 그 아키텍처를 살펴보고, 특히 쓰기 성능을 극대화하는 Write-Back 플래시 캐시 기능까지 자세히 알아봅니다.
소개
Exadata 스마트 플래시 캐시는 다음과 같은 두 가지 핵심 이점을 제공합니다.
- 자주 액세스되는 데이터베이스 객체를 플래시에 적재(stage)하여 빠른 읽기 성능을 확보할 수 있습니다.
- Exadata 스마트 플래시 로깅(Smart Flash Logging)은 데이터베이스 운영에서 가장 중요한 로깅 작업의 속도를 크게 향상시킵니다.
Write-Back 플래시 캐시란?
플래시 캐시에 데이터를 쓰는 속도가 하드 디스크에 쓰는 속도보다 훨씬 빠르기 때문에, Write-Back 플래시 캐시는 쓰기 집약적인 워크로드 성능 개선에 매우 효과적입니다. 대량의 배치 작업을 데이터베이스에 수행할 때 특히 유용합니다. Oracle의 공식 자료에 따르면, 애플리케이션 특성에 따라 디스크 대비 최대 20배 빠른 쓰기 성능(초당 입출력 작업 수, IOPS 기준)과 10배 더 많은 쓰기 IOPS를 달성할 수 있다고 합니다.
캐시 모드는 스토리지 셀(cell)의 flashCacheMode 속성으로 결정되며, 설정 가능한 값은 "WriteThrough"와 "WriteBack" 두 가지입니다.
현재 캐시 모드를 확인하려면 cellcli 도구에서 list cell 명령을 사용합니다.
CELLCLI> list cell attributes flashcachemode
▲ list cell 명령 실행 결과 예시
더 자세한 정보를 확인하려면 list cell detail 명령을 사용합니다.
CELLCLI> list cell detail
▲ list cell detail 명령 실행 결과 예시
Write-Back 플래시 캐시의 이점
Write-Back 플래시 캐시는 플래시 캐시에의 쓰기가 하드 디스크 쓰기보다 훨씬 빠르기 때문에 쓰기 집약적인 작업을 크게 개선합니다. 또한 모든 워크로드에 대해 읽기와 쓰기를 투명하게 가속화합니다. 온라인 트랜잭션 처리(OLTP) 환경에서는 랜덤 읽기/쓰기가 빨라지고, 데이터 웨어하우스(DW) 환경에서는 순차 스마트 스캔(smart scan) 속도가 향상됩니다.
아울러 Write-Back 플래시 캐시는 데이터와 redo 로그가 같은 디스크를 공유할 때 redo 로그 쓰기 지연 시간(latency)도 줄여줍니다. cellsrv restart 시에도 플래시 캐시의 데이터는 복구 가능하므로 안전합니다.
다음 두 가지 증상 중 하나라도 관찰된다면 Write-Back 플래시 캐시 도입을 고려해 보는 것이 좋습니다.
- "free buffer waits" 대기 시간이 현저히 길어지는 경우
- AWR(Automated Workload Repository) 리포트에서 쓰기 병목으로 인한 높은 I/O 시간이 확인되는 경우
아래 표는 다양한 Exadata X4 구성에서 Exadata 스마트 플래시 캐시가 데이터베이스 수준에서 제공하는 성능을 보여줍니다.
▲ Exadata 구성별 성능 비교표
출처: https://www.oracle.com/technetwork/database/exadata/exadata-smart-flash-cache-366203.pdf, 7페이지
지능형 캐싱(Intelligent Caching)
스마트 플래시 캐시는 단순한 캐시가 아니라 데이터베이스의 동작 방식을 이해하는 지능형 캐싱 기능을 제공합니다.
- 데이터베이스 I/O의 유형을 구분하여 판단합니다.
- 자주 액세스되는 데이터 블록과 인덱스 블록을 우선적으로 캐싱합니다.
- 컨트롤 파일(controlfile)의 읽기와 쓰기를 캐싱합니다.
- 파일 헤더(file header)의 읽기와 쓰기를 캐싱합니다.
- 데이터베이스 관리자(DBA)가 캐싱 우선순위에 영향을 줄 수 있습니다.
다만 아쉽게도 캐시 내부 내용을 손쉽게 모니터링할 방법은 없습니다. Oracle은 cellcli 도구에 list flashcachecontent 명령을 제공하지만, 요약(summation) 옵션이 없고 객체 번호만 표시하기 때문에 실질적인 분석에는 한계가 있습니다.
Exadata 스마트 플래시 캐시의 이해
Exadata 스마트 플래시 캐시는 셀(스토리지) 서버에 탑재된 캐시로, redo 데이터를 디스크에 안전하게 기록할 때까지 임시 보관하는 역할을 합니다. Exadata 스토리지 서버는 상당한 용량의 플래시 스토리지를 기본 제공하며, 그중 일부는 데이터베이스 로깅에 할당되고 나머지는 사용자 데이터 캐싱에 사용됩니다.
풀랙(full rack) Exadata 서버 기준으로 5TB의 플래시 캐시는 상당한 양의 데이터를 저장할 수 있습니다.
플래시 캐시는 최대 효율을 위해 자동으로 관리될 수 있으며, 다음과 같은 활용 사례가 있습니다.
- 사용자는 선택적으로 힌트(hint)를 제공하여 캐싱 우선순위에 영향을 줄 수 있습니다.
- 관리자는 특정 데이터베이스에 대해 스마트 플래시 캐시를 비활성화할 수 있습니다.
Exadata 스토리지 서버 소프트웨어
Exadata 스토리지 서버 소프트웨어의 두 가지 핵심 기능이 Exadata 플래시 하드웨어를 활용하여 Oracle Database 배포에 최적화된 초고속 시스템을 만들어 줍니다. 첫째, Exadata 스마트 플래시 캐시는 활성 데이터베이스 객체를 플래시에 적재할 수 있게 해줍니다. 둘째, Exadata 스마트 플래시 로깅은 데이터베이스 로깅이라는 핵심 기능을 가속화합니다.
Oracle Database 배포에는 미션 크리티컬한 가용성과 복원력(resilience)이 필수적입니다. Exadata 스토리지 서버 소프트웨어를 Oracle Database와 함께 사용하면 바로 이러한 복원력을 확보할 수 있습니다.
FlashDisk 기반 그리드 디스크 생성
플래시 캐시 용량 전부를 그리드 디스크(grid disk)로 사용해서는 안 됩니다. 플래시 캐시를 생성할 때 size 파라미터를 사용해 일부 공간을 그리드 디스크용으로 남겨두는 것이 좋습니다. 다음은 cellcli 도구의 create flashcache 명령 예시입니다.
CellCLI> create flashcache all size=300g;
이후 플래시 디스크의 남은 여유 공간으로 그리드 디스크를 생성합니다.
CellCLI> create griddisk all flashdisk prefix='RAMDISK';
생성된 그리드 디스크의 세부 정보는 list griddisk 명령으로 확인할 수 있습니다.
CellCLI> list griddisk attributes name, diskType, size where disktype='FlashDisk';
이러한 플래시 캐시 구성의 가장 큰 장점은 시스템을 중단하지 않고, I/O 요청을 처리하는 운영 상태에서도 온라인으로 수행할 수 있다는 점입니다.
Write-Back 플래시 캐시 활성화 방법
Write-Back 플래시 캐시 기능을 활성화하는 방법은 두 가지입니다.
- 롤링(Rolling) 방식: RDBMS 및 ASM 인스턴스가 가동 중인 상태에서 한 번에 하나의 셀 서버씩 순차적으로 Write-Back 플래시 캐시를 활성화합니다. 무중단 운영이 필요한 환경에 적합합니다.
- 논롤링(Non-Rolling) 방식: RDBMS 및 ASM 인스턴스를 중단한 상태에서 Write-Back 플래시 캐시를 활성화합니다.
활성화 작업 전에 먼저 그리드 디스크의 "asmdeactivationoutcome"과 "asmmodestatus" 속성을 점검해야 합니다. 모든 셀의 모든 그리드 디스크가 각각 "Yes"와 "ONLINE" 상태인지, 플래시 캐시 전체가 정상(normal) 상태인지, degraded 또는 critical 상태의 플래시 디스크가 없는지 반드시 확인하십시오.
# dcli -g cell_group -l root cellcli -e list griddisk attributes asmdeactivationoutcome, asmmodestatus
셀 목록과 현재 플래시 캐시 상태는 다음 명령으로 확인합니다.
# dcli -g cell_group -l root cellcli -e list flashcache detail
exadata01cell01: WriteThrough
exadata01cell02: WriteThrough
exadata01cell03: WriteThrough
Write-Back 플래시 캐시를 활성화하려면 각 셀에서 다음 명령들을 순서대로 실행합니다.
-> 플래시 캐시 삭제
CellCLI> drop flashcache;
Flash cache exadata01cell01 successfully dropped.
-> 셀 서비스 종료
CellCLI> alter cell shutdown services cellsrv;
Stopping CELLSRV services... The SHUTDOWN of CELLSRV services was successful.
-> 셀 플래시 캐시 모드를 Write Back으로 변경
CellCLI> alter cell flashCacheMode=writeback;
Cell cel04 successfully altered
-> 셀 서비스 재시작
CellCLI> alter cell startup services cellsrv;
Starting CELLSRV services...
The STARTUP of CELLSRV services was successful.
-> 플래시 캐시 재생성
CellCLI> create flashcache all;
Flash cache cel04_FLASHCACHE successfully created
-> 전체 셀 서버 상태 확인
# dcli -g cell_group -l root "cellcli -e list cell attributes flashcachemode"
exadata01cell01: WriteBack
exadata01cell02: WriteBack
exadata01cell03: WriteBack
결론
Write-Back 플래시 캐시 기능을 활용하면 Exadata 플래시 하드웨어의 성능을 극대화하여 Oracle Database 배포에 최적화된 더 빠른 데이터베이스 머신을 만들 수 있습니다. Oracle Exadata 데이터베이스 머신 내부의 플래시 스토리지는 기본적으로 전부 플래시 캐시로 사용되며, 이를 통해 데이터베이스 버퍼 캐시의 확장 영역처럼 효과적으로 동작하고 매우 높은 IOPS를 포함한 빠른 액세스를 제공합니다. 특히 OLTP 환경에서 이러한 특성은 매우 중요합니다. 또한 필요하다면 플래시 스토리지의 일부를 ASM 디스크 그룹으로 구성할 수도 있으며, 해당 디스크 그룹에 저장된 파일은 캐싱 과정 없이 플래시 스토리지에 영구적으로 상주하게 됩니다.
이 주제에 대해 궁금한 점이 있다면 아래 댓글로 자유롭게 문의해 주세요.