> For the complete documentation index, see [llms.txt](https://docs.tibero.com/tibero-manuals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tibero.com/tibero-manuals/7.2.6.manuals/installation-guide/appendix/tablespace-sizing.md).

# Appendix E. Undo 테이블 스페이스 크기 산정

Tibero 설치 또는 운용 시, 필요한 Undo 테이블 스페이스 용량을 계산하고 조정하는 방법에 대해 설명합니다.

## 개요

데이터 갱신이 많은 시스템에서는 Undo 테이블스페이스에서 I/O가 많이 발생하므로, Undo 테이블스페이스를 여러 데이터 파일로 구성해 I/O를 분산시킬 수 있습니다.

Undo 자동 관리는 다음과 같은 장점이 있습니다.

* 설계 및 관리 용이(rollback segment)
* Undo 데이터의 overwrite 방지
* 영역 확장 용이
* 플래시백 쿼리 이용 가능

{% hint style="info" %}
**참고**

Tibero는 수동 관리를 지원하지 않습니다.
{% endhint %}

## 고려사항

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

* 데이터 파일 용량, UNDO\_RETENTION, Undo Segment 개수
* 각 Undo Segment 공간은 자동으로 관리되므로, 사용자는 전체 Undo Segment의 최소/최대 개수와 데이터 파일 용량만 고려하면 됩니다.

– 최소 Undo Segment 개수(USGMT\_ONLINE\_MIN)의 기본값은 11입니다. 단, Undo Segment 개수보다 동시 수행 트랜잭션 개수가 많아 부하가 발생하는 경우, 추가 Undo Segment를 생성하는 오버헤드가 발생합니다. 이와 같은 경우, 예상되는 동시 수행 트랜잭션 개수만큼 USGMT\_ONLINE\_MIN을 설정하여, 미리 Undo Segment를 생성해 놓으면 오버헤드를 줄일 수 있습니다.

다음은 인스턴스별 Undo Segment 개수를 확인하는 방법입니다.

```
SELECT COUNT(*) FROM dba_rollback_segs
           WHERE tablespace_name = (SELECT value FROM _vt_parameter WHERE name = 'UNDO_TABLESPACE')
```

USGMT\_ONLINE\_MIN이 이미 생성된 Undo Segment 개수보다 크게 설정됐다면, (USGMT\_ONLINE\_MIN - 이미 생성된 Undo Segment 개수)만큼 부팅 과정에서 추가 생성합니다. TAC의 경우, 해당 파라미터를 각 인스턴스별로 적용할 수 있으며, 적용 후 부팅 시 각 인스턴스별 Undo Segment 개수가 다른 것을 확인할 수 있습니다.

– 최대 Undo Segment 개수(USGMT\_ONLINE\_MAX)는 각 인스턴스별로 생성할 수 있는 Undo Segment의 상한을 의미합니다.

Tibero는 하나의 Undo Segment를 여러 트랜잭션이 공유하여 사용하지 않도록, 동시 수행 트랜잭션 개수가 많을 때, 가능한 추가 Undo Segment를 생성합니다.

USGMT\_ONLINE\_MIN, USGMT\_ONLINE\_MAX 파라미터는 각 인스턴스별로 따로 적용되기 때문에 적합한 값을 설정하는 것을 권장합니다.

## 용량 계산 방법

아래 기준에 해당하는 Undo 테이블스페이스 크기를 계산할 수 있습니다.

* Undo 테이블스페이스를 생성하는 데 필요한 최소 크기
* 예상 동시 수행 트랜잭션 수를 기준으로 한 예상 크기
* TPR 정보를 이용한 실제 사용 크기

DB를 처음 설치할 때는 최소 크기와 예상 크기 중 큰 값을 기준으로 Undo 테이블스페이스 크기를 산정합니다.

이후 TPR에서 트랜잭션 최대 부하가 발생한 시점의 '초당 Undo 블록 소모량'을 기준으로, 예상 크기와 실제 사용 크기가 일치하는지 검증할 수 있습니다.

**\[그림 1] Tibero TPR Report**

![Tibero TPR Report](https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/XylOaOVGfRyUEXe8plDA/Tibero%20TPR%20Report.png)

다음은 계산 공식에서 사용되는 항목과 설명입니다.

<table><thead><tr><th width="295">항목</th><th>설명</th></tr></thead><tbody><tr><td>USGMT_ONLINE_MIN</td><td>인스턴스당 Undo Segment 최소 개수</td></tr><tr><td>USGMT_ONLINE_MAX</td><td>인스턴스당 Undo Segment 최대 개수(상한)</td></tr><tr><td>MAX_SESSION_COUNT</td><td>최대 트랜잭션 개수</td></tr><tr><td>USGMT_UNIFORM_EXTSIZE * 2</td><td>Undo Segment 1개 생성 시 필요한 용량<br>각 Undo Segment는 최소 2개의 Undo extent가 필요</td></tr><tr><td>초당 Undo 블록 소모량</td><td>DB 운영 중 TPR 리포트의 Undo Statistics 섹션에서 최대 부하 구간의 Undo blocks / 트랜잭션 수행 시간(초)으로 계산</td></tr><tr><td>UNDO_RETENTION</td><td>Undo extent를 재사용하거나 반환하지 않도록 유지시켜 주는 시간, 기본 900초</td></tr><tr><td>여유값</td><td>필요한 경우 여유값을 충분히 두는 것이 좋음</td></tr></tbody></table>

다음은 위 항목을 기준으로 Undo 테이블스페이스 용량을 계산하는 공식입니다.

Undo Segment 1개 생성 시 필요한 용량 = DB\_BLOCK\_SIZE(블록 크기, 기본 8KB) \* \_USGMT\_UNIFORM\_EXTSIZE(기본 512) \* 2 = 8MB

* 최소 크기 = USGMT\_ONLINE\_MIN \* Undo Segment 1개 생성 시 필요한 용량
* 예상 크기 = MAX\_SESSION\_COUNT \* Undo Segment 1개 생성 시 필요한 용량 + 여유값
* 실제 사용 크기 = 초당 Undo 블록 소모량 \* UNDO\_RETENTION \* DB\_BLOCK\_SIZE
