Versions Compared

Key

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

Table of Contents

 

 

 

버전

...

ALTIBASE HDB 모든 버전

 

 

 

원인

...

ALTIBASE 메모리 테이블스페이스의 경우는 모든 메모리 테이블스페이스의 합산이 $ALTIBASE_HOME/conf/altibase.properties 에서 MEM_MAX_DB_SIZE를 초과할 수 없습니다. 이 에러메시지는 모든 공간이 소진되어 발생합니다.

 

MEM_MAX_DB_SIZE란?

...

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

메모리 사용율 조회 방법

...

Code Block
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              920              621              142      12.13           
1 row selected.
                                                                           

위의 조회 결과  ALLOC_SIZE가 MEM_MAX_DB_SIZE까지 도달하였을 때 'Too many pages are allocated' 에러가 발생 합니다.

 

 

조치 방법

...

아래 에러가 발생하지 않게 하기 위해서는 $ALTIBASE_HOME/conf/altibase.properties 에서 MEM_MAX_DB_SIZE 프로퍼티값을 늘려주셔야 합니다.

...

조치 이후에는 어떤 이유로 메모리 테이블스페이스의 사용량이 증가 하였는지 각 테이블 별 사용량의 조회나 대량 변경작업등이 발생하지 않았는지 확인하여 조치할 필요가 있습니다.

변경 방법

  1. 알티베이스 서버 중지

     

    $ server stop
  2. altibase.properties 파일 변경

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

     

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

     

    $ server start

 

 

 

변경시 유의사항

...


디스크 공간

메모리 테이블스페이스는 백업 용도로 두 벌의 '메모리 체크포인트 이미지 파일'을 디스크에 저장합니다. 그래서 메모리 데이터 사용량보다 보다 두 배의 디스크 공간이 필요합니다.

...

예) 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 값이 충분히 크게 설정 되어 있는지 확인합니다. maxdsiz_64bit 값이 ALTIBASE의 property의 MEM_MAX_DB_SIZE값보다 작을 시에도 'Too many pages are allocated' 에러가 발생할 수 있으므로 root 계정으로 ALTIBASE의 property의 MEM_MAX_DB_SIZE보다 크게 설정해야 합니다.
Linux, SunOS 는 해당 없습니다.

 

 

참고자료

...