Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

Oracle TimesTen 완벽 가이드: 인메모리 데이터베이스의 이해와 활용

TimesTen은 Oracle 데이터베이스의 성능을 획기적으로 끌어올릴 수 있는 Oracle 제품입니다.

TimesTen은 메모리 최적화를 넘어 높은 처리량(throughput)과 내구성을 보장하며, 확장성까지 갖추고 있습니다. 특히 성능에 민감한 애플리케이션에서 최소한의 응답 시간을 제공합니다. 기존의 관계형 데이터베이스와 달리, TimesTen은 전체 데이터가 RAM에 상주하는 방식으로 높은 효율성을 실현합니다.

TimesTen의 역사

  • 1994년 HP Labs에서 개발 시작
  • HP의 OpenCall 솔루션에 탑재
  • 1996년 벤처캐피탈 지원 스타트업으로 분사
  • 수천 곳의 프로덕션 고객 확보
  • 2005년 Oracle Corporation에 인수
  • 2005년 이후 주요 릴리스: 6.0, 7.0, 11gR2, 18c Release 1

Oracle TimesTen 개요

Oracle TimesTen In-Memory Database는 영속성과 고가용성을 갖춘 인메모리 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 캘리포니아 팰로앨토의 HP 연구소에서 처음 설계·구현되었으며, 1996년 독립적인 스타트업으로 분사한 후 2005년 Oracle Corporation에 인수되었습니다.

TimesTen 데이터베이스는 높은 영속성과 가용성을 자랑합니다. 인메모리 데이터베이스로서 매우 낮은 지연 시간(latency)과 높은 처리량을 제공하며, JDBC, ODBC 같은 표준 관계형 데이터베이스 API도 지원합니다.

TimesTen은 독립형 인메모리 데이터베이스로 사용할 수 있을 뿐만 아니라, Oracle Database를 포함한 다른 관계형 데이터베이스의 캐시로도 활용할 수 있습니다. 금융 거래나 통신 과금 시스템처럼 초대용량 OLTP 애플리케이션에서 널리 사용됩니다.

TimesTen의 디스크 저장 방식

각 TimesTen 데이터 저장소(data store)는 정확히 두 개의 체크포인트 파일을 가집니다. 기본적으로 10분마다 체크포인트가 호출되며, 더티(dirty) 메모리 페이지를 첫 번째 체크포인트 파일에 기록하고, 다음 체크포인트는 다른 파일을 사용합니다. 쓰기 트랜잭션은 먼저 인메모리 버퍼에 저장된 후 로그 파일로 플러시(flush)됩니다.

두 가지 트랜잭션 로깅 방식

1. 버퍼드 로깅(Buffered Logging)

(속도: 빠름 / 내구성: 양호) 트랜잭션이 먼저 인메모리 로그 버퍼에 저장됩니다. 버퍼가 가득 차면 백그라운드에서 디스크로 플러시됩니다. 처리 속도가 매우 빠르며(초당 5,000 TPS 이상), 버퍼가 플러시되기 전에 장애가 발생하면 일부 트랜잭션이 손실될 가능성이 있습니다. 로그 버퍼 크기는 사용자가 직접 설정할 수 있습니다.

2. 듀러블 커밋(Durable Commit)

(속도: 느림 / 내구성: 우수) 모든 트랜잭션이 즉시 디스크로 플러시됩니다. 속도는 디스크 장치의 성능에 좌우되지만, 모든 트랜잭션이 디스크에 저장되므로 내구성이 매우 뛰어납니다.

ttDurableCommit()이라는 SQL 함수를 호출하면 언제든지 버퍼드 로깅에서 듀러블 커밋으로 전환할 수 있습니다. 실행 중에 내구성과 성능 간의 균형을 유연하게 조절할 수 있다는 점은 기존 RDBMS에서는 불가능한 강력한 기능입니다.

응답 시간 대폭 개선: In-Memory Database Cache + Oracle Database

7가지 트랜잭션 유형별로 측정한 평균 트랜잭션 응답 시간을 비교해 보면, 데이터를 TimesTen IMDB에 캐싱했을 때 애플리케이션 데이터베이스 작업에서 놀라운 개선 효과를 확인할 수 있습니다.

Oracle 데이터베이스의 응답 시간 상당 부분은 클라이언트-서버 연결과 네트워크 왕복(roundtrip)에서 발생하는데, 애플리케이션이 메모리에 있는 TimesTen 데이터베이스에 직접 연결하면 이러한 오버헤드가 사라집니다. 물론 애플리케이션은 TCP/IP 클라이언트/서버 방식으로도 TimesTen에 접속할 수 있습니다.

TimesTen 데이터베이스 생성하기

DSN 정의

  • DataStore 속성: 데이터베이스 체크포인트 파일의 디렉터리를 지정합니다.
    예: DataStore=/data/TTDEMO/TTDEMO-DSN1/TTDEMO-DSN1
  • LogDir 속성: 트랜잭션 로그 파일의 디렉터리를 지정합니다. 트랜잭션 로그에는 각 데이터베이스 업데이트, 커밋, 롤백에 대한 로그 레코드가 포함됩니다.
  • DatabaseCharacterSet 속성: 데이터가 저장되는 문자 집합(character set)을 지정합니다.

데이터베이스 메모리 영역

TimesTen 데이터베이스는 논리적으로 두 개의 별도 메모리 영역으로 나뉩니다.

  • 영구 영역(Permanent Region): PermSize DSN 속성으로 할당 크기를 설정합니다. 테이블, 인덱스 등 영구적인 데이터베이스 요소를 저장하며, 체크포인트 작업 시 디스크에 기록됩니다.
  • 임시 영역(Temporary Region): TempSize DSN 속성으로 할당 크기를 설정합니다. 임시 테이블, 저장된 결과 집합 등 문장 실행 시 생성되는 임시 데이터를 저장합니다.

데이터베이스 생성 및 접속

인스턴스 관리자가 데이터베이스에 접속하면 데이터베이스가 자동으로 생성됩니다.

$ttisql <DSN 이름>

ttisql 유틸리티는 서버 DSN에 직접 연결하고, ttIsqlCS 유틸리티는 TimesTen 클라이언트 DSN에 연결합니다.

$ttisql connStr "DSN=TTDEMO-DSN1;UID=timesten;pwd=timesten"

RAM 정책(RAM Policy)

RAM 정책은 데이터베이스가 언제 메모리에 적재되고 해제되는지 결정합니다.

  • inUse: 사용 중일 때만 메모리에 상주(기본 정책)
  • always: 항상 메모리에 상주
  • manual: 수동으로 적재/해제

In-Memory Database Cache

애플리케이션 계층에서 Oracle 데이터베이스 테이블 캐싱

  1. 개별 테이블 및 관련 테이블 캐싱
  2. 전체 또는 일부 행과 열만 선택하여 캐싱

읽기 전용 및 업데이트 가능한 캐시 데이터베이스

  1. 일반 SQL 데이터베이스 테이블처럼 캐시된 테이블에 접근
  2. 조인/검색, 삽입/업데이트/삭제 지원

자동 데이터 동기화

  1. TimesTen → Oracle
  2. Oracle → TimesTen

Oracle IMDB Cache

캐시 그룹(Cache Group)이란? Oracle Database의 테이블에 대응하는 캐시 테이블들의 집합으로, TimesTen 데이터베이스 안에 생성됩니다.

읽기 전용 캐시 그룹(Read-Only Cache Group): 읽기 작업은 TimesTen에서 수행되며, 쓰기 작업은 Oracle로 전달(pass-through)된 후 자동으로 TimesTen에 갱신(refresh)됩니다.

Oracle의 Cache Connect 기능을 사용하면 Oracle 데이터베이스의 일부를 TimesTen에 캐싱하여 자주 접근하는 데이터에 대해 더 나은 응답 시간과 처리량을 제공할 수 있습니다.

전체 테이블, 특정 행의 부분 집합, 또는 특정 열의 부분 집합을 캐싱할 수 있습니다. 캐시는 읽기 전용 또는 업데이트 가능 형태로 구성할 수 있습니다. TimesTen 데이터베이스 내에서 데이터가 수정되면 동기식 라이트 스루(synchronous write-through) 또는 비동기식 라이트 스루(asynchronous write-through) 방식으로 Oracle 데이터베이스에 변경 사항이 전파됩니다. 하나의 Oracle DB에서 여러 캐시 인스턴스를 운영할 수 있으며, 각 인스턴스는 서로 다른 캐시 내용을 가질 수 있습니다.

IMDB Cache 관리 및 모범 사례

  • 구현 문서에 따라 Oracle과 TimesTen 데이터베이스 양쪽에서 캐시를 한 번 설정합니다.
  • 캐시 에이전트 재시작 정책을 설정합니다: Manual, always, norestart
  • AUTOREFRESH 간격을 지정합니다.
    • 캐시 그룹에 포함된 Oracle 테이블에 INSERT, UPDATE, DELETE 트리거가 생성됩니다.
    • 트리거는 Oracle에 TimesTen이 유지하는 로깅 테이블에 작은 행을 삽입합니다.
    • TimesTen 에이전트가 이 테이블을 조회하여 지정된 간격으로 데이터를 갱신합니다.
  • Oracle에서 데이터 정의 변경 시 LOAD, UNLOAD, FLUSH, REFRESH CACHE GROUPS 작업이 필요합니다.

결론

TimesTen은 SQL 작업에 대해 매우 낮은 지연 시간과 극도로 높은 처리량을 제공하는 인메모리 관계형 데이터베이스로, 표준 API를 통해 표준적인 관계형 데이터베이스 기능을 제공합니다. 독립형 데이터베이스로 배포하거나 Oracle Database의 고성능 관계형 캐시로 활용할 수 있습니다.

궁금한 점이나 의견이 있다면 피드백 탭을 이용해 남겨주세요. 언제든지 대화를 시작할 수 있습니다.