> 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/shared-memory-sizing.md).

# Appendix F. Shared Memory 크기 산정

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

## 개요

Tibero Shared Memory는 부팅할 때 고정된 용도로 사용되는 Fixed 영역과 운영 중에 자동으로 할당되어 사용되는 Shared 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를 돌려본 후 TPR 리포트의 Buffer Cache 적중률을 보고 판단합니다.
    * 적중률이 90% 이하이면 Buffer Cache 크기를 늘려야 합니다.
  * **Shared Pool Memory**
    * Workload를 돌려본 후 v$sga의 ‘SHARED POOL MEMORY’ 항목의 사용률을 보고 판단합니다.
    * Shared Pool 사용률이 너무 높으면(Free 영역이 적은 경우) Shared Pool 크기를 늘려야 합니다.
    * 세션당 최소 1M 이상의 Shared Pool 영역 확보가 필요합니다.

## 용량 산정

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

```
SQL> select * from v$sga; 
NAME TOTAL USED
--------------------  ---------  ---------
SHARED MEMORY         536870912  536870912
FIXED MEMORY          430875880  430875880
SHARED POOL MEMORY    105992872   40974968
SHARED POOL ALOCATORS         1          1
Database Buffers      357892096  357892096
Redo Buffers           10485760   10485760
```

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

### **Shared Memory**

다음은 TOTAL\_SHM\_SIZE 파라미터 설정값을 조회하는 예입니다.

```
SQL> show param total_shm_size 
NAME               TYPE      VALUE
----------------   --------  ---------
TOTAL_SHM_SIZE     INT64     536870912

```

### **Buffer Cache**

다음은 DB\_CACHE\_SIZE 파라미터를 설정해서 조회하는 예입니다.

```
SQL> show param db_cache_size 
NAME               TYPE      VALUE
----------------   --------  ---------
DB_CACHE_SIZE      UINT64    357892096
```

* 싱글 모드 : TOTAL\_SHM\_SIZE의 2/3
* TAC 모드 : TOTAL\_SHM\_SIZE의 1/2

### **Log Buffer**

다음은 LOG\_BUFFER 파라미터를 설정해서 조회하는 예입니다. (LOG\_BUFFER 파라미터의 기본값: 100MB)

```
SQL> show param log_buffer 
NAME               TYPE      VALUE
----------------   --------  ---------
LOG_BUFFER         UINT32    10485760
```

### **Shared Pool Memory**

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

```
TOTAL_SHM_SIZE - [Fixed Memory]
```

* 싱글 모드

전체 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보다 커야 합니다.

```
[전체 Shared Pool 크기] = _MIN_SHARED_POOL_SIZE + [CCC 공간] + [CWS 공간] + [Free Shared Pool 크기]
```

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

```
[Free Shared Pool 크기] > ([전체 Shared Pool 크기] - _MIN_SHARED_POOL_SIZE) / 2
```
