Altibase
- Hibrid Database로 테이블을 생성하는 테이블스페이스에 따라 메모리DB와 DiskDB를 제공한다.(테이블단위)
- Disk Database의 경우 Oracle과 유사하게 지원되며, Memory Database의 경우 테이블을 모두 Memory에 적재하기때문에 Disk I/O가 발생하지 않고 빠른 속도로 접근 및 실행이 가능하다.
- 알티베이스 기동시,
- 메모리 스페이스의 모든 테이블은 메모리상에 올려 디스크 I/O 없이 사용가능
- 디스크 스페이스 테이블의 경우 일정 크기의 버퍼가 할당되고 필요(질의)에 따라 일부 데이터들을 버퍼에 로딩하여 접근(Page단위, 오라클의 block에 대응되는 개념)
- 메모리 테이블 스페이스의 질의 등의 작업 수행시 메모리영역에서 데이터 변경이 발생하며, 영속성 유지 및 복구시간 단축을 위해 메모리 데이터에 대한 백업본을 디스크에 저장(Checkpoint)하는 과정이 추가로 발생한다.
- BCB(Buffer Control Block)의 Status
- Free : 버퍼에 데이터가 적재되지 않은 상태
- Clean : Free 상태에서 데이터 적재 후 변경되지 않은 상태 (최초 1회만 적재된 상태)
Checkpoint 혹은 Flush가 발생하여 변경사항이 Disk에 반영된 후의 상태 (Disk와 동일한 상태) - Dirty : Clean 혹은 Dirty 상태에서 데이터변경이 발생한 상태(2회이상 데이터가 적재된 상태)
- Altibase의 Buffer List 처리구조 (p41)
- 버퍼가 필요한 경우 Prepare List에서 Clean(Disk와 동기화), Free(데이터 미적재) 상태의 버퍼를 찾는다.
- 찾은 버퍼에 Disk Page에 대한 내용을 적재하고 LRU List Cold 영역으로 이동시킨다.
만약 가용버퍼를 찾지 못한경우 LRU List Cold영역의 old 영역부터 가용버퍼(Clean, Free)를 찾는다. - Prepare List, LRU List에서 가용버퍼를 찾는과정 중 Dirty 상태의 버퍼를 만나면 해당 버퍼를 Flush List로 옮기고 나중에 Disk에 반영한다.
- Redo Log 처리 Process
- Redo Log Buffer : 데이터베이스 데이터의 변경에 대한 정보를 저장하는 공간
- 설정 파라미터
- PREPARE_LOG_FILE_COUNT : 미리 만들어놓을 Log File의 수.
- CHECK_POINT_MAX_Log file : 해당 값보다 Log file의 수가 많아지면 Checkpoint를 수행.
- LOG_BUFFER_TYPE : 1인경우 트랜잭션 로그를 Redo Log Buffer에 저장. 0인경우 OS 커널에 기록 - Log File Manager 쓰레드가 감시하면서 PREPARE_LOG_FILE_COUNT 의 수만큼 사용가능한 Log file을 만든다.
일정 시점마다 Checkpoint가 발생하면서 Log File의 내용을 Disk로 옮긴 후 Log File을 삭제한다. CHECK_POINT_MAX_Log file의 수보다 Log file의 수가 많은경우 자동으로 Checkpoint를 발생시키며 저장된 Log File을 삭제한다. - 영속성 유지를 위한 Process
LOG_BUFFER_TYPE이 1인경우 Redo Log Buffer에 저장하여 메모리에만 반영후 응답하므로 속도향상을 꾀할 수 있다. 그러나 알티베이스 비정상종료시 Disk와의 동기화를 보장하기 어려우므로 영속성 유지가 어렵다.
LOG_BUFFER_TYPE을 0으로 설정하는 경우 트랜잭션로그를 OS커널에 기록하므로 알티베이스가 비정상 종료되더라도 OS만 살아있다면 Disk에 트랜잭션 로그가 반영되므로 영속성 유지가 보다 뛰어나다. - Private Memory Area 최대값을 제한하는 이유
- 알티베이스에서는 사용가능한 메모리 영역의 크기제한이 없으나 무한정 가용범위내에서 사용하다보면 무한히 증가되어 성능에 악영향을 미치므로 프로퍼티를 통해 최대 사용가능한 값을 지정할 수 있다.
- Max값을 넘어가게 되는경우, 해당 Query만 실패한다.(크기를 초과했습니다. 에러 발생)
- 테이블 스페이스
- 메모리 테이블 스페이스
- 휘발성 테이블 스페이스 : DB가 구동중인 동안에만 의미있는 데이터를 위한 공간으로 Redo Log 작성, Checkpoint 과정을 수행하지 않는다. 메타정보를 저장하는 작업에 대해서만 Disk I/O가 발생하며, 그 외의 경우에는 발생하지 않는다.
- 디스크 테이블 스페이스 : Oracle과 비슷한 방식으로 데이터를 저장하고 동작한다.
- 쓰레드 구조(p66)
- Dispatcher Thread (Oracle의 listener역할) : 클라이언트가 접속을 요청하면 기 생성된 Service Thread 중 하나를 할당.
- Service Thread (Server Process) : 할당받은 하나 이상의 클라이언트의 요청을 처리.
DB 구동시 default로 CPU의 갯수만큼 구동(프로퍼티로 조정가능) - Load Balancer Thread : Service Thread에 고르게 일을 재분배하거나 Idle한 Thread를 정리한다.
- MULTIPLEXING_THREAD_COUNT : Idle상태시 설정된 값 만큼으로 thread를 정리 - Session Manager Thread : 클라이언트의 상황을 감지하여 비정상적으로 클라이언트의 연결이 끊어지지 않았는지 체크
- 메모리 상태정보 조회
- V$MEMSTAT : 현재 메모리 공간을 얼마나 차지하는지 알 수 있는 성능 뷰
- 현재 상태(버퍼의 hit율) 등의 값을 조회할 수 있는 뷰도 존재함. (V$SESSION_WAIT, V$SYSTEM_EVENT)
- SQL Plan Cache, Buffer Pool의 최적 크기의 예상치를 보여주는 뷰는 존재하지 않음.
- MVCC (Multi Version Concurrency Control) (p89)
- Out-place MVCC (메모리 스페이스)
- 데이터가 변경될 경우 변경된 최신의 데이터를 새로운 곳에 저장하고 이를 연결하는 방식
- 장점 : 서로다른 트랜잭션이 같은 컬럼을 조회할 경우, Versioning에 따른 CR Copy 비용이 들지 않아 성능이 훨씬 빠름.
- 단점 : Versioning 정보 저장을 위해 계속 메모리에 생성하므로 메모리 사용량이 증가함.
메모리 사용을 적정하게 하기 위해 Versioning을 유지할 필요 없는 공간(commit, rollback 후)은 Memory Ager Thread
가 자동으로 삭제하여 공간을 재사용 할 수 있도록 함. (트랜잭션이 오래 지속되는 경우는 정리되지 않으므로 주의!) - In-place MVCC (디스크 스페이스)
- 데이터가 변경될 경우 변경된 최신의 데이터를 원래 위치에 덮어쓰는 방식
Oracle과 Altibase 비교
Oracle |
Altibase |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[부록] Oracle to Altibase 마이그레이션 (p159~)
- 스키마 마이그레이션
- 변환시 고려사항
- ADD 구문의 괄호 제거
- 2개 이상을 하나의 질의문으로 추가 불가. (질의문 분리해서 수행)
- 데이터 마이그레이션
- Oracle에서 데이터 내려받기
- 데이터와 구분자의 조합으로 이루어진 형태로 내려받기 수행(Altibase HDB가 인식할 수 있는 형태 - Altibase HDB로 데이터 올리기 (iLoader)
- 참고 : http://atc.altibase.com/sub09/551b/html/iLoader/index.html - 테이블의 From-File을 생성
> iloader -s 127.0.0.1 -u sys -p manager -port 27584 formout -T dountries -f countries.fmt - 오라클에서 내려받은 데이터파일 로딩
> iloader -s 127.0.0.1 -u sys -p manager -port 27584 in -f countries.fmt -d countries.dat -t "^C-c^" -r R-r%n -log a.log -bad a. - 프로그램 마이그레이션
- OCI 프로그램 변환(p176~183)
- Embedded SQL 변환(p184~201)
- Java 프로그램의 변환 (p202~217)
- Procedure 변환 (p218~221)
Oracle과 Altibase의 Java Program 차이점 비교(p217)
차이항목 |
Oracle |
Altibase |
설명 |
jdbc driver |
ojdbc5.jar |
Altibase.jar |
오라클은 jdk 버전에 따라 사용하는 jdbc드라이버가 다르나 알티베이스는 jdk버전에 상관없이 동일한 driver 사용 |
jcbd url 지정 |
String sURL= |
String sURL= |
오라클은 @IP:포트번호:SID명을 사용 알티베이스는 //IP:포트번호/DB명 을 사용 |
driver 클래스명 |
Class.forName |
Class.forName |
|
Oracle과 Altibase의 Procedure차이점 비교(p221)
차이항목 | Oracle | Altibase | 설명 |
입력 | CREATE OR REPLACE PROCEDURE | CREATE OR REPLACE PROCEDURE | 오라클은 프로시져의 입력인자 타입이 VARCHAR2와 같이 length 없이 사용될 경우 32KB까지 사용가능. 알티베이스는 프로시져 입력 인자의 length를 반드시 선언해야한다. |
화면출력 | DBMS_OUTPUT.PUT_LINE | println('========') | 오라클은 DBMS_OUTPUT 패키지의 PUT_LINE 함수를 사용 알티베이스는 패키지를 지원하지 않으며 출력함수로 println을 사용 |
'기타' 카테고리의 다른 글
암호화, 해시 그리고 인코딩 (0) | 2015.07.28 |
---|---|
[도서] 가장 쉬운 데이터베이스 설계 책 (0) | 2014.11.25 |