개요
본 문서는 Altibase의 효과적인 사용을 위해 altibase.properties 파일 내의 속성들을 설명하고 어떻게 값을 지정할 수 있는지 설명한다.
본 문서에서는 Hidden property에 대한 설명은 포함하고 있지 않다.
본 문서는 Altibase 7.1.0, Altibase 7.3.0 을 기준으로 작성되었다. 사용자는 아래 문서를 함께 참조하는 것을 권장한다.
- 『Altibase 운영을 위한 시스템 리소스 용량산정 가이드』
- 『효율적인 Altibase 이중화 구성 가이드』
Altibase 설정 항목
Altibase의 각 버전별 프로퍼티에 대한 자세한 설명은 Altibase 버전별 General Reference편을 참고할 수 있다.
Altibase 버전별 매뉴얼은 아래 링크를 참고 한다.
URL : http://support.altibase.com/kr/manual
프로퍼티 조회 및 설정
각 프로퍼티는 다음과 같이 조회할 수 있다.
또는, $ALTIBASE_HOME/conf/altibase.properties 파일에서 조회가 가능하다. 다만, 파일을 통한 조회에서는 일부 숨겨 진 속성 값들은 알 수 없고 현재 적용된 값을 정확히 조회하기 위해서는 위와 같은 SQL을 통한 조회를 권장한다.
각 속성값의 변경은 설정 파일에 기술하거나 또는 DCL문(ALTER SYSTEM/ALTER SESSION 구문)을 통해 실시간 변경이 가능하다. 일부 속성은 읽기전용 값으로 운영 단계에서 변경할 수 없는 것들도 존재한다. 그런 속성을 변경할 경우 아래와 같은 오류가 발생한다.
설정 파일에 속성을 변경하는 경우는 다음과 같은 형식을 취한다.
예를 들어 DCL을 통해 변경할 경우는 다음과 같이 수행 한다. (대/소문자 구분 없음)
DCL의 경우는 세션 레벨과 시스템 레벨로 나뉘어 변경이 가능한 항목들이 존재한다. 그러나 2가지 경우 모두 Altibase를 재 구동 한 경우에는 설정 파일에 기술된 값으로 재설정 되기 때문에 영구적으로 반영하고자 할 경우에는 설정 파일(altibase.properties)을 변경해야 한다.
(DB를 한번 생성한 후 변경할 수 없는 항목은 문서 후반에 소개한다.)
각 프로퍼티에서 "?" 표기의 의미는 "$ALTIBASE_HOME"이라는 환경변수에 정의된 경로를 의미한다.
Altibase 설정 권고
$ALTIBASE_HOME/conf/altibase.properties 파일에 기술된 각 항목을 각 분류 별로 정리하여 권고안에 대해 설명한다. 사용자의 시스템은 매우 다양한 환경을 갖기 때문에 본 권고안은 일반적인 경험에 의거하여 권고된다. 따라서, 설정 파일의 변경 및 적용은 Altibase 엔지니어와 충분한 사전 협의를 통해 진행할 것을 권고한다.
DB생성 시점에 최소 수정 해야 하는 프로퍼티
DB를 생성하는 시점에 사용자가 최소한 설정해야 하는 항목은 다음과 같다. 설명의 이해를 위해 디스크의 볼륨이 다음과 같이 구성되었다고 가정한다.
디스크 볼륨 | 설명 |
---|---|
/home/altibase | Altibase가 설치된 경로 |
/home/altidata | 데이터 파일이 저장될 디렉토리 |
/home/altilog | 트랜잭션 로그 파일이 저장될 디렉토리 |
위의 볼륨 구성으로 가정할 경우 아래와 같이 예를 들어 설정할 수 있다.
설정 항목 | 기본 값 | 설명 |
---|---|---|
DB_NAME | mydb | 사용자가 임의의 이름으로 설정 |
MEM_DB_DIR | ?/dbs | /home/altidata |
DEFAULT_DISK_DB_DIR | ?/dbs | /home/altidata |
LOGANCHOR_DIR | ?/logs | /home/altilog |
LOG_DIR | ?/logs | /home/altilog |
ARCHIVE_DIR | ?/arch_logs | 아카이브 모드로 설정했을 경우 백업 디렉토리를 지정할 것을 권장한다. (ex: /home/altibackup/arch_log) |
MEM_MAX_DB_SIZE | 2G | 용량 산정을 통해 예측한 크기로 설정한다. (ex : 8G) |
BUFFER_AREA_SIZE | 128M | 디스크 테이블을 사용할 경우 버퍼의 크기는 성능과 밀접한 연관이 있음으로 가용한 물리적 메모리 범위 내에서 크게 설정하도록 한다. 1G 이상을 권장한다. |
PORT_NO | 20300 | 20300 과 같이 시스템 내에 다른 프로세스가 사용 중이지 않는 포트를 지정하도록 한다. |
AUTO_COMMIT | 1 | 1로 설정한 경우 DML수행 후 자동으로 DB에 반영되기 때문에 만일, 사용자가 직접 제어하고자 할 경우에는 0으로 설정하도록 한다. |
SQL_PLAN_CACHE | 64M | SQL 플랜 캐시의 최대 크기를 나타낸다. 중복되는 SQL이 많을 수록 SQL 플랜 캐시는 메모리 절약 효과가 있다. |
REPLICATION_PORT_NO | 0 | 이중화 사용이 필요시에 포트를 지정하도록 한다. |
DB생성 이후 변경할 수 없는 프로퍼티
Altibase를 한번 생성한 이후 최초 설정한 값에서 어떤 형태로든 변경할 경우 Altibase가 재 구동이 안 되는 몇 가지 프로퍼티가 존재한다. 따라서, 이 프로퍼티는 최초에 설정할 때 신중하게 설정하는 것을 권고한다.
설정 항목 | 기본값 |
---|---|
DB_NAME | mydb (생성 시 지정) |
LOG_FILE_SIZE | 10M (생성 시 지정) |
EXPAND_CHUNK_PAGE_COUNT | 128 (생성 시 지정) |
TRANSACTION_TABLE_SIZE | 1024 (상향 조절만 가능) |
CHARACTERSET | DB 생성 시점에 지정 |
NATIONAL CHARACTERSET | DB 생성 시점에 지정 |
이 프로퍼티를 변경하기 위해서는 전체 데이터에 대한 마이그레이션 즉, 새롭게 DB를 재 생성 해야 하는 작업을 수행해야만 한다.
파일 경로 설정 프로퍼티
이 단락에서 파일은 트랜잭션 로그 파일과 데이터 파일에 대한 경로 설정만을 다룬다. 일반적으로 하나의 디스크에 트랜잭션 로그 파일과 데이터 파일을 같은 디스크를 사용하도록 지정할 경우 동시다발적인 디스크I/O로 인한 성능 저하가 발생하기 때문에 다음의 문서를 참고로 각각의 설정 항목을 변경하는 것을 권고한다.
참고 문서 『 Altibase 디스크I/O 병목을 고려한 볼륨구성 가이드』
설정 항목 | 기본 값 | 설명 |
---|---|---|
LOG_DIR | ?/logs | 트랜잭션 로그파일이 생성되는 디렉토리 |
MEM_DB_DIR | ?/dbs | 사용자가 명시적으로 지정하지 않을 경우 메모리DB의 데이터 파일이 생성되는 디렉토리 |
DEFAULT_DISK_DB_DIR | ?/dbs | 사용자가 명시적으로 지정하지 않을 경우 디스크DB의 데이터 파일이 생성되는 디렉토리 |
위 3개의 경로 및 향후에 사용자가 생성할 각각의 데이터 파일들은 최소한 LOG_DIR과는 물리적으로 분리된 디스크를 사용하도록 권고한다.
세션 프로퍼티
세션과 관련된 프로퍼티는 다음 항목들이다.
설정 항목 | 기본 값 | 설명 |
---|---|---|
MAX_CLIENT | 1000 | 동시에 DB에 접속할 세션의 제한이기 때문에 만일 이 값보다 더 많이 세션이 접속할 것이 예상되면 이 값을 늘린 후 Altibase 서버를 재 구동 하도록 한다. |
MULTIPLEXING_THREAD_COUNT | 호스트 장비의 논리 코어 수 | 이 값은 서비스 쓰레드의 개수를 지정하는 것이다. 설정하지 않을 경우 CPU의 Core수만큼 쓰레드가 자동으로 구동 단계에서 생성된다. 만일, 접속한 세션들이 많아 서비스 쓰레드가 더 필요하다고 내부적으로 판단할 경우 자동으로 생성이 되지만 생성되는 시점에 태스크의 분배로 일시적인 성능의 지터 현상이 발생할 수 있음으로 미리 충분한 개수를 확보 하는 것도 의미 있는 설정일 수 있다. |
MULTIPLEXING_THREAD_COUNT 는 기본적으로 (CPU Core개수 * 2)정도의 수치를 권고하는데 이 값은 상황에 맞게 설정한다
리소스 제한 관련 프로퍼티
Altibase가 사용하는 리소스(Resource)라 함은 물리적인 메모리/디스크의 공간 및 논리적인 테이블스페이스 공간과 같은 자원을 의미한다. 세션/시스템 레벨에서 대량의 변경 작업과 같이 리소스 부족을 유발할 수 있는 질의 수행을 유연하게 제한하는 각각의 프로퍼티를 설명한다.
이 프로퍼티는 기본 설정을 변경하기 보다는 세션 레벨에서의 설정 변경을 통해 필요가 있는 세션만 변경/적용하도록 운영하는 것을 권고한다.
설정 항목 | 기본 값 | 설명 |
---|---|---|
LOCK_ESCALATION_MEMORY_SIZE | 100M | 메모리DB 테이블에 대량 변경 작업을 수행할 경우 변경되는 레코드의 크기가 이 속성값을 넘으면 테이블 락을 획득하여 질의를 수행한다. (시스템 레벨만 변경 가능) |
TRX_UPDATE_MAX_LOGSIZE | 10M | 질의 처리로 인해 발생하는 트랜잭션 로그의 양이 이 속성값 이상이면 다음과 같은 에러로 리턴 된다. The update log size '10485873' is bigger than TRX_UPDATE_MAX_LOGSIZE '10485760' |
PREPARE_STMT_MEMORY_MAXIMUM | 200M | 질의 처리 수행 단계 중 Preapre단계에서 사용되는 메모리의 양이 이 속성값 이상이면 다음과 같은 에러로 리턴 된다. The memory size allocated for the statement has exceeded the maximum limit ( Name : Query_Prepare, Wanted Memory Size : 1073741832, Max size : 1073741824 ) |
EXECUTE_STMT_MEMORY_MAXIMUM | v7.1.0 : 1024M v7.3.0 : 2048M | 질의 처리 수행 단계 중 Execute단계에서 사용되는 메모리의 양이 이 속성값 이상이면 다음과 같은 에러로 리턴 된다. The memory size allocated for the statement has exceeded the maximum limit ( Name : Query_Execute, Wanted Memory Size : 1073807360, Max size : 1073741824 ) |
QUERY_TIMEOUT | 600초 | 질의를 개시한 이후 시간이 이 속성값 이상 지나면 다음과 같은 에러로 리턴 한다. Client's query exceeded the execution time limit. |
FETCH_TIMEOUT | 60초 | 질의가 정상 수행된 이후 만들어 진 결과 셋을 주고 받는 과정에서 이전 통신과 다음 통신간에 이 속성값만큼 시간이 지나도 통신이 발생하지 않으면 해당 세션을 종료시킨다. The session has been closed by the server |
UTRANS_TIMEOUT | 3600초 | 변경 질의가 수행된 이후 Commit/Rollback의 수행이 이 속성값만큼 시간이 지나도 발생하지 않으면 해당 세션을 종료시킨다. The transaction has exceeded the lock timeout specified by the user. |
IDLE_TIMEOUT | 0 | 세션이 아무런 동작 없이 이 속성값만큼 유지되면 강제로 종료시킨다. The session has been closed by the server |
일시적인 변경 방법의 예 아래와 같다.
- 세션과 관련된 QUERY/IDLE/UTRANS/FETCH Timeout 속성과 관련된 에러는 모두 altibase_boot.log에 기록되기 때문에 발생 시 해당 세션을 찾아 조치하도록 한다.
- ALTER SYSTEM과 ALTER SESSION은 주의할 사항이 ALTER SYSTEM의 변경은 이후 접속하는 세션부터 적용된다. 따라서, 현재 접속한 세션은 적용되지 않기 때문에 개별 접속된 세션들에 대해서는 각각 ALTER SESSION을 수행해야 원하는 결과를 적용할 수 있다.
디스크 I/O 성능 관련 프로퍼티
Altibase의 디스크 I/O 성능 관련된 프로퍼티 항목을 설명한다.
설정 항목 | 기본 값 | 설명 |
---|---|---|
BUFFER_AREA_SIZE | 128M | 디스크DB의 버퍼 크기를 지정한다. 시스템의 메모리가 여유 있다면 가능한 크게 설정하기를 권고한다. |
BUFFER_FLUSHER_CNT | 2 | 디스크DB의 더티페이지 또는 버퍼의 빈 공간을 확보하기 위해 디스크에 버퍼를 기록하는 쓰레드로 시스템의 CPU개수 또는 디스크I/O성능에 맞게 조절하도록 한다. |
PREPARE_LOG_FILE_COUNT | 5 | 별도의 쓰레드가 트랜잭션 로그를 기록할 빈 로그파일을 생성하게 되는데 이 값이 너무 작은 경우 트랜잭션 진행이 빈 로그파일 생성을 대기해야 할 경우 성능이 저하될 수 있음으로 v$lfg 의 LF_PREPARE_WAIT_COUNT 값이 이 값보다 크게 나타나는 경우 값을 적절하게 조정해야 한다. 너무 크게 잡는다 하여도 실제 빈 로그파일을 만드는 디스크I/O 부하가 발생할 것임으로 테스트를 통해 신중하게 변경할 것을 권고한다. |
CHECKPOINT_BULK_WRITE_PAGE_COUNT | 0 | 메모리 DB의 체크포인트가 진행될 때 기록해야 할 페이지가 많아 이 때 발생하는 디스크I/O로 성능이 저하된다고 판단이 될 경우 이 속성값을 통해 체크포인트의 디스크I/O양을 분산시킬 수 있다. 즉, CHECKPOINT_BULK_WRITE_PAGE_COUNT에 지정된 값만큼 페이지를 기록한 이후 (CHECKPOINT_BULK_WRITE_SLEEP_SEC + CHECKPOINT_BULK_WRITE_SLEEP_USEC) 만큼 대기한 이후 다시 쓰기를 진행하도록 동작한다. 이 속성은 디스크 성능이 낮은 장비에서 효과를 거둘 수 있다. |
CHECKPOINT_BULK_WRITE_SLEEP_SEC | 0초 | |
CHECKPOINT_BULK_WRITE_SLEEP_USEC | 0마이크로초 | |
DIRECT_IO_ENABLED | 1 | 파일캐쉬를 거쳐 데이터파일에 기록하는 과정은 2번에 걸친(파일캐쉬, 디스크Sync) 디스크 쓰기와 언제 파일캐쉬에서 디스크로 Sync될지를 예측하기 어려운 경우가 있을 수 있다. 그로 인해 운영체제가 파일캐쉬를 비우는 시점에 예측하지 못한 성능 저하가 있을 수 있는데 DIRECT IO로 설정할 경우 한번의 쓰기로 완료가 가능하다. 단, 이 설정은 디스크 성능이 충분히 높은 경우에만 설정할 것을 권고한다. |
DATABASE_IO_TYPE | 0 | |
TOTAL_WA_SIZE | 128M | 디스크DB의 정렬 또는 해싱 작업이 동시에 수행 될수 있기위해 할당할 수 있는 메모리의 최대 크기를 지정한다. (TOTAL_WA_SIZE) |
SORT_AREA_SIZE | 1M | |
HASH_AREA_SIZE | 4M |
PBT(Problem Tracking) 관련 프로퍼티
Altibase의 문제 상황이 발생할 경우 상세하게 추적하기 위해 필요한 프로퍼티를 설명한다.
설정 항목 | 기본 값 | 설명 |
---|---|---|
QP_MSGLOG_FLAG | 2 | 2로 설정하면 모든 DDL수행 기록을 확인할 수 있음으로 문제 발생 시 DDL수행에 의거한 경우 분석에 도움이 될 수 있다. |
RP_CONFLICT_MSGLOG_FLAG | 0 | 6으로 설정하면 이중화 충돌 시 발생하는 DML의 로그가 기록되어 분석에 도움이 될 수 있다. |
TIMED_STATISTICS | 0 | 기본값은 0으로 동작하지 않지만 성능과 관련한 각 SQL문들의 수행 시간들을 알아야 할 경우 다음과 같이 실시간으로 활성화 할 수 있다. iSQL> ALTER SYSTEM SET timed_statistics = 1 ; 활성화 하면 수행되는 모든 SQL문의 수행 시각이 v$statement에 기록되기 시작한다. |