Appendix G. Shared Memory 크기 산정

내용 목차

G.1. 개요
G.2. 고려사항
G.3. 용량 산정

본 장에서는 Tibero의 SQL Execution Work Area 크기 산정방법에 대해 설명한다.

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율을 보고 판단한다.

      • Hit율이 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 파라미터의 기본값 : 10MB)

    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