Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

MEM_MAX_DB_SIZE에 대한 내용 확인 및 변경방법에 대해 알아 봅니다.

 

대상버전

...

  • Altibase 전체 버전

설명

...

  • 물리 메모리에 저장되는 메모리 테이블스페이스(메모리 테이블 또는 메모리 데이터)로 사용할 수 있는 최대 메모리 크기를 의미합니다.
  • 모든 메모리 테이블스페이스를 합한 전체 사용량에 대한 제약입니다제약입니다.
  • 메모리 테이블스페이스 각각이 사용할 수 있는 최대 크기가 아닙니다.
  • 메모리 테이블에 생성한 인덱스 크기는 포함되지 않습니다.
  • 변경 트랜잭션 수행 시 발생하는 과거 데이터도 포함됩니다. 
    변경 트랜잭션이 수행될 경우 트랜잭션이 종료되기 전까지 과거 데이터를 유지하는데(MVCC기법), 메모리 테이블의 경우 메모리 테이블 내에 레코드의 복제본을 생성합니다. 
  • 메모리 테이블스페이스 생성 시 최대값을 지정하지 않으면 MEM_MAX_DB_SIZE 설정 값만큼 자동 확장됩니다.

고려사항

...

현재 값 보다 크게 설정하고자 할 때

...

MEM_MAX_DB_SIZE 를 현재 값보다 크게 설정하고자 할 때 고려해야 할 부분에 대해 설명합니다

...

    • 메모리 테이블스페이스는 백업 용도로 두 벌의 '메모리 체크포인트 이미지 파일'을 디스크에 저장합니다. 그래서 메모리 데이터 사용량보다 보다 두 배의 디스크 공간이 필요합니다.
    • MEM_MAX_DB_SIZE 를 크게 설정하면 디스크 사용량도 증가하므로 MEM_MAX_DB_SIZE 변경 전에 디스크 공간을 여유있게 확보해야 합니다. 
      예) MEM_MAX_DB_SIZE 가 60G 일 경우, 120G 의 디스크 공간이 필요. 

사용자 환경 설정 (Linux/Unix)

...

    • ulimit -a 로 수행하여 아래 설정들이 OS 에서 허용하는 최대 값으로 설정되어 있는 지 확인해야 합니다.
      max memory size / virtual memory

커널 파라미터(AIX, HP-UX)

...

    • AIX 경우 /etc/security/limits 파일 내용에서 data, rss, fsize등에 대해서 -1로 설정이 되어 있는지 확인합니다.
    • HP의 경우 kctune을 통해 maxdsiz_64bit 값이 충분히 크게 설정 되어 있는지 확인합니다.
    • Linux, SunOS 는 해당 없습니다.

현재 값 보다 작게 설정하고자 할 때

...

MEM_MAX_DB_SIZE 를 현재 값보다 작게 설정하고자 할 때 고려해야 할 부분에 대해 설명합니다.

 

    • MEM_MAX_DB_SIZE 는 무조건 작게 설정할 수 없습니다.
    • 증가한 '체크포인트 이미지 파일' 크기를 확인한 후 그보다 크게 설정해야 합니다.
      아래 문장으로 그 크기를 확인할 수 있습니다.

      TOTAL 이 MAX 보다 작다면 TOTAL 보다는 크면서 기존 값보다는 작게 MEM_MAX_DB_SIZE 를 설정합니다.

      Tip
      titleIE 사용자에게

      IE 에서 SQL 문장을 복사하면 빈 줄이 생길 수 있으니 필요 시 첨부 파일을 사용하시기 바랍니다. total_memory_tablespaces_usage.txt

      Code Block
      languagesql
      set linesize 1024
      set colsize 20
      SELECT TO_CHAR(MEM_MAX_DB_SIZE/1024/1024, '999,999,999') '       MAX(M)',                                       -- MAX(M)   : MEM_MAX_DB_SIZE 설정 값
             TO_CHAR(MEM_ALLOC_PAGE_COUNT*32/1024, '999,999,999') '     TOTAL(M)',                                    -- TOTAL(M) : 메모리 테이블스페이스로 할당 된 전체 페이지 크기. 체크포인트 이미지 파일 크기를 의미하기도 함. 
             TO_CHAR((MEM_ALLOC_PAGE_COUNT-MEM_FREE_PAGE_COUNT)*32/1024, '999,999,999') '     ALLOC(M)',              -- ALLOC(M) : 메모리 테이블스페이스에서 사용하는 메모리 크기
             (SELECT TO_CHAR(SUM((FIXED_USED_MEM + VAR_USED_MEM))/1024/1024, '999,999,999')
                FROM V$MEMTBL_INFO) '      USED(M)',                                                                  -- USED(M)  : ALLOC 중에서 데이터가 저장된 메모리 크기
             TO_CHAR((((MEM_ALLOC_PAGE_COUNT-MEM_FREE_PAGE_COUNT)*32*1024)/MEM_MAX_DB_SIZE)*100, '99.99') 'USAGE(%)'  -- USAGE(%) : MAX 대비 ALLOC 사용률
        FROM V$DATABASE ;
             MAX(M)         TOTAL(M)         ALLOC(M)         USED(M)     USAGE(%)         
      -------------------------------------------------------------------------------------------
             5,120            2,920              621              142      12.13           
      1 row selected.
      Expand
      titleTOTAL 은...

      TOTAL(M) 은 메모리 테이블스페이스로 할당 된 전체 페이지 크기를 의미합니다.

      이 값에는 메모리 테이블스페이스의 free page 도 포함합니다.
      free page 는 물리 메모리에 로딩되지 않을 수도 있습니다. 그래서 이 값을 메모리 테이블스페이스의 물리 메모리 사용량으로 볼 수는 없습니다.

      이 값은 체크포인트 이미지 파일의 크기를 의미하기도 합니다.

      TOTAL 은 DROP TABESPACE 한 경우를 제외하고는 줄어들지 않습니다. 알티베이스 서버를 재구동 해도 줄어들지 않습니다.

       

      Code Block
      title체크포인트 이미지 파일과 비교
      languagebash
      iSQL> /
            MAX(M)         TOTAL(M)         ALLOC(M)          USED(M)    USAGE(%)         
      -------------------------------------------------------------------------------------------
             5,120            4,108              158              123       3.10           
      1 row selected.
      
      
      iSQL> ! ls -l $ALTIBASE_HOME/dbs/*MEM* | sort -n | awk '{sum += $5} END{print (sum/1024/1024)/2" MB"}'        -- 체크포인트 수행 시점에 따라 달리 보일 수 있습니다. 
      4108.17 MB                                                                                                    -- 체크포인트가 수행되면 TOTAL과 동일해집니다. 

DB재구동

...

    • MEM_MAX_DB_SIZE 의 값을 변경하기 위해서는 Altibase를 재구동해야만 합니다.
    • 운용중 property를 동적으로 변경 할 수 없습니다. (서비스 중단이 필요합니다)



절차

...


변경절차


    1. 알티베이스 서버 중지

      Code Block
      languagebash
      $ server stop
    2. altibase.properties 파일 변경

      알티베이스 서버 프로퍼티 파일($ALTIBASE_HOME/conf/altibase.properties) 에서 MEM_MAX_DB_SIZE 를 변경 후 저장합니다.

      Code Block
      languagebash
      $ vi $ALTIBASE_HOME/conf/altibase.properties
      MEM_MAX_DB_SIZE        = 2G # MEM_MAX_DB_SIZE
    3. 알티베이스 서버 구동

      Code Block
      languagebash
      $ server start

 

발생 가능 에러 메세지

...

[FAILURE] The size of the DB file(SYS_TBS_MEM_DATA-숫자-숫자) exceeds the size specified in the MEM_MAX_DB_SIZE property.

    • [원인]

      MEM_MAX_DB_SIZE를 증가한 '체크포인트 이미지 파일' 크기보다 작게 설정할 경우, 구동시(startup)  에러가 발생할 수 있습니다

    • [해결방법]

      MEM_MAX_DB_SIZE를 증가한 '체크포인트 이미지 파일' 크기보다 크게 설정해야 합니다.

      Expand
      titleError 전문
      Code Block
      languagesql
      $ server start
      -----------------------------------------------------------------
           Altibase Client Query utility.
           Release Version 7.1.0.5.9
           Copyright 2000, ALTIBASE Corporation or its subsidiaries.
           All Rights Reserved.
      -----------------------------------------------------------------
      ISQL_CONNECTION = UNIX, SERVER = localhost
      [ERR-910FB : Connected to idle instance]
      Connecting to the DB server.... Connected.
      
      TRANSITION TO PHASE : PROCESS
      
      TRANSITION TO PHASE : CONTROL
      [FAILURE] The size of the DB file(SYS_TBS_MEM_DATA-0-2) exceeds the size specified in the MEM_MAX_DB_SIZE property.
      Startup Failed....
      [ERR-91015 : Communication failure.]
      
      

       

       

...

    • 아래 쿼리로 확인 가능합니다.  

      Code Block
      languagesql
      -- v$property
      iSQL> set linesize 1024
      iSQL> set colsize 20
      iSQL> SELECT NAME, TO_CHAR(VALUE1/1024/1024, '999,999') AS 'VALUE(MB)' FROM V$PROPERTY WHERE NAME = 'MEM_MAX_DB_SIZE';
      -- v$database
      iSQL> set linesize 1024
      iSQL> set colsize 20
      iSQL> SELECT TO_CHAR(MEM_MAX_DB_SIZE/1024/1024, '999,999') AS 'MEM_MAX_DB_SIZE(MB)' FROM V$DATABASE;

 

참고

...

...