제1장 Tibero 소개

내용 목차

1.1. 개요
1.2. 주요 기능
1.3. 데이터베이스로서의 기본 기능
1.4. Row level locking
1.5. 프로세스 구조
1.5.1. 리스너
1.5.2. 워커 프로세스
1.5.3. 백그라운드 프로세스
1.6. 디렉터리 구조

본 장에서는 Tibero의 주요 기능과 프로세스 구조, 디렉터리 구조를 간단히 소개한다.

현재 기업의 비즈니스는 폭발적인 데이터의 증가와 다양한 환경 및 플랫폼의 등장으로 빠르게 확장되고 있다. 새로운 비즈니스 환경이 도래함에 따라 보다 더 효율적이고 유연한 데이터 서비스와 정보의 처리, 데이터 관리 기능이 필요하게 되었다.

Tibero는 이러한 변화에 맞춰 기업 비즈니스 구현의 기반이 되는 데이터베이스 인프라 구성을 지원하며 고성능, 고가용성 및 확장성의 문제를 해결하는 엔터프라이즈 데이터베이스 관리 시스템이다.

기존 DB의 단점을 보완하기 위해 Tibero는 독자적인 Tibero Thread Architecture를 채택하고 구현하였다. 한정된 서버 프로세스의 CPU 및 메모리 등의 시스템 리소스를 효율적으로 사용하면서 뛰어난 성능과 안정성 및 확장성을 보장하고 편리한 개발 환경과 관리 기능을 제공한다. Tibero는 초기 설계부터 대규모 사용자, 대용량 데이터, 강화된 안정성, 향상된 호환성 측면 등에서 다른 DBMS와 차별화를 고려하여 개발되었다.

Tibero는 이처럼 기업이 원하는 최적의 데이터베이스 환경을 제공하는 대표적인 DB이다.

대용량의 데이터를 관리하고 안정적인 비즈니스의 연속성을 보장하는 데이터 관리 솔루션인 Tibero는 DB 환경에서 요구되는 주요 기능을 다음과 같이 갖추고 있다.

Tibero는 데이터베이스의 영속성과 일관성을 유지하기 위하여 SQL 문장의 묶음인 트랜잭션을 다음의 4가지 성질을 통해 보장한다.

  • Atomicity

    All-or-nothing. 즉, 트랜잭션이 행한 모든 일이 적용되던가 아니면 모두 적용되지 않아야 함을 의미한다. Tibero에서는 이를 위하여 undo 데이터를 사용한다.

  • Consistency

    트랜잭션이 데이터베이스의 Consistency를 깨뜨리는 일은 여러 방면에서 생겨날 수 있다. 간단한 예는 테이블과 인덱스 간에 서로 다른 내용을 담고 있어서 Consistency가 깨지는 것이다. 이를 막기 위해 Tibero에서는 트랜잭션이 적용한 일들 중 일부만 자신이나 남에게 적용되는 것을 막고 있다. 즉, 테이블만 수정했고 아직 인덱스를 수정하지 않은 상태라고 해도 다른 트랜잭션에서는 이를 예전 모습으로 돌려 보아서 테이블과 인덱스가 항상 Consistency가 맞는 형태로 보이게 된다.

  • Isolation

    트랜잭션은 혼자만 돌고 있는 것처럼 보이게 된다. 물론 다른 트랜잭션이 수정한 데이터에 접근할 때는 이를 기다릴 수는 있지만 다른 트랜잭션이 수정 중이므로 접근할 수 없다고 에러가 나지는 않는다. 이를 위해 Tibero에서는 Multi version concurrency control 기법과 row-level locking 기법을 사용한다.

    데이터를 참조하는 경우에는 MVCC 기법을 이용하여 다른 트랜잭션과 무관하게 참조 가능하며, 데이터를 수정할 때도 row level의 fine-grained lock control을 통하여 최소한의 충돌만을 일으키고 같은 데이터에 접근한다고 해도 단지 기다림으로써 이를 해결한다.

  • Durability

    Tibero에서는 이를 위하여 Redo 로그와 write-ahead logging 기법을 사용한다.

    트랜잭션이 커밋할 때에 해당 Redo 로그가 디스크에 기록되어 트랜잭션의 영속성을 보장해 준다. 또한 블록이 디스크에 내려가기 전에 항상 Redo 로그가 먼저 내려가서 데이터베이스 전체가 일관성을 지니게 한다.

Tibero는 fine-grained lock control을 보장해 주기 위하여 row level locking을 사용한다. 즉, 데이터 최소 단위인 Row 단위의 locking을 통하여 최대한의 concurrency를 보장해 준다. 많은 Row들을 수정한다고 해도 테이블에 lock이 걸려서 concurrent한 DML이 수행되지 못하는 상황은 발생하지 않는다. 이러한 기법을 통해 OLTP 환경에서 더욱 강력한 성능을 발휘하고 있다.

Tibero는 대규모 사용자 접속을 수용하는 다중 프로세스 및 다중 스레드 기반의 아키텍처를 갖추고 있다.

다음은 Tibero의 프로세스 구조를 나타내는 그림이다.


Tibero의 프로세스는 크게 3가지로 구성된다.

  • 리스너(Listener)

  • 워커 프로세스(Worker Process 또는 Foreground Process)

  • 백그라운드 프로세스(Background Process)

워커 프로세스(Worker Process)는 클라이언트와 실제로 통신을 하며 사용자의 요구 사항을 처리하는 프로세스이다. 이 프로세스의 개수는 WTHR_PROC_CNT 초기화 파라미터로 조절할 수 있으며, 일단 Tibero가 기동된 뒤에는 변경할 수 없다. 따라서 시스템 환경을 고려하여 적절한 값을 설정해야 한다.

Tibero 6부터 워커 프로세스는 용도에 따라 두 그룹으로 나눌 수 있다. 포어그라운드 워커 프로세스(Foreground Worker Process)는 리스너를 통해 들어온 온라인 요청을 처리하는 반면, 백그라운드 워커 프로세스(Background Worker Process)는 인터널 태스크(Internal Task)나 잡 스케줄러에 등록된 배치 작업을 수행한다. 그룹은 MAX_BG_SESSION_COUNT 초기화 파라미터로 조절할 수 있다.

참고

초기화 파라미터에 대한 자세한 내용은 "Tibero 참조 안내서"를 참고한다.

Tibero는 효율적인 리소스의 활용을 위해 스레드(Thread) 기반으로 작업을 수행한다. Tibero를 설치하면 기본적으로 하나의 워커 프로세스 안에는 1개의 컨트롤 스레드와 10개의 워커 스레드가 존재한다.

프로세스당 워커 스레드 개수는 WTHR_PER_PROC 초기화 파라미터로 조절할 수 있으며, WTHR_PROC_CNT처럼 일단 Tibero가 기동된 뒤에는 변경할 수 없다. 따라서 시스템 환경을 고려하여 적절한 값을 설정해야 한다.

WTHR_PROC_CNTWTHR_PER_PROC 초기화 파라미터 값을 직접 바꾸는 것보다는 MAX_SESSION_COUNT 초기화 파라미터를 통해 서버에서 제공하는 최대 세션 개수를 지정할 것을 권장한다.

MAX_SESSION_COUNT 값에 따라 WTHR_PROC_CNTWTHR_PER_PROC 값이 자동으로 설정된다. 만약 WTHR_PROC_CNTWTHR_PER_PROC를 직접 설정할 경우 WTHR_PROC_CNT * WTHR_PER_PROC 값이 MAX_SESSION_COUNT 값과 같게 두 값을 설정해야 한다.

MAX_BG_SESSION_COUNT 값은 MAX_SESSION_COUNT 보다 작은 값을 설정해야하며 WTHR_PER_PROC 값의 배수가 되어야 한다.

워커 프로세스는 컨트롤 스레드와 워커 스레드를 통해 작업을 수행한다.

백그라운드 프로세스(Background Process)는 클라이언트의 접속 요청을 직접 받지 않고 워커 스레드나 다른 백그라운드 프로세스가 요청할 때 또는 정해진 주기에 따라 동작하는 주로 시간이 오래 걸리는 디스크 작업을 담당하는 독립된 프로세스이다.

백그라운드 프로세스에 속해 있는 프로세스는 다음과 같다.

Tibero가 설치되면 다음과 같은 디렉터리가 생성된다.

$TB_HOME
    +- bin
    |   |
    |   +- update
    |
    +- client
    |   |
    |   +- bin
    |   +- config
    |   +- include
    |   +- lib
    |   |   |
    |   |   +- jar
    |   |   +- php
    |   +- ssl
    |   |   |
    |   |   +- misc
    |   +- epa
    |       |
    |       +- java
    |          |
    |          +- config
    |          +- lib        
    |
    +- config
    |
    +- database
    |   +- $TB_SID
    |       |
    |       +- java
    |
    +- instance
    |   |
    |   +- $TB_SID
    |       |
    |       +- audit
    |       +- dump
    |       |  |
    |       |  +- act
    |       |  +- diag
    |       |  +- tracedump
    |       +- log
    |       |  +- dlog
    |       |  +- ilog
    |       |  +- lsnr
    |       |  +- slog
    |       |  +- sqltrace
    |       +- path
    |
    +- lib
    |
    +- license
    |  |
    |  +- oss_licenses
    |
    +- nls
    |  |
    |  +- zoneinfo
    |
    +- scripts
         |
         +- pkg

위의 디렉터리 구조에서 $TB_SID라고 보이는 부분은 각각의 시스템 환경에 맞는 서버의 SID로 바꿔서 읽어야 한다.

Tibero에서 사용하는 기본 디렉터리는 다음과 같다.

bin

Tibero의 실행 파일과 서버 관리를 위한 유틸리티가 위치한 디렉터리이다. 이 디렉터리에 속한 파일 중에서 tbsvrtblistenerTibero를 구성하는 실행 파일이며, tbboottbdown은 각각 Tibero를 기동하고 종료하는 역할을 담당한다. tbsvrtblistener 실행 파일은 반드시 tbboot 명령어를 이용하여 실행되어야 하며, 절대로 직접 실행해서는 안 된다.

client

다음은 하위 디렉터리에 대한 설명이다.

하위 디렉터리설명
bin

Tibero의 클라이언트 실행 파일이 있는 디렉터리이다. 이 디렉터리에는 다음과 같은 유틸리티가 있다.

유틸리티에 대한 내용은 "Tibero 유틸리티 안내서"를 참고한다. 단, tbpc 유틸리티는 "Tibero tbESQL/C 안내서"를 참고한다.

configTibero의 클라이언트 프로그램을 실행하기 위한 설정 파일이 위치하는 디렉터리이다.
includeTibero의 클라이언트 프로그램을 작성할 때 필요한 헤더 파일이 위치하는 디렉터리이다.
libTibero의 클라이언트 프로그램을 작성할 때 필요한 라이브러리 파일이 위치하는 디렉터리이다. 자세한 내용은 "Tibero 애플리케이션 개발자 안내서"와 "TiberotbESQL/C 안내서"를 참고한다.
ssl서버 보안을 위한 인증서와 개인 키를 저장하는 디렉터리이다.
epaExternal Procedure와 관련된 설정 파일과 로그 파일이 있는 디렉터리이다. 이에 대한 자세한 내용은 "Tibero External Procedure 안내서"를 참고한다.
config

Tibero의 환경설정 파일이 위치하는 디렉터리이다. 이 위치에 존재하는 $TB_SID.tip 파일이 Tibero의 환경설정을 결정한다.

database

다음은 하위 디렉터리에 대한 설명이다.

  • $TB_SID

    Tibero의 데이터베이스 정보를 별도로 설정하지 않는 한 모든 데이터베이스 정보가 이 디렉터리와 그 하위 디렉터리에 저장된다. 이 디렉터리에는 데이터 자체에 대한 메타데이터(metadata)뿐만 아니라 다음과 같은 종류의 파일이 있다.

    파일설명
    컨트롤 파일다른 모든 파일의 위치를 담고 있는 파일이다.
    데이터 파일실제 데이터를 저장하고 있는 파일이다.
    로그 파일데이터 복구를 위해 데이터에 대한 모든 변경 사항을 저장하는 파일이다.
  • $TB_SID/java

    JAVA_CLASS_PATH가 정의되지 않은 경우 Java EPA Class File이 저장되는 디렉터리이다.

instance

다음은 하위 디렉터리에 대한 설명이다.

lib

Tibero 서버에서 Spatial과 관련된 함수를 사용하기 위한 라이브러리 파일이 있는 디렉터리이다.

license

Tibero의 라이선스 파일(license.xml)이 있는 디렉터리이다. XML 형식이므로 일반 텍스트 편집기로도 라이선스의 내용을 확인할 수 있다.

다음은 하위 디렉터리에 대한 설명이다.

하위 디렉터리설명
oss_licenses반드시 준수해야 하는 오픈소스 라이선스의 대한 정보를 확인할 수 있는 디렉터리이다.
nls

다음은 하위 디렉터리에 대한 설명이다.

하위 디렉터리설명
zoneinfoTibero에서 사용하는 시간대 파일이 있는 디렉터리이다.
scripts

Tibero의 데이터베이스를 생성할 때 사용하는 각종 SQL 문장이 있는 디렉터리이다. 또한 Tibero의 현재 상태를 보여주는 각종 뷰의 정의도 이 디렉터리에 있다.

다음은 하위 디렉터리에 대한 설명이다.

하위 디렉터리설명
pkgTibero에서 사용하는 패키지의 생성문이 저장되는 디렉터리이다.