...
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
- ulimit -a 로 수행하여 아래 설정들이 OS 에서 허용하는 최대 값으로 설정되어 있는 지 확인해야 합니다.
커널 파라미터(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 title IE 사용자에게 IE 에서 SQL 문장을 복사하면 빈 줄이 생길 수 있으니 필요 시 첨부 파일을 사용하시기 바랍니다. total_memory_tablespaces_usage.txt
Code Block language sql 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 title TOTAL 은... TOTAL(M) 은 메모리 테이블스페이스로 할당 된 전체 페이지 크기를 의미합니다.
이 값에는 메모리 테이블스페이스의 free page 도 포함합니다.
free page 는 물리 메모리에 로딩되지 않을 수도 있습니다. 그래서 이 값을 메모리 테이블스페이스의 물리 메모리 사용량으로 볼 수는 없습니다.이 값은 체크포인트 이미지 파일의 크기를 의미하기도 합니다.
TOTAL 은 DROP TABESPACE 한 경우를 제외하고는 줄어들지 않습니다. 알티베이스 서버를 재구동 해도 줄어들지 않습니다.
Code Block title 체크포인트 이미지 파일과 비교 language bash 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를 동적으로 변경 할 수 없습니다. (서비스 중단이 필요합니다)
절차
...
변경절차
알티베이스 서버 중지
Code Block language bash $ server stop
altibase.properties 파일 변경
알티베이스 서버 프로퍼티 파일($ALTIBASE_HOME/conf/altibase.properties) 에서 MEM_MAX_DB_SIZE 를 변경 후 저장합니다.
Code Block language bash $ vi $ALTIBASE_HOME/conf/altibase.properties MEM_MAX_DB_SIZE = 2G # MEM_MAX_DB_SIZE
알티베이스 서버 구동
Code Block language bash $ 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 title Error 전문 Code Block language sql $ 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 language sql -- 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;
참고
...
...