All pages
1 of 20

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Tibero Database 설치 on Windows

Windows 환경 내 티베로 DB 설치 방법을 안내합니다.

설치

Linux, Windows 등 다양한 환경에서 Tibero DB 설치 방법을 안내합니다.

설치 전, 후 고려사항

Windows 환경 내 Tibero 클라이언트 설치 관련하여 사전 준비 사항 및 주의 사항, 고려 사항에 대해서 설명합니다.

설치 전 준비사항

1. 디스크 용량 확인

Tibero를 설치하기 위해서는 각 플랫폼별로 약간의 차이가 있지만 최소 2GB 이상의 하드디스크 여유 공간이 필요합니다. 이는 Tibero 설치 후 데이터베이스를 생성할 때 최소로 필요한 하드디스크 공간을 의미하기도 합니다.

2. JDK 설치 확인

Tibero 클라이언트 인스톨러를 이용해 설치하기 위해서는 JDK 1.5.17 이상이 반드시 설치되어 있어야 합니다.

[그림 1] JDK 설치 확인

[그림 1] JDK 설치 확인

현재 JDK 1.9 이상은 지원하지 않습니다. 만약 JDK가 설치되어 있지 않다면 아래의 위치에서 JDK를 다운로드 할 수 있습니다.

🔎

3. 설치 파일 준비

Tmax group의 TechNet에서 회원가입 후 설치파일을 다운로드합니다.

🔎


Tibero를 설치한 후 타 제품과 연동을 위해 JDBC를 제공합니다.

JDBC 연동을 할 경우 Tibero DB 서버의 해당 경로에서 드라이버 파일을 받아 연동합니다.

아래는 Tibero 버전 별 드라이버 파일명에 대한 설명입니다.

Tibero 버전
파일명

Tibero 7

tibero7-jdbc.jar

설치 후 고려사항

JDBC

Technet 바로가기
JDK 다운로드 바로가기

Tibero Database 설치 on Linux

Linux 환경에서 Tibero DB 설치 방법 (Tibero DBMS Install on Linux)을 안내합니다.

설치 가이드 (for Client)

Windows 환경 내 티베로 DBMS 클라이언트 설치 관련하여 사전 준비사항, 고려사항, 설치 방법에 대해 설명합니다.

본 문서는 총 2개의 장으로 구성됩니다.

Tibero 클라이언트 설치 전 준비사항과 주의사항 및 설치 후 고려사항에 대해서 설명합니다.

🔎

Windows 환경에서 Tibero 클라이언트를 수동 모드로 설치하는 방법을 설명합니다.

🔎

안내서 구성

설치 전, 후 고려사항 바로가기
설치 바로가기

설치

Windows 환경 내 Tibero DB 클라이언트 수동 모드 설치 및 제거방법을 설명합니다.

Tibero 클라이언트 수동 모드 설치

  1. 설치 파일을 준비합니다. Tibero 클라이언트를 설치할 폴더를 생성하고 압축을 해제하면 폴더들이 생성됩니다.

  2. 환경변수를 설정합니다.

(1) Windows에서 [시스템 환경 변수 편집] -> [고급] -> [환경변수]를 선택한 후 [시스템 변수]를 설정합니다.

[그림 2] 시스템 변수 설정

[그림 2] 시스템 변수 설정

(2) [환경변수]에서 [시스템 변수] -> [새로 만들기]를 선택 한 후 TB_HOME, TB_SID를 설정합니다.

[그림 3] TB_HOME, TB_SID 설정

(3) C:\Tibero 디렉터리에서 압축된 바이너리 실행 파일(tar.gz)을 해제합니다. 그 후에 %TB_HOME%의 license라는 하위 디렉터리에 발급받은 라이선스 파일(license.xml)을 복사합니다.

(4) tbinstall.vbs 실행 후 레지스트리 등록을 확인합니다.

[그림 4] 설치완료 확인창

레지스트리 확인(regedit)에서 HKEY_LOCAL_MACHINE\SOFTWARE\TmaxTibero\Tibero\tibero 경로에 TB_HOME과 TB_SID가 등록되었는지 확인합니다.

[그림 5] TB_HOME, TB_SID 등록 확인

(5) gen_tip.bat를 실행합니다.

(6) 필요없는 폴더를 제거합니다. bin과 client 폴더를 남기고 나머지는 제거합니다.

(7) 네트워크 파일(tbdsn)을 설정합니다. tbdsn.tbr 파일은 서버의 접속 경로를 설정하는 파일로 "%TB_HOME%\client\config"에 위치합니다.

(8) Tibero Client를 이용해서 Tibero Server로 접속합니다.


  1. tbuninstall.vbs를 실행하여 레지스트리에서 제거합니다.

[그림 6] 제거완료 확인창

  1. 물리 파일을 삭제합니다. %TB_HOME%으로 설정된 경로의 디렉터리를 삭제하여 Tibero 클라이언트를 삭제합니다.

설치 가이드 (for Client)

Linux 환경에서 티베로 DBMS 클라이언트 설치 관련하여 사전 준비사항, 고려사항, DB 설치방법에 대해서 설명합니다.

안내서 구성

본 문서는 총 2개의 장으로 구성됩니다.

Tibero 클라이언트 설치 전 준비사항과 주의사항 및 설치 후 고려사항에 대해서 설명합니다.

🔎 설치 전, 후 고려사항 바로가기

UNIX 환경에서Tibero 클라이언트를 수동 모드로 설치하는 방법을 설명합니다.

🔎 설치 바로가기

설치

UNIX 환경 내 Tibero Database Client 수동 모드 설치 방법을 안내합니다.

  1. 설치 파일(tar.gz)과 라이선스 파일(license.xml)을 준비합니다.

  1. 클라이언트 계정을 생성합니다.

Temp 테이블 스페이스 크기 산정

Tibero DBMS Temp 테이블 스페이스 크기 산정방법에 대해 설명합니다.

Join이나 대량 Sort 처리가 많은 경우 Temp 테이블 스페이스에서의 I/O가 다발적으로 발생합니다. (CREATE INDEX / ANALYZE / SELECT DISTINCT / ORDER BY / GROUP BY / UNION / SORT-MERGE)

Temp 테이블 스페이스 크기 산정을 위해서는 SQL Execution Work Area와 Temp 테이블 스페이스 간의 관계 이해가 필수입니다.


아래는 Temp 테이블 스페이스의 크기를 산정할 때 고려할 사항입니다.

  • 시스템유형 : OLTP, DSS, DW, Batch Job

  • User Load

설치가이드 (for Client)

Linux와 Windows 환경 내 티베로 DBMS 클라이언트 설치 관련하여 사전 준비사항, 고려사항, 설치 방법에 대해 설명합니다.

본 문서는 총 2개의 장으로 구성됩니다.

Tibero 클라이언트 설치 전 준비사항과 주의사항 및 설치 후 고려사항에 대해서 설명합니다.

Tibero 클라이언트를 수동 모드로 설치하는 방법을 설명합니다.

안내서 구성

디스크의 용량이 충분한 경우, 위 과정을 생략합니다.

Tibero 클라이언트 제거

[그림 3] TB_HOME, TB_SID 설정
[그림 4] 설치완료 확인창
[그림 5] TB_HOME, TB_SID 등록 확인
[그림 6] 제거완료 확인창
바이너리 압축을 해제합니다.

  1. profile을 설정합니다. 클라이언트 서버의 profile에 해당 내용을 환경에 맞게 수정한 후 추가합니다.

  1. gen_tip.sh를 실행합니다.

  1. 네트워크 파일 (tbdsn)을 설정합니다. tbdsn.tbr 파일은 서버의 접속 경로를 설정하는 파일로 $TB_HOME/client/config에 위치합니다. 아래와 같이 tbdsn.tbr 파일을 수동으로 설정합니다.

  1. Tibero Client를 이용해서 Tibero Server로 접속합니다.

Tibero 클라이언트 수동 모드 설치

$ echo %TB_HOME% %TB_SID%
$ cd %TB_HOME%\bin
$ tbinstall.vbs %TB_HOME% %TB_SID%
$ echo %TB_HOME% %TB_SID%
$ cd %TB_HOME%\config
$ gen_tip.bat\
tibero=(
    (INSTANCE=(HOST=192.168.xxx.xxx) 
              (PORT=8629)
              (DB_NAME=tibero)
          )
)
C:\Users\tmax\Desktop\tibero7\config>tbsql tibero/tmax
SQL> SELECT IPADDR, USERNAME FROM V$SESSION;

IPADDR
-----------------------------------------------
USERNAME
---------------------------------------------------------------------------------
192.168.xxx.xxx
TIBERO

1 row selected.
$ echo %TB_HOME% %TB_SID%
$ cd %TB_HOME%\bin
$ tbuninstall.vbs
$ useradd -d /home/tibero7_client -g dba tibero7_client
$ passwd tibero7_client
$ ls
tibero7-bin-FS02-windows64_2008-269353-20240314021215.zip

$ unzip tibero7-bin-FS02-linux64_3.10-254994.tar.gz
```shell
$ vi ~/.bash_profile
export TB_HOME=/home/tibero7_client/tibero7
export TB_SID=tibero
export PATH=$TB_HOME/bin:$TB_HOME/client/bin:$PATH
export LD_LIBRARY_PATH=$TB_HOME/client/lib:$LD_LIBRARY_PATH

$ source ~/.bash_profile
$ cd $TB_HOME/config

$ sh gen_tip.sh Using TB_SID "tibero"
/home/tibero7_client/tibero7/config/tibero.tip generated
/home/tibero7_client/tibero7/config/psm_commands generated
/home/tibero7_client/tibero7/client/config/tbdsn.tbr generated. 
Running client/config/gen_esql_cfg.sh
Done.
$ cd $TB_HOME/client/config

$ ls
gen_esql_cfg.sh tbco_file_id tbdsn.tbr	tbimport_hl.config.default tbpcb.cfg 
tbc_file_id	tbdfdump.cfg tbertl.cfg tbpc.cfg

$ vi tbdsn.tbr 
#------------------------------------------------------------
# /home/tibero7_client/tibero7/client/config/tbdsn.tbr 
# Network Configuration File.
# Generated by gen_tip.sh at 2023. 06. 12. (월) 14:30:16 KST
tibero=(
    (INSTANCE=(HOST=192.168.xxx.xxx) 
              (PORT=8629)
              (DB_NAME=tibero)
     )
)
/tbsql tibero/tmax


TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.

Connected to Tibero.

SQL> SELECT
    IPADDR, USERNAME 
FROM
    V$SESSION;	2	3	4

IPADDR
----------------------------------------------------------
USERNAME
-----------------------------------------------------------------------------------
192.168.xxx.xxx
TIBERO

Transaction Volume

  • Data Size

  • Query & Statements 튜닝

  • Temp 테이블 스페이스 자체를 여러 개의 데이터 파일로 작성해서 분산 관리 또는 User별 다른 Temp테이블 스페이스 할당

  • Temp 테이블 스페이스 Group 설정


  • 구분

    설명

    EXTENT SIZE

    SORT_AREA_SIZE*2 + Block Size (기본 1MB 권장)

    SORT AREA의 최대 크기

    SORT_AREA_SIZE → 6KB, 세션 → 1000이라면 Sort 영역의 최대 크기는 16MB가 된다.

    (기본값: (MEMORY_TARGET - TOTAL_SHM_SIZE) * 0.3)

    SORT SEGMENT

    개요

    고려 사항

    용량 산정

    Temp 테이블 스페이스의 용량 사용 방법

    Temp 테이블 스페이스의 용량을 산정하기 위해서 MEMORY_TARGET 파라미터를 이용하고, Autoextending Temp Files을 설정할 것을 권장합니다.

    설치 전, 후 고려사항

    Linux 환경 내 Tibero DB Client 설치 관련하여 사전 준비사항과 주의사항, 설치 후 고려사항에 대해 설명합니다.

    설치 전 준비사항

    1. 디스크 용량 확인

    Tibero를 설치하기 위해서는 각 플랫폼별로 약간의 차이가 있지만 최소 2GB 이상의 하드디스크 여유 공간이 필요합니다. 이는 Tibero 설치 후 데이터베이스를 생성할 때 최소로 필요한 하드디스크 공간을 의미하기도 합니다.

    2. JDK 설치 확인

    Tibero 클라이언트 인스톨러를 이용해 설치하기 위해서는 JDK 1.5.17 이상이 반드시 설치되어 있어야 합니다.

    [그림 1] JDK 설치 확인

    [그림 1] JDK 설치 확인

    현재 JDK 1.9 이상은 지원하지 않습니다. 만약 JDK가 설치되어 있지 않다면 아래의 위치에서 JDK를 다운로드 할 수 있습니다.

    🔎

    3. 설치 파일 준비

    Tmax group의 TechNet에서 회원가입 후 설치파일을 다운로드합니다.

    🔎

    구분
    파일명

    Tibero를 설치한 후 타 제품과 연동을 위해 JDBC를 제공합니다.

    JDBC 연동을 할 경우 Tibero DB 서버의 해당 경로에서 드라이버 파일을 받아 연동합니다.

    아래는 서버의 운영체제별 드라이버 파일 위치에 대한 설명입니다.

    구분
    위치

    아래는 Tibero 버전 별 드라이버 파일명에 대한 설명입니다.

    Tibero 버전
    파일명

    인스턴스 시작 후 첫 SQL이 Temp 테이블 스페이스를 이용하여 Sort Segment를 생성한다. DB가 shutdown되면 release된다.

    • V$SORT_SEGMENT : SORT_SEGMENT영역 할당 및 해제 확인한다.

    • V$SORT_USAGE : SORT_SEGMENT를 사용하고 있는 사용자를 확인 한다.

    • V$TEMPFILE, DBA_TEMP_FILES : Temp 테이블 스페이스에 할당된 tempfiles을 확인한다.

    • DBA_TEMP_FREE_SPACE

    UNIX, Linux 계열

    Technet의 tar.gz 파일을 다운받아 사용합니다.

    UNIX 계열

    $TB_HOME/client/lib/jar

    Tibero 7

    tibero7-jdbc.jar

    수동 모드로 설치할 경우

    설치 후 고려사항

    JDBC

    Technet 바로가기
    JDK 다운로드 바로가기

    Undo Tablespace 크기 산정

    Tibero Database Undo 테이블스페이스 크기 산정 방법에 대해 설명합니다.

    개요

    데이터의 갱신이 많은 시스템인 경우 Undo 테이블스페이스(Undo Tablespace)의 I/O가 많이 발생하므로 Undo 테이블 스페이스를 여러 개의 데이터 파일로 작성하여 데이터 파일을 분산시킵니다.

    자동 관리 장점

    • 설계 및 관리 용이(rollback,segment)

    • UNDO Data의 overwrite 방지

    • 영역확장 용이

    • 플래시백 쿼리 이용 가능


    다음은 Undo 테이블 스페이스 크기를 산정할 때 고려할 사항입니다.

    • 데이터 파일 용량, UNDO_RETENTION, Undo Segment 수

    • 자동 관리일 경우 Undo Segment의 개별 공간은 자동으로 관리되므로 전체 Undo Segment의 최소/최대개수와 데이터 파일 용량만 설정합니다.

      • 최소 Undo Segment 개수(_USGMT_ONLINE_MIN)는 보통 10(default)으로 설정합니다. 단, 동시 수행 트랜잭션 수가 많은 경우 부하 중에 추가 Undo Segment를 생성하는 오버헤드가 있을 수 있다. 이경우예상되는동시수행트랜잭션수만큼최소 Undo Segment 개수를 설정해두면 Undo Segme 추가 생성 오버헤드를 줄일 수 있습니다.

      • 최소 Undo Segment 설정 개수가 이미 만들어져 있는 Undo Segment 개수보다 많은 경우 부팅 과정에 서 Undo Segment를 추가로 생성합니다. TAC의 경우 각 노드별로 적용한다. 예를 들어 NODE1은 _USGMT_ONLINE_MIN=30, NODE2는 40 으 로설정하고부팅하면각각 30개와 40개의 Undo Segment가 생성되어있는것을확인할 수 있습니다.


    Undo 테이블스페이스(Undo Tablespace)를 생성하는데 필요한 최소 크기와 예상 동시 수행 트랜잭션수를 기준으로 한 예상 크기, 그리고 APM 정보를 이용한 실제 사용 크기로 나누어 생각해 볼 수 있습니다.

    최초로 DB를 설치하는 경우 최소 크기 및 예상 크기 중 큰 값을 기준으로 Undo 테이블 스페이스 크기를 산정하고 이후 APM에서 최대 부하가 들어 올때 초당 소모하는 UNDO block 수를 기준으로 실제 크기와 산정한 크기가 맞는지 검증할 수 있습니다.

    • 최소 크기

    • 예상 크기

    • 실제 크기

    SQL Execution Work Area 크기 산정

    Tibero DB SQL Execution Work Area 크기 산정 방법에 대해 설명합니다.

    다른 워킹 프로세스 및 워킹 스레드와 공유되지 않은 독립적인 메모리 공간으로 세부 영역은 다음과 같습니다.

    • 세션 정보 영역 로그온 및 세션 관련 정보

    • 커서 정보 영역 (SQL영역) SQL 문 처리할 때 필요한 메모리 공간

    • SQL Work Area (SQL 작업 영역) Sort, hash-Join, Bitmap 생성 및 Merge(병합) 작업할 때 사용되는 메모리 영역

    초당 UNDO block 소모량

    운영 중 최대 부하 당시의 APM 리포트에서 Undo Statistics의 Undo blocks값을 APM 구간(초)로 나눈 값이 다

    UNDO_RETENTION

    TIP 설정 값이다. (기본값: 900초)

    여유값

    KB 값이다. Long 트랜잭션이 비정기적으로 들어올 경우 (INDEX rebuild등도 포함)를 대비하여 충분한 크기를 잡 아 두는 것이 좋다.

    항목

    설명

    Undo 테이블 스페이스당 Undo Segment 최소 개수

    Single/TAC 모두 경우 _USGMT_ONLINE_MIN 값이다.

    Undo Tablespace당 Undo Segment 최대 개수

    예상되는 최대 동시 수행 트랜잭션 수이다.

    • Single의 경우 : _USGMT_ONLINE_MAX 값

    • TAC의 경우 : _USGMT_ONLINE_MAX / 노드수

    _USGMT_UNIFORM_EXTSIZE * 2

    Tibero는 수동 관리는 지원하지 않습니다.

    고려사항

    용량 산정

    Undo Tablespace 산정 방법

    Undo Tablespace 산정 공식에 사용되는 항목

    Undo Segment는 최소 2개의 UNDO extent가 필요하고

    Undo extent 하나의 크기는_USGMT_UNIFORM_EXTSIZE이다.

    (Undo 테이블 스페이스당 Undo Segment 최소 개수 * _USGMT_UNIFORM_EXTSIZE * 2
    * Block size(8KB)) + 여유값
    (Undo 테이블 스페이스당 Undo Segment 최대 개수 * _USGMT_UNIFORM_EXTSIZE * 2
    * Block size(8KB)) + 여유값
    (초당 UNDO Block 소모량 * UNDO retention * Block size(8KB)) + 여유값

    아래는 관련 파라미터에 관한 설명입니다.

    구분

    설명

    총 SQL Execution Work Area

    • 산정방법 MEMORY_TARGET - TOTAL_SHM_SIZE

    MEMORY_TARGET

    총 메모리 사용량이다.

    TOTAL_SHM_SIZE


    대용량의 데이터를 Full Table Scan으로 읽어들여 정렬, 조인 및 분석을 수행하는 쿼리가 대부분이고 Parallel Execution을 이용하는 환경입니다. 읽어들이는 데이터의 크기가 물리적인 메모리 크기에 담을 수 없을 정도의 크기인 경우가 많기 때문에 효율적인 Buffer Cache 이용을 기대할 수가 없는 상황이므로 공유 메모리 영역에서 Buffer Cache의 크기를 줄이고 독립적으로 사용 가능한 SQL Execution Work Area 메모리 크기에 따라 성능이 크게 좌우되는 정렬, 조인 및 분석 작업을 위해 대부분의 물리 메모리 를 SQL Work Area에 할당하는 것이 효율적입니다.


    다음은 SQL Execution Work Area 크기 산정하는 방법입니다.

    항목

    설명

    일반적인 온라인 업무 환경 (OLTP)

    • SQL Execution Work Area (SQL 실행 작업 영역) : 20%

    • TOTAL_SHM_SIZE : MEMORY_TARGET 값의 80% (OS 및 다른 서비스 사용 영역 제외) EX_MEMORY_OPERATION_LIMIT : 5000

    • _OP_MEM_MAX_SIZE (Tibero 7 기준 (IPARAM(MEMORY_TARGET) - IPARAM(TOTAL_SHM_SIZE)) * 0.05

    • _OP_MEM_MAX_SIZE (Tibero7 기준)

    데이터 분석 업무 환경

    (OLAP)

    • SQL Execution Work Area (SQL 실행 작업 영역) : 80% (가용 메모리 한계 내에서 최적의 작업 영역을 지정하여 디스크 I/O를 줄이고 SQL의 수행 속도를 높일 수 있도록 조절하기 위해서)

    • TOTAL_SHM_SIZE : MEMORY_TARGET 값의 20%

    • EX_MEMORY_OPERATION_LIMIT : 20000 (Tibero 7 기준 Deprecated)

    • _OP_MEM_MAX_SIZE(Tibero 7 기준) (IPARAM(MEMORY_TARGET) - IPARAM(TOTAL_SHM_SIZE)) * 0.2

    총 SQL Execution

    Work Area

    개요

    고려사항

    SQL Execution Work Area 크기 산정 시 고려사항

    일반적인 온라인 업무 환경(OLTP)

    온라인 업무에서는 대량의 데이터를 읽어서 정렬하거나 분석하는 쿼리보다는 특정 값을 조회 및 수정 하기 위해 index를 이용하는 쿼리가 대부분입니다. 이런 경우에는 SQL에서 독립적으로 사용하는 SQL Execution Work Area의 사용량이 많지 않고 오히려 Index를 이용한 Table Random Access IO를 줄이기 위해 Buffer Cache 영역을 대부분 사용하는 것이 바람직합니다.

    데이터 분석 업무 환경(OLAP)

    용량 산정

    Redo 로그 파일 크기 산정

    Tibero DB Redo 로그 파일 크기 산정 방법에 대해 설명합니다.

    개요

    Redo 로그 파일은 최소 2개 그룹을 권장하며, Archivelog 모드인 경우 최소 3개 그룹을 권장합니다. 이는 Redo 로그가 순환할 때 rewrite 방지를 위한 hangup 현상을 막기 위함이며 최소 2개의 멤버를 권장합니다. 성능을 위해 각각 다른 물리 디스크에 배치하도록 합니다.

    Redo 로그 파일의 크기를 사전에 정확하게 추측하기가 어렵기 때문에 수행하는 업무의 일부를 수행한 후 Redo 로그 양을 측정하고 전체 업무를 수행했을 때의 Redo 로그 파일의 크기를 예측하는 것을 권장합니다.


    고려사항

    아래는 Redo 로그 파일 크기를 산정할 때 고려할 사항입니다.

    • 트랜잭션 처리 중 Log Switch가 발생하는 경우 트랜잭션 성능 저하가 발생합니다.

    • OLTP 중심의 시스템에서 트랜잭션 처리의 피크 타임에 Log Switch가 빈번하게 일어나지 않도록 Redo로그 크기의 조정이 필요합니다.

    • Redo 로그 파일의 크기가 크면 Log Switch 발생 가능성이 낮은 반면 Recovery 시간은 길어집니다.

    위 고려 사항을 참고해서 다음의 모드 중에 하나를 선택합니다.

    • LOGGING / NOLOGGING 모드

      • 테이블/인덱스에 대한 모든 변경사항은 기본적으로 Redo 로그로 기록되지만 NOLOGGING 테이블/ 인덱스에 대해 Direct-Path(DP) 방식으로 데이터를 추가하는 경우 Redo 로그를 기록하지 않습니다. DP에 대한 Redo 로그가 남지 않는 경우에 Media Recovery가 수행될 때 DP로 추가한 테이블 데이터 가 복구되지 않기 때문에 DP로 데이터를 추가한 후에는 백업을 받도록 권장합니다.

    아래는 LOGGING 모드에서 하나의 DML당 로그 발생량 및 확인 방법입니다.

    • 로그의 발생량을 DML 한 건으로 측정하기가 쉽지 않기 때문에 여러 건의 DML을 수행한 후 전체 로그 발생량을 측정해서 건수로 나누는 방법을 권장합니다.

    • 로그 발생량은 v$sysstat 테이블의 'name' 컬럼이 'Redo log size'인 항목으로 확인 가능하며 alter system clear stat 명령으로 v$sysstat 테이블의 내용을 clear할 수 있습니다.

      • ARCHIVELOG / NOARCHIVELOG 모드 Redo 로그 파일은 Cache Recovery될 때 더 이상 필요없는 경우에 재사용됩니다. (일반적으로 3개의 Redo 로그 파일들을 생성해서 순차적으로 돌면서 재사용하는 구조입니다.)


    Redo 로그에는 사용자 데이터에 가해지는 변경사항이 저장되며 DML의 종류에 따라 아래와 같은 내용이 저장됩니다.

    추가로 아래와 같은 내용을 포함합니다.

    • 트랜잭션 처리(begin/commit)를 위한 Redo 로그

    • Segment의 공간 관리(extent add, block format, index split)에 대한 Redo 로그

    • Undo 블록에 대한 변경사항

    • 블록 내 각 ROW에서 수행했던 트랜잭션의 commit 여부를 확인하고 변경하는 Redo 로그



    Redo 로그 파일에 쓰여지는 데이터량은 SQL 및 갱신 데이터량에 의해 크게 바뀌기 때문에 운영 전 사전에 정확한 추측이 불가능합니다.

    시스템의 크기에 따라서 다음과 같이 사전 설정 후 실제 운영 중 REDO 발생량을 보고 조정해야 합니다.

    Shared Memory 크기 산정

    티베로 DB Shared Memory 크기 산정 방법에 대해 설명합니다.

    개요

    Tibero Shared Memory는 부팅할 때 고정된 용도로 사용되는 Fixed 영역과 운영 중에 자동으로 할당되어 사용되는 Shard Pool 영역으로 구분할 수 있습니다.

    • Fixed Memory DB가 부팅할 때 파라미터 값을 바탕으로 크기가 고정되는 영역입니다.

      • Buffer Cache(Database Buffer)

      • Log Buffer

      • 그 외 항목 : 전역 변수를 위한 공간, 워킹 스레드 정보와 세션 정보를 관리하는 영역

    • Shared Pool Memory 운영 중에 동적으로 할당되어 사용되는 영역입니다.

      • DD Cache

      • PP Cache(Library Cache)

      • 그 외 항목


    아래는Shared Memory 크기를 산정할 때 고려해야 할 사항입니다.

    • Shared Memory 크기를 운영 중에 동적으로 늘릴 수 없습니다.

    • Buffer Cache와 Shared Pool 사용 패턴을 분석하여 전체 Shared Memory 크기를 알맞게 정해야 합니다.

    • Buffer Cache

      • 주요 Workload를 돌려본 후 APM 리포트의 Buffer Cache Hit율을 보고 판단합니다.


    Shared Memory 각 영역의 크기는 v$sga에서 확인할 수 있습니다.

    Shared Memory의 크기는 초기화 파라미터로 설정해서 조회할 수 있습니다.

    싱글 모드 : TOTAL_SHM_SIZE의 2/3 TAC 모드 : TOTAL_SHM_SIZE의 1/2

    • 싱글 모드 전체 shared pool 크기가 MIN_SHARED_POOL_SIZE보다 커야 합니다. (MIN_SHARED_POOL_SIZE 기본값: 1M * MAX_SESSION_COUNT)

    • TAC 모드 TAC를 위한 CCC와 CWS 공간이 충분히 확보되어야 합니다. CCC와 CWS를 위해 전체 Buffer Cache 크기의 25% 가량을 Shared Pool에서 사용합니다. CCC와 CWS를 위한 공간을 제외한 Shared Pool 영역이 _MIN_SHARED_POOL_SIZE 보다 커야 합니다.

    PP Cache와 DD Cache 등을 위한 Free Shared Pool 크기는 CCC와 CWS 공간보다 커야 합니다.

    (IPARAM(MEMORY_TARGET) - IPARAM(TOTAL_SHM_SIZE)) * 0.3

    _OP_MEM_MAX_SIZE(Tibero 7 기준) (IPARAM(MEMORY_TARGET) - IPARAM(TOTAL_SHM_SIZE)) * 0.3

    총 공유 메모리 사용량이다.

    _OP_MEM_MAX_SIZE

    하나의 operation(정렬, 조인, 분석)에서 사용할 최대 메모리 사용량이다. (Tibero 7 기준)

    _OP_MEM_PX_MAX_SIZE

    하나의 operation(정렬, 조인, 분석)이 parallel로 수행될 때 slave들이 사용 할 수 있는 총 최대 메모리 사용량이다. (Tibero 7 기준)

    EX_MEMORY_OPERA TION_LIMIT

    하나의 operation에서 사용할 최대 메모리 사용량을 계산한다. (단위: MB) parallel 쿼리에서 slave들도 위의 최대 메모리 사용량을 쓰려고 하기 때문에 과다 메모리를 사용하려고 하고 memory tunner에 의해 나중에 수행되는 slave 의 경우 메모리 사용에 불이익을 받게 될 수도 있다.

    최대 MEMORY_TARGET - TOTAL_SHM_SIZE만큼 사용이 가능하다.

    Hit율이 90 % 이하 : Buffer Cache 크기 늘려야 합니다.

  • Shared Pool Memory

    • Workload를 돌려본 후 v$sga의 ‘SHARED POOL MEMORY’ 항목의 사용률 보고 판단합니다.

    • Shared Pool 사용률이 너무 높으면 (Free 영역이 적은 경우) Shared Pool 크기를 늘려야 합니다.

    • 세션당 최소 1M 이상의 Shared Pool 영역 확보가 필요합니다.

  • 고려 사항

    용량 산정

    Shared Memory 아래는TOTAL_SHM_SIZE 파라미터를 설정해서 조회하는 예입니다.

    Buffer Cach 아래는 DB_CACHE_SIZE 파라미터를 설정해서 조회하는 예입니다.

    Log Buffer 아래는 LOG_BUFFER 파라미터를 설정해서 조회하는 예입니다. (LOG_BUFFER 파라미터의 기본값 :10MB)

    Shared Pool Memory 전체 Shared Memory 크기에서 Fixed 영역을 뺀 나머지 영역입니다.

    SQL> select * from v$sga;	
    
    NAME		                        TOTAL		        USED
    -------------------------------------  --------------------    ---------------
    SHARED MEMORY		                1258291200		1258291200
    FIXED MEMORY		                1032962080		1032962080
    SHARED POOL MEMORY		        225312768		222298112
    SHARED POOL ALLOCATORS (LC)		25165824		24048688
    SHARED POOL ALLOCATORS (DD)		16777216		3620240
    SHARED POOL ALLOCATORS (SLAB)		79691776		76092320
    SHARED POOL ALLOCATORS (MISC)		100663296		98956536
    SHARED POOL ALLOCATORS (Total)		222298112		202717784
    Database Buffers		        838860800		838860800
    Redo Buffers		                10485760		10485760
    10 rows selected.				
    
    SQL> show param total_shm_size
    
    NAME		                        TOTAL		        USED
    -------------------------------------  --------------------    ---------------
    TOTAL_SHM_SIZE                          INT64                   1258291200
    SQL> show param db_cache_size
    
    NAME		                        TOTAL		        USED
    -------------------------------------  --------------------    ---------------
    DB_CACHE_SIZE                           UINT64                  838860800
    SQL> show param log_buffer
    
    NAME		                        TOTAL		        USED
    -------------------------------------  --------------------    ---------------
    FLASHBACK_LOG_BUFFER		        UINT32		        0
    LOG_BUFFER		                UINT32		        10485760
    TOTAL_SHM_SIZE - [Fixed Memory]
    [전체 Shared Pool 크기] = _MIN_SHARED_POOL_SIZE + [CCC 공간] + [CWS 공간]
    + [Free Shared Pool 크기]
    [Free Shared Pool 크기] > ([전체 Shared Pool 크기] - _MIN_SHARED_POOL_SIZE) / 2
    ARCHIVELOG 모드 Media Recovery 를 수행해야 하는 경우 DB를 백업 받은 이후 생성된 전체 Redo 로그 파일들이 필요하며 Redo 로그파일들을재사용하기전 Media Recovery에서 사용할 목적으로 Redo 로그들을 다른곳에 복사해두는 방식입니다.
  • NOARCHIVELOG 모드 및 LOGGING 모드 NOARCHIVELOG 모드인 경우 Media Recovery가 지원되지 않기 때문에 LOGGING 테이블인 경우 라도 성능 개선을 목적으로 DP를 수행할 때 Redo 로그를 남기지 않습니다. ARCHIVELOG/NOARCHIVELOG 모드는 Redo 로그를 재사용하기 전 백업 수행 여부에 대한 판단이 기 때문에 LOGGING/NOLOGGING과는 개념상 큰 연관성은 없습니다.

  • Direct-Path Loading / Direct-Path Insert (DPL/DPI) 모드

    DP로 데이터를 추가하는 경우 데이터를 row 단위로 건건이 추가하는 방식이 아니라 batch 단위로 추가 하기 때문에 성능이 빠르며 Redo 로그의 양도 row 단위로 건건이 추가할 때보다 적게 생성됩니다.

  • INSERT 하는 ROW의 내용(TABLE row 전체 + INDEX key 전체) + 
    INSERT에 대한 UNDO(delete할 rowid + delete할 INDEX key)
    UPDATE 내용(ROW의 내용 중 새로 변경되는 내용 + 변경되는 컬럼의 INDEX key delete/insert)
    + UPDATE에 대한 UNDO(row 변경을 되돌리는 내용 + INDEX key delete/insert)
    DELETE되는 ROW에 대한 내용(rowid 정보 + INDEX key 전체)
    + DELETE에 대한 UNDO(row 전체 + INDEX key 전체)

    구분

    설명

    로그 파일 최대 개수

    CREATE DATABASE 절의 MAXLOGFILES 파라미터

    Group당 로그 파일 최대 개수

    Unlimited

    최소 크기

    구분

    설명

    소규모 시스템

    4MB~100MB

    중규모 시스템

    100MB~1GB

    대규모 시스템

    용량 산정

    INSERT

    UPDATE

    DELETE

    Redo 로그 제한 사항

    Redo 로그 크기

    4MB

    최대 크기

    • Tibero 5 SP1 : 4GB

    • Tibero 6 이상 : 2TB

    • Tibero 7 : 2TB

    1GB 이상

    Tibero 도커 이미지 가이드

    독립적인 가상화 환경을 생성하는 도커 플랫폼의 이미지를 활용함으로써 더욱 편리하고 안정적으로 Tibero를 설치하는 방법을 안내합니다.

    1. 도커 이미지 사용

    아래 두 가지 방법 중 적합한 방식으로 도커 이미지를 사용합니다.

    • 공식 도커 이미지 사용

    • 도커 이미지 커스텀 생성

    공식 도커 이미지 사용

    아래 경로에서 Tibero 공식 도커 이미지를 다운로드 합니다.

    Tibero 공식 도커 이미지 다운로드

    • Tibero 7 패치셋 버전 업데이트

    적합한 바이너리를 다운로드 받아 tibero.tar.gz 파일명으로 변경합니다. Dockerfile 과 동일한 경로에 바이너리 파일을 위치합니다.

    도커 이미지 빌드를 위해 도커파일(Dockerfile)을 생성합니다.

    아래 예시는 rockylinux9 을 사용합니다. 준비한 티베로 바이너리의 Major 버전으로 TB_VERSION 을 수정합니다.

    컨테이너 이미지에 필요한 패키지를 설치하는 스크립트입니다.

    필요한 패키지가 있다면 스크립트에 추가합니다. Dockerfile 과 같은 경로의 scripts 디렉토리 내 install_dependency.sh 파일명으로 생성합니다.

    Dockerfile에 작성한 ENTRYPOINT 로 컨테이너 생성, 재시작 시 수행되는 스크립트입니다. Dockerfile 과 같은 경로의 scripts 디렉토리 내 entrypoint.sh 파일명으로 생성합니다.

    Tibero 설치 스크립트로 바이너리 내 tb_create_db.sh 를 사용합니다. Dockerfile 과 같은 경로의 scripts 디렉토리 내 install_tibero.sh 파일명으로 생성합니다.

    아래 커맨드를 통해 도커 이미지를 빌드합니다. 원하는 이미지명과 태그로 수정해서 사용합니다.

    이때 도커 이미지 빌드를 위해 필요한 파일은 아래와 같습니다.


    아래 Tibero 공식 도커허브를 참고하여, 빌드한 도커 이미지를 통해 컨테이너를 생성합니다.

    Tibero 공식 도커 허브

    도커 이미지 커스텀 생성

    1. Tibero 바이너리 준비

    2. Dockerfile 준비

    3. 스크립트 생성

    의존성 패키지 설치 스크립트

    엔트리포인트 스크립트

    Tibero 설치 스크립트

    4. 도커 이미지 빌드

    참고

    커맨드의 마지막 '.' 은 현재 경로에 Dockerfile이 존재함을 의미합니다.

    주의

    Tibero 바이너리 압축파일명은 반드시 "tibero.tar.gz" 로 지정 합니다.

    2. Tibero 컨테이너 생성

    https://hub.docker.com/r/tiberoofficial/tibero
    https://hub.docker.com/r/tiberoofficial/tibero
    FROM rockylinux:9
    
    # Tibero 설치를 위한 환경 변수 설정
    ENV TB_VERSION=7
    ENV TB_BASE=/opt
    ENV TB_HOME=$TB_BASE/tibero$TB_VERSION
    ENV LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib
    ENV PATH=$PATH:$TB_HOME/bin:$TB_HOME/client/bin
    
    # Tibero 바이너리 파일 복사
    COPY tibero.tar.gz /tmp/tibero.tar.gz
    
    # 필수 패키지 설치
    COPY ./scripts/install_dependency.sh /opt/install_dependency.sh
    RUN chmod +x /opt/install_dependency.sh
    RUN /opt/install_dependency.sh
    
    
    # Tibero 설치
    COPY ./scripts/install_tibero.sh /opt/install_tibero.sh
    RUN chmod +x /opt/install_tibero.sh
    
    # Entrypoint 스크립트 복사 및 권한 설정
    COPY ./scripts/entrypoint.sh /opt/entrypoint.sh
    RUN chmod +x /opt/entrypoint.sh
    
    ENTRYPOINT ["/opt/entrypoint.sh"]
    #!/bin/bash
    set -e
    
    # Install dependencies for Tibero
    dnf update -y
    
    dnf install -y gcc
    dnf install -y gcc-c++
    dnf install -y libaio
    dnf install -y libaio-devel
    dnf install -y sysstat
    dnf install -y glibc-utils
    dnf install -y ncurses-devel
    dnf install -y libnsl
    dnf install -y libnsl2
    dnf install -y gdb
    dnf install -y gdb-doc
    dnf install -y gdb-gdbserver
    dnf install -y gdb-headless
    dnf install -y gdb-minimal
    dnf install -y gdbm-libs
    dnf install -y tar
    dnf install -y vim
    dnf install -y vi
    dnf install -y hostname
    
    # Tibero process 확인용 (pgrep)
    dnf install -y procps-ng
    
    dnf clean all
    
    
    curl -O https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
    rpm -ivh epel-release-latest-9.noarch.rpm
    
    dnf install -y nmon
    dnf install -y java-1.8.0-openjdk-devel
    dnf install -y ncurses-compat-libs
    
    ln -s /usr/lib64/libncurses.so.6.2 /usr/lib64/libncurses.so.5 || true
    ln -s /usr/lib64/libtinfo.so.6.2 /usr/lib64/libtinfo.so.5 || true
    ln -s /usr/lib64/libform.so.6.2 /usr/lib64/libform.so.5 || true
    #!/usr/bin/env bash
    set -euo pipefail
    
    # BOOT_POLICY=auto(기본) | manual
    : "${BOOT_POLICY:=auto}"
    : "${INSTALL_TGZ:=/tmp/tibero.tar.gz}"
    : "${TB_PROC:=tbsvr}"          # Tibero 메인 프로세스명
    : "${TB_START_CMD:=tbboot}"    # Tibero 기동 명령
    : "${TB_DOWN_CMD:=tbdown}"     # Tibero 종료 명령
    
    if [ -f /etc/bashrc ]; then
      set +u
      # /etc/bashrc 내부에서 BASHRCSOURCED를 사용할 수 있으므로 기본값 보장
      : "${BASHRCSOURCED:=0}"
      source /etc/bashrc || true
      set -u
    fi
    
    if [ -f "${HOME}/.bashrc" ]; then
      set +u
      : "${BASHRCSOURCED:=0}"
      source "${HOME}/.bashrc" || true
      set -u
    fi
    
    graceful_shutdown() {
      echo "[signal] Shutting down database (if running)..."
      ${TB_DOWN_CMD} immediate >/dev/null 2>&1 || true
      exit 0
    }
    trap graceful_shutdown SIGINT SIGTERM
    
    # ===== 수동 모드: 설치/기동 모두 생략, 컨테이너만 유지 =======================
    if [[ "${BOOT_POLICY}" == "manual" ]]; then
      echo "[mode] BOOT_POLICY=manual → skip install/boot. keeping container alive."
      echo "[note] even if ${INSTALL_TGZ} exists, will NOT install. will NOT run tbboot."
      # 컨테이너 생존 유지
      exec sleep infinity
    fi
    
    # ===== 자동 모드: 설치 및 기동 시도 ==========================================
    # 1) 최초 생성 판단: tar.gz 존재시 설치 시도
    if [ -f "${INSTALL_TGZ}" ]; then
      echo "[init] Found ${INSTALL_TGZ} → running /opt/install_tibero.sh ..."
      /opt/install_tibero.sh
    fi
    
    # 2) 서버 기동 시도
    if ! pgrep "${TB_PROC}" >/dev/null 2>&1; then
      echo "[start] Starting Tibero..."
      if ! ${TB_START_CMD} >/dev/null 2>&1; then
        echo "[error] Failed to start Tibero (${TB_START_CMD}). Check logs."
        exit 1
      fi
    fi
    
    # 3) 기동 검증
    if pgrep "${TB_PROC}" >/dev/null 2>&1; then
      echo "#########################"
      echo "Tibero is Ready To Use!"
      echo "#########################"
    else
      echo "[error] Tibero process not found after start attempt."
      exit 1
    fi
    
    # 4) 컨테이너 생존 유지 (로그 tail이 필요 없으면 단순 sleep으로 유지)
    exec sleep infinity
    #!/bin/bash
    set -e
    
    if [ -f "/tmp/tibero.tar.gz" ]; then
      : "${TB_BASE:?TB_BASE is required}"
      mkdir -p "${TB_BASE}"
      tar -xzf "/tmp/tibero.tar.gz" -C "${TB_BASE}" && rm -f "/tmp/tibero.tar.gz"
      chmod -R 775 $TB_HOME
    fi
    echo "10% complete"
    
    echo "Setting Environment Variables"
    
    if [[ -n "${TB_USER_FILE:-}" && -f "${TB_USER_FILE}" ]]; then
      TB_USER="$(< "${TB_USER_FILE}")"
      export TB_USER
    fi
    
    if [[ -n "${TB_PASSWORD_FILE:-}" && -f "${TB_PASSWORD_FILE}" ]]; then
      TB_PASSWORD="$(< "${TB_PASSWORD_FILE}")"
      export TB_PASSWORD
    fi
    
    # 루트 패스워드 필수
    if [[ -z "${TB_ROOT_PASSWORD:-}" ]]; then
      echo "[ERROR] TB_ROOT_PASSWORD environment variable is not set. Exiting." >&2
      exit 1
    fi
    if [[ -n "${TB_ROOT_PASSWORD_FILE:-}" && -f "${TB_ROOT_PASSWORD_FILE}" ]]; then
      TB_ROOT_PASSWORD="$(< "${TB_ROOT_PASSWORD_FILE}")"
      export TB_ROOT_PASSWORD
    fi
    
    : "${TB_HOME:?TB_HOME is required}"
    if [ -f "${TB_HOME}/bin/base_env.sh" ]; then
      sed -i "s|^svr_sys_password=\"tibero\"$|svr_sys_password=\"${TB_ROOT_PASSWORD}\"|" \
        "${TB_HOME}/bin/base_env.sh"
    fi
    
    : "${TB_SID:=tibero}"
    export TB_SID
    echo "export TB_VERSION=\"${TB_VERSION}\"" >> "${HOME}/.bashrc"
    echo "export TB_BASE=\"${TB_BASE}\"" >> "${HOME}/.bashrc"
    echo "export TB_HOME=\"${TB_HOME}\"" >> "${HOME}/.bashrc"
    echo "export LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}\"" >> "${HOME}/.bashrc"
    echo "export PATH=\"${PATH}\"" >> "${HOME}/.bashrc"
    echo "export TB_SID=\"${TB_SID}\"" >> "${HOME}/.bashrc"
    
    echo "20% complete"
    
    
    # Generating Tip file
    echo "Generating tip file"
    TIP_FILE_PATH=${TB_HOME}/config/${TB_SID}.tip
    
    "${TB_HOME}/config/gen_tip.sh" -s "${TB_SID}"
    
    # LOG_ARCHIVE_DEST 반영 (있으면 교체, 없으면 추가)
    if [ -n "${LOG_ARCHIVE_DEST:-}" ]; then
      if grep -q "^LOG_ARCHIVE_DEST=" "${TIP_FILE_PATH}"; then
        sed -i "s|^LOG_ARCHIVE_DEST=.*|LOG_ARCHIVE_DEST=${LOG_ARCHIVE_DEST}|" "${TIP_FILE_PATH}"
      else
        printf "\nLOG_ARCHIVE_DEST=%s\n" "${LOG_ARCHIVE_DEST}" >> "${TIP_FILE_PATH}"
      fi
    fi
    
    echo "30% complete"
    
    # # Setting DB Create environment variables
    args=()
    [ -n "$CHAR_SET" ] && args+=("-ch" "$CHAR_SET")
    [ -n "$NCHAR_SET" ] && args+=("-nch" "$NCHAR_SET")
    [ -n "$MAX_DATAFILE" ] && args+=("--max-datafile" "$MAX_DATAFILE")
    [ -n "$MAX_LOGGROUP" ] && args+=("--max-loggroup" "$MAX_LOGGROUP")
    [ -n "$MAX_LOGMEMBER" ] && args+=("--max-logmember" "$MAX_LOGMEMBER")
    [ -n "$LOG_SIZE" ] && args+=("--log-size" "$LOG_SIZE")
    [ -n "$LOG_GROUP" ] && args+=("--log-group" "$LOG_GROUP")
    [ -n "$LOG_FILE" ] && args+=("--log-file" "$LOG_FILE")
    [ -n "$LOG_DIR" ] && args+=("--log-dir" "$LOG_DIR")
    [ -n "$SYS_SIZE" ] && args+=("--sys-size" "$SYS_SIZE")
    [ -n "$SYS_DIR" ] && args+=("--sys-dir" "$SYS_DIR")
    [ -n "$SYS_AUTOEXTEND" ] && args+=("--sys-autoextend" "$SYS_AUTOEXTEND")
    [ -n "$SYS_NEXTSIZE" ] && args+=("--sys-nextsize" "$SYS_NEXTSIZE")
    [ -n "$SYS_MAXSIZE" ] && args+=("--sys-maxsize" "$SYS_MAXSIZE")
    [ -n "$TEMP_SIZE" ] && args+=("--temp-size" "$TEMP_SIZE")
    [ -n "$TEMP_DIR" ] && args+=("--temp-dir" "$TEMP_DIR")
    [ -n "$TEMP_AUTOEXTEND" ] && args+=("--temp-autoextend" "$TEMP_AUTOEXTEND")
    [ -n "$TEMP_NEXTSIZE" ] && args+=("--temp-nextsize" "$TEMP_NEXTSIZE")
    [ -n "$TEMP_MAXSIZE" ] && args+=("--temp-maxsize" "$TEMP_MAXSIZE")
    [ -n "$UNDO_SIZE" ] && args+=("--undo-size" "$UNDO_SIZE")
    [ -n "$UNDO_DIR" ] && args+=("--undo-dir" "$UNDO_DIR")
    [ -n "$UNDO_AUTOEXTEND" ] && args+=("--undo-autoextend" "$UNDO_AUTOEXTEND")
    [ -n "$UNDO_NEXTSIZE" ] && args+=("--undo-nextsize" "$UNDO_NEXTSIZE")
    [ -n "$UNDO_MAXSIZE" ] && args+=("--undo-maxsize" "$UNDO_MAXSIZE")
    [ -n "$USR_SIZE" ] && args+=("--usr-size" "$USR_SIZE")
    [ -n "$USR_DIR" ] && args+=("--usr-dir" "$USR_DIR")
    [ -n "$USR_AUTOEXTEND" ] && args+=("--usr-autoextend" "$USR_AUTOEXTEND")
    [ -n "$USR_NEXTSIZE" ] && args+=("--usr-nextsize" "$USR_NEXTSIZE")
    [ -n "$USR_MAXSIZE" ] && args+=("--usr-maxsize" "$USR_MAXSIZE")
    [ -n "$SYSSUB_SIZE" ] && args+=("--syssub-size" "$SYSSUB_SIZE")
    [ -n "$SYSSUB_DIR" ] && args+=("--syssub-dir" "$SYSSUB_DIR")
    [ -n "$SYSSUB_AUTOEXTEND" ] && args+=("--syssub-autoextend" "$SYSSUB_AUTOEXTEND")
    [ -n "$SYSSUB_NEXTSIZE" ] && args+=("--syssub-nextsize" "$SYSSUB_NEXTSIZE")
    [ -n "$SYSSUB_MAXSIZE" ] && args+=("--syssub-maxsize" "$SYSSUB_MAXSIZE")
    [ -n "$BACKUP_CTRLFILE" ] && args+=("--backup-ctrlfile" "$BACKUP_CTRLFILE")
    [ -n "$SYSTEM_SCRIPT" ] && args+=("--system-script" "$SYSTEM_SCRIPT")
    
    
    # creating the database
    echo "Creating the database"
    $TB_HOME/bin/tb_create_db.sh "${args[@]}"
    echo "70% complete"
    
    # Setting Archive log mode
    if [ -n "$ARCHIVE_LOG_MODE" ] && [ "$ARCHIVE_LOG_MODE" == "Y" -o "$ARCHIVE_LOG_MODE" == "y" ]; then
      echo "Setting Archive log mode"
      tbdown
      tbboot mount
      tbsql sys/"$TB_ROOT_PASSWORD" <<EOF
    ALTER DATABASE ARCHIVELOG;
    EOF
      tbdown
      tbboot
    fi
    echo "90% complete"
    
    
    # Setting up the database user
    echo "Setting up the database user"
    
    if { [ -n "${TB_USER:-}" ] && [ -z "${TB_PASSWORD:-}" ]; } || \
       { [ -z "${TB_USER:-}" ] && [ -n "${TB_PASSWORD:-}" ]; }; then
      echo "Cannot create database user: both TB_USER and TB_PASSWORD must be provided."
    fi
    
    if [ -n "${TB_USER:-}" ] && [ -n "${TB_PASSWORD:-}" ]; then
      tbsql "sys/${TB_ROOT_PASSWORD}" <<EOF
    create user ${TB_USER} identified by '${TB_PASSWORD}';
    grant dba to ${TB_USER};
    EOF
    fi
    
    echo "100% complete"
    echo "Tibero installation and database creation completed successfully."
    docker build -t <이미지명>:<태그> .
    .
    ├── Dockerfile
    ├── tibero.tar.gz
    └── scripts
        ├── entrypoint.sh
        ├── install_dependency.sh
        └── install_tibero.sh

    테이블 크기 산정

    Tibero DB 테이블 크기 산정 방법에 대해 설명합니다.

    Row의 데이터 길이

    테이블 크기를 산정하기 위해서는 컬럼의 데이터 타입별 실제 소비 크기와 저장되는 길이를 산정해야 합니다. 이 정보는 테이블 크기를 산정하기 위한 항목별 크기 산정 방법에 사용됩니다.

    데이터 타입별 크기는 “”을 참고합니다.

    아래는 컬럼 정의 및 계산 방식의 예입니다. 크기 산정 테이블은 5개의 컬럼으로 구성되었다고 가정합니다.

    이름

    데이터타입

    데이터길이

    비고

    ""의 데이터 타입별 사이즈 표를 참고하여 위 테이블을 구성하는 각 컬럼의 데이터 타입별 실제 소비사이즈를 산정하면 아래와 같습니다.

    테이블 크기를 산정하기 위해 필요한 항목은 아래와 같습니다.

    크기 예는 각 항목별로 기본으로 정해진 크기, 파라미터로 설정할 수 있는 크기와 운영할 시스템에서 사전 조사된 수치를 나타냅니다.

    250bytes 이하 및 초과 컬럼 개수는 Row의 데이터 길이 테이블을 참고합니다. 초기 예상 건수, 월중 예상 추가 건수, 데이터 보관 월 수는 운영할 시스템의 사용자 환경의 정보입니다.


    본 절에서는 Tibero에서 테이블 크기를 산정하는 방법에 대해서 설명합니다.

    항목
    사전 정보 크기
    실제 저장 크기
    비고

    block당 사용 가능한 데이터 공간 크기입니다.

    c1

    CHAR(10)

    10

    c2

    DATE

    8

    c3

    NUMBER(7,2)

    4

    roundup(7/2)

    c4

    CHAR(500)

    500

    c5

    VARCHAR(3000)

    2,100

    3,000 * 0,7

    Row의 데이터 길이

    2,622

    c1 + c2+ c3 + c4 + c5

    구분

    설명

    CHAR

    문자열의 길이는 byte와 문자를 기준으로 지정한다. CHAR(10) = 10, CHAR(500) = 500

    DATE

    고정 8bytes 이다.

    NUMBER

    항목

    크기 예

    단위

    설명

    Row Directory

    2

    bytes

    row 하나당 bytes

    한 Row 저장에 필요한 공간 = Row Directory + Row Header + Row의 데이터 길이
    + (1 * <250bytes 이하 컬럼개수>) + (3 * <250bytes 초과 컬럼개수>)

    Row Directory

    2

    2

    한 블록의 데이터 공간 = (Block Size - Block Header - ITL공간) * (100 - PCTFREE) / 100

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    Block Size

    8192

    8192

    / Row Space ( 한 블록의 데이터 공간 / 한 Row의 저장에 필요한 공간 )

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    Data Space per Block

    7,286

    7,286

    총 데이터 Row 개수 = <초기 예상 건수> + <월중 예상 추가 건수> * (<데이터 보관 월 수> + 1)

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    초기 예상 건수

    100,000

    100,000

    필요한 총 데이터 공간 = Block Size * Total Row Size / Row Size per Block (Block Size
    * 총 데이터 Row 개수 / 한 블록에 들어갈 수 있는 Row 개수)

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    Block Size

    8,192

    8,192

    항목별 크기 산정

    테이블 크기 산정 방법

    한 Row 저장에 필요한 공간

    산정 공식

    한 블록의 데이터 공간

    산정 공식

    한 블록에 들어갈 수 있는 Row 개수

    산정 공식

    총 데이터 Row 개수

    산정 공식

    필요한 총 데이터 공간

    산정공식

    데이터 타입별 크기 산정
    데이터 타입별 크기 산정

    크기를 2로 나누어 반올림한 값이다. NUMBER(7,2) = roundup(7/2) = 4

    VARCHAR

    지정된 길이의 70%로 가정한다. VARCHAR(3000) = 3,000 * 0,7 = 2,100

    Row Header

    3

    bytes

    row 하나당 bytes

    250bytes 이하 컬럼개수

    3

    개수

    위의 Row의 데이터 길이 테이블에 c1, c2, c3가 대상

    250bytes 초과 컬럼개수

    2

    개수

    위의 Row의 데이터 길이 테이블에 c4, c5가 대상

    Block Size

    8192

    개수

    기본값: 8192 (파라미터)

    Block Header

    48

    bytes

    고정 (Fixed Header)

    INITRANS

    2

    개수

    기본값: 2 (파라미터)

    PCTFREE

    10

    %

    기본값: 10% (파라미터)

    ITL 공간

    48

    bytes

    24 * 2 (24 * INITRANS)

    초기 예상 건수

    100,000

    Rows

    사용자 환경

    월중 예상 추가 건수

    20,000

    Rows

    사용자 환경

    데이터 보관 월 수

    120

    개월

    사용자 환경

    Row Header

    3

    3

    Row의 데이터 길이

    2,622

    2622

    250bytes 이하 컬럼개수

    3

    1 * 3

    1 * 250bytes 이하 컬럼개수

    250bytes 초과 컬럼개수

    2

    3 * 2

    3 * 250bytes 초과 컬럼개수

    Row Space

    2,636

    2+3+2622+(1*3)+(3*2)

    Block Header

    48

    48

    ITL공간

    48

    48

    24 * 2 (24 * INITRANS)

    PCTFREE

    10

    10

    Data Space per Block

    7,286

    (8192-48-48)*(100-10)/100

    Row Space

    2,636

    2,636

    Row Size per Block

    2

    7,286 / 2,636

    월중 예상 추가 건수

    20,000

    20,000

    데이터 보관 월 수

    120

    120+1

    <데이터 보관 월 수> + 1

    Total Row Size

    2,520,000

    100,000 +20,000 *(120+1)

    Total Row Size

    2,520,000

    2,520,000

    Row Size per Block

    2

    2

    Total Table Size

    10,321,920,000 (9.613037GB)

    8,192 * 2,520,000 / 2

    인덱스 크기 산정

    Tibero DB 인덱스 크기 산정 방법에 대해 설명합니다.

    사전 정보

    Tibero에서 인덱스 크기 산정에 필요한 사전 정보로 Key Column 총 길이, Base RowID 산정 기준 그리고 항목별 크기 산정 정보가 필요합니다.

    아래는 Key Column 총 길이, Base RowID 산정 기준 그리고 항목별 크기 산정의 예입니다.

    Key Column 총 길이

    인덱스 크기를 산정하기 위해서는 컬럼의 데이터 타입별 실제 소비 크기와 저장되는 길이을 산정해야하며 이 정보는 인덱스 크기를 산정하기 위한 항목별 크기 산정방법에 사용됩니다. 인덱스 크기를 산정할 때 컬럼에 지정된 데이터 타입별 저장되는 크기 산정이 필요합니다.

    아래는 컬럼 정의 및 계산 방식의 예입니다. 크기 산정 테이블은 5개의 컬럼으로 구성되었다고 가정합니다.

    이름

    ""의 데이터 타입별 사이즈 표를 참고하여 위 테이블을 구성하는 각 컬럼의 데이터 타입별 실제 소비사이즈를 산정한 수치입니다. 자세한 항목별 수치 산정 방법은 ""를 참고합니다.

    크기 선정 대상인 위 테이블의 인덱스는 Local Index와 Not Unique Index로 선별 되었습니다.

    인덱스 크기를 산정하기 위해 필요한 항목은 아래와같습니다.

    크기 예는 각 항목별로 기본으로 정해진 크기, 파라미터로 설정할 수 있는 크기와 운영할 시스템에서 사전 조사된 수 치를 나타냅니다.


    본 절에서는 Tibero에서 인덱스 크기를 산정하는 방법을 설명합니다.

    Leaf Block 일정수마다 Branch Block이 생성됩니다.

    ""의 산정방식 (Block Size * (A+B)) 중 A는 Leaf Block을 B는 Branch Block을 의미합니다.

    Index Split이 일어난 경우 실제 블록의 50% 공간만 차지하게 되므로 사용 공간 최대 값은 최종 계산 결과 * 2를 해 줍니다.

    1. 인덱스의 경우 Create Index로 데이터를 처음 적재하는 경우 PCTFREE로 지정된 비율을 제외하고 블록을 최 대한 사용하여 데이터를 저장합니다.

    2. 인덱스 생성 이후 신규로 인덱스 키 데이터가 추가되는 경우 해당 인덱스 키가 추가되어야 하는 블록에 여유 공 간이 없을 때 SPLIT이 발생하게 됩니다.

    3. SPLIT이 발생하게 되면 새로운 블록이 할당되고 기존 블록에 있던 인덱스 키 데이터를 통상 5:5 비율로 분할하 여 나누어 가지기 때문에 두 개의 블록에 빈 공간이 50% 생깁니다.

    따라서, 인덱스에 데이터 추가가 계속된다고 하면 특정 시점 이후에 Index Split이 얼마나 발생했는지는 정확하게 예측하기는 어렵습니다. 다만, 처음 SPLIT이 발생된 이후, 다음 번 SPLIT이 발생되기까지 빈 공간이 0% ~ 50% 범위에서 유지되기 때문에 평균적으로 절반 정도의 블록이 SPLIT이 되어 있다라고 가정하는 것이 가장 근사하게 추정하는 방법일 것입니다.

    Index Size시트의 크기 산정 방식에서 최종 계산 결과(Total Table Size for Index Spli)에 2를 곱한 것은 모 든 블록이 SPLIT되어 있을 때 최대 사용공간을 가정하여 산출한것이며 만약 평균 개념으로 추정한다면 1.5를 곱해서 계산하는 것이 현실적일 수 있습니다.

    데이터 타입별 크기 산정

    티베로 DB 데이터 타입별 크기 산정 방법에 대해 설명합니다.

    아래 표는 테이블과 인덱스 크기 시트의 계산식에서 적용되는 데이터 타입별 실제 소비 사이즈이며 저장 되는 크기는 산정 길이 +1로 합니다. 예를 들면 데이터의 산정 길이는 8bytes이며 실제 저장 데이터는 8+1=9bytes입니다.

    • 문자형

    Unique Index

    6

    Global, Local 선별

    B

    Unique Index

    0

    Unique, Not Unique 선별

    Not Unique Index

    1

    Unique, Not Unique 선별

    Base RowID 총 길이

    8

    A + B의 합계

    Index Header

    2

    bytes

    기본값: 2

    250bytes 이하 컬럼 개수

    2

    개수

    위의 Key Column 총 길이 테이블에 c1, c2 가 대상이다.

    250bytes 초과 컬럼 개수

    0

    개수

    Block Size

    8192

    개수

    기본값: 8192 (파라미터)

    Block Header

    224

    bytes

    INITRANS

    2

    개수

    기본값: 2 (파라미터)

    PCTFREE

    10

    %

    기본값: 10% (파라미터)

    ITL공간

    48

    bytes

    24 * 2 (24 * INITRANS)

    초기 예상 건수

    100,000

    Rows

    사용자 환경

    월중 예상 추가 건수

    20,000

    Rows

    사용자 환경

    데이터 보관 월 수

    120

    개월

    사용자 환경

    Base RowID

    7

    bytes

    6 + 1

    Index Header

    2

    2

    Base RowID

    7 7

    6 +1

    Key Column 총 길이

    18

    18

    250bytes 이하 컬럼개수

    2

    1 * 2

    1 * 250bytes 이하 컬럼개수

    250bytes 초과 컬럼개수

    0

    3 * 0

    3 * 250bytes 초과 컬럼개수

    Index Entry Space

    31

    2+2+7+18+(1*2)+(3*0)

    224

    224

    ITL공간

    48

    48

    24 * 2 (24 * INITRANS)

    PCTFREE

    10

    10

    Data Space per Block

    7,128

    (8192-224-48)*(100-10)/100

    31

    31

    Entry Size per Block

    229.9355

    7,128 / 31

    20,000

    20,000

    데이터 보관 월 수

    120

    120+1

    <데이터 보관 월 수> + 1

    Total Row Size

    2,520,000

    100,000 + 20,000 * (120+1)

    0.004349046

    1 / 229.9355

    2,520,000

    2,520,000

    Entry Size

    per Block

    229.9355

    229.9355

    Total Index Size

    90,161,152

    8192*(TRUNC(2520000/229.9355,0)

    +TRUNC(2520000/229.9355^2,0))

    180,322,304

    90,161,152 *2

    데이터타입

    데이터길이

    비고

    c1

    CHAR(10)

    10

    c2

    DATE

    8

    c3

    NUMBER(7,2)

    4

    roundup(7/2)

    c4

    CHAR(500)

    500

    c5

    VARCHAR(3000)

    2,100

    3,000*0,7

    Key Column 총 길이

    18

    c1 + c2

    Name

    Type

    데이터길이

    비고

    A

    Global Index

    10

    Global, Local 선별

    항목

    크기 예

    단위

    설명

    Row Directory

    2

    bytes

    기본값: 2

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    Row Directory

    2

    2

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    Block Size

    8192

    8192

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    Data Space per Block

    7,128

    7,128

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    초기 예상 건수

    100,000

    100,000

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    Entry Size per Block

    229.9355

    229.9355

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    Block Size

    8,192

    8,192

    항목

    사전 정보 크기

    실제 저장 크기

    비고

    Total Index Size

    90,161,152

    90,161,152

    Base RowID 산정 기준

    항목별 크기 산정

    인덱스 크기 산정방법

    한 Index Entry의 저장에 필요한 공간

    산정 공식

    한 블록의 데이터 공간

    산정 공식

    한 블록에 들어가는 Entry 개수

    산정 공식

    총 데이터 Row 개수

    산정 공식

    Index Leaf 블록에 필요한 Index Branch 블록의 비율

    산정 공식

    필요한 총 데이터 공간

    산정 공식

    Index Split이 일어난 경우

    산정 공식

    데이터 타입별 크기 산정
    Row의 데이터길이
    필요한 총 데이터 공간

    Block Header

    Index Entry Space

    월중 예상 추가 건수

    Index Branch Ratio

    Total Row Size

    Total Index Size for Index Split

    Row Directory + Index Header + Base RowID
    + Key Column 총 길이 + (1 * <250bytes 이하 컬럼개수>) + (3 * <250bytes 초과 컬럼개수>)
    (Block Size - Block Header - ITL 공간) * (100 - PCTFREE) / 100
    /Data Space per Block / Index Entry Space (한 블록의 데이터 공간
    / 한 Index Entry의 저장에 필요한 공간)
    초기 예상 건수 + 월중 예상 추가 건수 * (데이터 보관 월 수 + 1)
    1 / Entry Size per Block (1 / 한 블록에 들어가는 Entry 개수)
    Block Size *( Total Row Size / Entry Size per Block + Total Row Size
    / Entry Size per Block ^ 2 )
    Index Split이 일어난 경우 데이터 공간 = Total Index Size * 2 (필요한 총 데이터 공간 * 2 )

    설명

    CHAR

    고정/ 가변

    CHAR(10) = 10bytes

    • CHAR(10 BYTE), CHAR(10 CHAR) 문자열의 길이는 byte와 문자를 기준으로 지정한다.

    • CHAR(10)의 형태로 선언하면, byte로 문자 열의 길이가 지정된다.

    • CHAR로 길이를 선언하면 문자가 몇 byte로 표현되는지에 따라 그 길이가 달라진다.

    VARCHAR

    가변

    VARCHAR 가변 VARCHAR(10) =

    (10*0,7)= 7bytes

    지정된 데이터 길이의 0.7로 가정

    NCHAR

    고정

    NCHAR(10) = 30bytes(UTF8),

    20bytes(UTF16 )

    • UTF8 : size의 최대 3배

    • UTF16 : size의 최대 2배

    NVARCHAR

    가변

    NVARCHAR(10) = (10*0.7)*3 =

    21bytes(UTF8), 14bytes(UTF16)

    • UTF8 : size의 최대 3배

    • UTF16 : size의 최대 2배

    RAW

    가변

    실제로 저장되는 데이터의 길이

    LONG

    가변

    실제로 저장되는 데이터의 길이

    LONG RAW

    가변

    실제로 저장되는 데이터의 길이

    • 숫자형

    타입

    고정/ 가변

    길이 산정 예

    설명

    NUMBER

    가변

    NUMBER(7)

    =roundup(7/2) = 4bytes

    roundup(size/2) size가 38 자리수보다 크면 38 로 정 의하고 38 자리수 미만의 음수는 1byte를 더한다.

    • 날짜형

    타입

    고정/가변

    길이 산정 예

    DATE

    고정

    8bytes

    TIME

    고정

    • 간격형

    타입

    고정/가변

    길이 산정 예

    INTERVAL YEAR TO MONTH

    고정

    5bytes

    INTERVAL DAY TO SECOND

    고정

    • 대용량 객체형

    타입

    고정/가변

    길이 산정 예

    설명

    CLOB

    가변

    실제로 저장되는 데이터의 길이 ("" 참조)

    • 내재형

    타입

    고정/가변

    길이 산정 예

    설명

    ROWID

    고정

    10bytes


    • NULL일 때

    • 크기가 0일 때

    • 크기가 4000보다 작을 때

    • 크기가 96KB 보다 작을 때

    • 그 이상일 때

    위 계산에서 LOB 데이터를 별도 segment로 저장하기 위한 overhead는 계산하지 않습니다.

    long의 경우 데이터의 길이가 길어지면 chained row piece로 나뉘어서 저장되는데, row piece를 연결시키기 위한 추가 overhead는 고려하지 않습니다.

    타입

    고정/ 가변

    데이터 타입별 크기 산정 방법

    길이 산정 예

    0byte
    16bytes(lob locator)
    16bytes(lob locator) + 16bytes(lob inode)
    16bytes(lob locator) + 16bytes(lob inode) + 48bytes(12 page dbas)
    16bytes(lob locator) + 16bytes(lob inode) + 48bytes * (LOB 컬럼 크기 / 64KB)(lob index)

    LOB Type 저장에 필요한 overhead

    INTEGER

    가변

    NUMBER와 같다.

    FLOAT

    가변

    NUMBER와 같다.

    8bytes

    TIMESTAMP

    가변

    12bytes

    TIMESTAMP WITH TIME ZONE

    고정 1

    7bytes

    TIMESTAMP WITH LOCAL TIME ZONE

    고정

    12bytes

    12bytes

    BLOB

    가변

    실제로 저장되는 데이터의 길이 ("" 참조)

    XMLTYPE

    가변

    CLOB과 같다.

    LOB Type 저장에 필요한 overhead
    LOB Type 저장에 필요한 overhead

    물리 설계

    Tibero DBMS 설치 및 운영하기 전 효율적 시스템 사용을 위한 DB 물리 설계 방법을 제시합니다.

    Redo Log Files, Undo 및 Temp 테이블 스페이스 그리고 메모리 영역의 크기 산정을 위해서는 먼저 Tibero의 특성에 대한 이해가 필요하며 관련 정보는 Tibero 관리자 안내서를 참고합니다.

    또한, Table 및 Index 크기를 산정하기 위해 필요한 정보와 산정 방식은 Tibero의 Data Block Architecture 특성을 고려합니다.

    본 문서는 총 8개의 장으로 구성됩니다.

    개요

    Tibero 특성에 대한 상세정보는Tibero 관리자 안내서의 "'', "스키마 객체의 관리"를 참고합니다.

    안내서 구성

    테이블 크기 산정

    Tibero의 테이블 크기를 산정하기 위해 필요한 정보와 방법에 대해 안내합니다.

    🔎

    인덱스 크기 산정

    Tibero의 인덱스 크기를 산정하기 위해 필요한 정보와 방법에 대해 안내합니다.

    🔎

    데이터 타입별 크기 산정

    데이터 타입별 크기를 산정하는방법을안내합니다.

    🔎

    Redo 로그 파일 크기 산정

    Tibero의 Redo 로그 파일 크기 산정방법에 대해 안내합니다.

    🔎

    Undo 테이블 스페이스 크기 산정

    Tibero의 Undo 테이블 스페이스 크기 산정방법에 대해 안내합니다.

    🔎

    Temp 테이블 스페이스 크기 산정

    Tibero의 Temp 테이블 스페이스 크기 산정방법에 대해 안내합니다.

    🔎

    Shared Memory 크기 산정

    Tibero의 Shared Memory 크기 산정방법에 대해 안내합니다.

    🔎

    SQL Execution Work Area 크기 산정

    Tibero의 SQL Execution Work Area 크기 산정방법에 대해 안내합니다.

    🔎

    문서 다운로드

    Tibero_7_물리설계 안내서.pdf
    PDF · 4MB
    Open
    테이블 크기 산정 바로가기
    인덱스 크기 산정 바로가기
    데이터 타입별 크기 산정 바로가기
    Redo 로그 파일 크기 산정 바로가기
    Undo 테이블 스페이스 크기 산정 바로가기
    Temp 테이블 스페이스 크기 산정 바로가기
    Shared Memory 크기 산정
    바로가기
    SQL Execution Work Area 크기 산정 바로가기
    파일 및 데이터 관리