버전
ALTIBASE HDB 모든 버전
원인
ALTIBASE 메모리 테이블스페이스의 경우는 모든 메모리 테이블스페이스의 합산이 $ALTIBASE_HOME/conf/altibase.properties 에서 MEM_MAX_DB_SIZE를 초과할 수 없습니다. 이 에러메시지는 모든 공간이 소진되어 발생합니다.
MEM_MAX_DB_SIZE란?
- 물리 메모리에 저장되는 메모리 테이블스페이스(메모리 테이블 또는 메모리 데이터)로 사용할 수 있는 최대 메모리 크기를 의미합니다.
- 모든 메모리 테이블스페이스를 합한 전체 사용량에 대한 제약입니다.
- 메모리 테이블스페이스 각각이 사용할 수 있는 최대 크기가 아닙니다.
- 메모리 테이블에 생성한 인덱스 크기는 포함되지 않습니다.
- 변경 트랜잭션 수행 시 발생하는 과거 데이터도 포함됩니다.
변경 트랜잭션이 수행될 경우 트랜잭션이 종료되기 전까지 과거 데이터를 유지하는데(MVCC기법), 메모리 테이블의 경우 메모리 테이블 내에 레코드의 복제본을 생성합니다. - 메모리 테이블스페이스 생성 시 최대값을 지정하지 않으면 MEM_MAX_DB_SIZE 설정 값만큼 자동 확장됩니다.
메모리 사용율 조회 방법
위의 조회 결과 ALLOC_SIZE가 MEM_MAX_DB_SIZE까지 도달하였을 때 'Too many pages are allocated' 에러가 발생 합니다.
조치 방법
아래 에러가 발생하지 않게 하기 위해서는 $ALTIBASE_HOME/conf/altibase.properties 에서 MEM_MAX_DB_SIZE 프로퍼티값을 늘려주셔야 합니다.
이 값을 늘려주면 알티베이스 DB Size는 최대 이 사이즈까지 증가할 수 있습니다. 프로퍼티 수정 후 알티베이스를 재구동 해주셔야 적용됩니다.
조치 이후에는 어떤 이유로 메모리 테이블스페이스의 사용량이 증가 하였는지 각 테이블 별 사용량의 조회나 대량 변경작업등이 발생하지 않았는지 확인하여 조치할 필요가 있습니다.
변경 방법
알티베이스 서버 중지
$ server stop
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
알티베이스 서버 구동
$ server start
변경시 유의사항
디스크 공간
메모리 테이블스페이스는 백업 용도로 두 벌의 '메모리 체크포인트 이미지 파일'을 디스크에 저장합니다. 그래서 메모리 데이터 사용량보다 보다 두 배의 디스크 공간이 필요합니다.
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 값이 충분히 크게 설정 되어 있는지 확인합니다. maxdsiz_64bit 값이 ALTIBASE의 property의 MEM_MAX_DB_SIZE값보다 작을 시에도 'Too many pages are allocated' 에러가 발생할 수 있으므로 root 계정으로 ALTIBASE의 property의 MEM_MAX_DB_SIZE보다 크게 설정해야 합니다.
Linux, SunOS 는 해당 없습니다.
참고자료