시스템 설정¶
성능과 동작에 영향을 미칠 수 있는 시스템 파라미터의 설정 정보를 제공한다. 시스템 파라미터는 시스템의 전체적인 성능과 동작을 결정한다. 이 장에서는 데이터베이스 서버, 브로커에 적용하는 설정 파일의 사용법과 개별 파라미터의 의미를 설명한다. CUBRID 매니저 서버 환경 설정과 관련해서는 CUBRID 매니저 매뉴얼 을 참고한다.
이 장에서 설명하는 주요 내용은 다음과 같다.
- 데이터베이스 서버 설정
- 브로커 설정
데이터베이스 서버 설정¶
데이터베이스 서버 설정이 미치는 범위¶
CUBRID는 데이터베이스 서버, 브로커, CUBRID 매니저로 구성되며, 각 구성요소에 대한 설정 파일이 존재한다. 데이터베이스 서버의 시스템 파라미터 설정 파일은 cubrid.conf이며 $CUBRID/conf 디렉터리에 위치한다. cubrid.conf 에 설정되는 시스템 파라미터는 데이터베이스 시스템의 전체적인 성능과 동작에 영향을 준다. 따라서, 데이터베이스 서버 설정을 이해하는 작업은 매우 중요하다.
CUBRID 데이터베이스 서버는 클라이언트/서버 구조로 구성된다. 구체적으로 서버 라이브러리와 링크되어 있는 데이터베이스 서버 프로세스와 클라이언트 라이브러리와 링크되어 있는 브로커 프로세스로 나뉜다. 서버 프로세스는 데이터베이스 저장 구조를 관리하고 동시성과 트랜잭션 기능을 제공하며, 클라이언트 프로세스는 질의 실행을 위한 준비 단계와 객체 관리 및 스키마 관리 기능을 수행한다.
cubrid.conf 파일에서 설정할 수 있는 데이터베이스 서버의 시스템 파라미터는 적용되는 범위에 따라 클라이언트 파라미터, 서버 파라미터, 클라이언트/서버 파라미터로 구분할 수 있다. 클라이언트 파라미터는 브로커와 같은 클라이언트 프로세스에만 적용되는 파라미터이며, 서버 파라미터는 서버 프로세스의 동작에 영향을 주는 파라미터이다. 클라이언트/서버 파라미터는 서버와 클라이언트에 적용된다.
cubrid.conf 파일의 위치와 적용
- 데이터베이스 서버 프로세스는 $CUBRID/conf/cubrid.conf 파일만 참조한다. 데이터베이스별 설정은 cubrid.conf 파일 내에서 섹션으로 구분한다.
- 클라이언트 프로세스는 1) $CUBRID/conf/cubrid.conf 파일을 참조한 후에, 2) 현재 디렉터리( $PWD )에 있는 cubrid.conf 파일을 추가로 참조한다. 현재 디렉터리 파일( $PWD/cubrid.conf ) 파일의 설정이 $CUBRID/conf/cubrid.conf 파일의 설정을 덮어쓴다. 즉, $PWD/cubrid.conf와 $CUBRID/conf/cubrid.conf 에서 동일한 파라미터에 대한 설정이 존재하면, $PWD/cubrid.conf 에 있는 설정이 최우선으로 적용된다.
데이터베이스 서버 설정값 변경¶
환경 설정 파일 편집
$CUBRID/conf 디렉터리에 있는 시스템 파라미터 설정 파일( cubrid.conf )을 직접 편집하여 시스템 파라미터를 추가 및 삭제할 수 있으며, 파라미터의 설정값을 변경할 수 있다.
설정 파일에서 파라미터를 설정할 때 파라미터 구문 규칙은 다음과 같다.
- 파라미터 이름은 대/소문자를 구분하지 않는다.
- 파라미터 이름과 설정값은 동일한 라인에 입력되어야 한다.
- 파라미터 값을 설정하기 위해 등호 기호(=)를 사용하며, 등호 기호의 양 옆에는 공백 문자를 사용할 수 있다.
- 파라미터 값이 문자열인 경우 따옴표 없이 문자열만 입력한다. 다만, 해당 문자열에 공백 문자가 포함된 경우에는 따옴표를 사용한다.
SQL 문을 사용
SQL 문을 이용하여 CSQL 인터프리터나 CUBRID 매니저의 질의 편집기에서 시스템 파라미터의 값을 설정할 수 있다. 단, 갱신할 수 있는 파라미터는 한정되어 있으므로 주의한다. 갱신할 수 있는 파라미터는 cubrid.conf 설정 파일과 기본 제공 파라미터 를 참고한다.
SET SYSTEM PARAMETERS 'parameter_name=value [{; name=value}...]'parameter_name은 설정값 변경이 가능한 클라이언트 파라미터 이름이고, value는 해당 파라미터의 값을 의미한다. 세미콜론(;)으로 구분하여 여러 개의 파라미터 값을 변경할 수 있다.
다음은 인덱스 스캔 작업의 결과를 OID 순으로 가져오고, CSQL 인터프리터에서 히스토리 내역으로 저장하는 질의 개수를 70개로 설정하는 예제이다.
SET SYSTEM PARAMETERS 'index_scan_in_oid_order=1; csql_history_num=70';
CSQL 인터프리터의 세션 명령어 사용
CSQL 인터프리터 내에서 세션 명령어(;SEt)를 이용하여 시스템 파라미터의 값을 설정할 수 있다. 단, 갱신할 수 있는 파라미터는 한정되어 있으므로 주의한다. 갱신할 수 있는 파라미터는 cubrid.conf 설정 파일과 기본 제공 파라미터 를 참고한다.
다음은 데이터 정의문 수행이 허용되지 않도록 block_ddl_statement 파라미터를 1로 설정하는 예제이다.
csql> ;se block_ddl_statement=1 === Set Param Input === block_ddl_statement=1
cubrid.conf 설정 파일과 기본 제공 파라미터¶
CUBRID는 데이터베이스 서버, 브로커, CUBRID 매니저로 구성된다. 각 구성 요소를 수행하기 위한 설정 파일 이름은 다음과 같고, 모두 $CUBRID/conf 디렉터리에 위치한다.
- 데이터베이스 서버 설정 파일 : cubrid.conf
- 브로커 설정 파일 : cubrid_broker.conf
- CUBRID 매니저 서버 설정 파일 : cm.conf
cubrid.conf 파일은 CUBRID 데이터베이스 서버에 대한 시스템 파라미터를 지정하는 설정 파일로 데이터베이스 시스템의 전체적인 성능과 동작을 결정한다. cubrid.conf 파일은 시스템 설치에 필요한 몇 가지 중요한 파라미터가 기본으로 설정된 상태로 제공된다.
데이터베이스 서버 시스템 파라미터
다음은 cubrid.conf 설정 파일에 사용 가능한 데이터베이스 서버 시스템 파라미터이다. 아래 표에서 "적용 구분"의 "클라이언트 파라미터"는 브로커 응용서버(CAS), CSQL, cubrid 유틸리티에 적용되는 파라미터를 의미하며, "서버 파라미터"는 DB 서버에 적용되는 파라미터를 의미한다. 자세한 의미는 데이터베이스 서버 설정이 미치는 범위 를 참조한다.
SET SYSTEM PARAMETERS 구문이나 CSQL 인터프리터의 세션 명령인 ;set을 통해 DB 구동 중 동적으로 설정값 변경이 가능한 파라미터를 변경할 수 있다. DB 사용자의 권한이 DBA인 경우 적용 구분에 상관없이 파라미터 값의 변경이 가능하며, DBA가 아닌 경우 클라이언트 파라미터 값만 변경할 수 있다.
아래 표에서 "적용 구분" 항목이 "서버"인 파라미터는 파라미터의 적용 범위가 전체(global)이다. "적용 구분" 항목이 "클라이언트" 또는 "클라이언트/서버"인 파라미터는 파라미터의 적용 범위가 세션(session)이다.
- "동적 변경"이 "가능"한 파라미터 중 "적용 구분"이 "서버"이면 변경된 파라미터 값이 DB 서버에 적용되어, 이후에 접속하는 응용 프로그램들은 변경된 값을 사용하며, DB를 재구동하기 전까지는 변경된 값을 유지한다.
- "동적 변경"이 "가능"한 파라미터 중 "적용 구분"이 "클라이언트" 또는 "클라이언트/서버"이면 DB 세션 당 변경된 값이 유지된다. 즉, 변경을 요청한 응용 프로그램에만 변경된 값이 적용된다. 예를 들어, block_ddl_statement 파라미터의 값이 yes로 변경되면 변경을 요청한 응용 프로그램에서만 DDL 문을 사용할 수 없게 된다.
용도 구분 파라미터 이름 적용 구분 타입 기본값 동적 변경 접속 관련 파라미터 cubrid_port_id 클라이언트 int 1523 check_peer_alive 클라이언트/서버 string both 가능 db_hosts 클라이언트 string NULL 가능 max_clients 서버 int 100 tcp_keepalive 클라이언트/서버 bool yes 메모리 관련 파라미터 data_buffer_size 서버 byte 32768 * db_page_size index_scan_oid_buffer_size 서버 byte 4 * db_page_size sort_buffer_size 서버 byte 128 * db_page_size temp_file_memory_size_in_pages 서버 int 4 thread_stacksize 서버 byte 1048576 디스크 관련 파라미터 db_volume_size 서버 byte 512M dont_reuse_heap_file 서버 bool no log_volume_size 서버 byte 512M temp_file_max_size_in_pages 서버 int -1 temp_volume_path 서버 string NULL unfill_factor 서버 float 0.1 volume_extension_path 서버 string NULL 오류 메시지 관련 파라미터 call_stack_dump_activation_list 클라이언트/서버 string NULL 가능 call_stack_dump_deactivation_list 클라이언트/서버 string NULL 가능 call_stack_dump_on_error 클라이언트/서버 bool no 가능 error_log 클라이언트/서버 string cub_client.err, cub_server.err error_log_level 클라이언트/서버 string SYNTAX 가능 error_log_warning 클라이언트/서버 bool no 가능 error_log_size 클라이언트/서버 int 8000000 가능 동시성/잠금 파라미터 deadlock_detection_interval_in_secs 서버 float 1.0 가능 isolation_level 클라이언트 int 3 가능 lock_escalation 서버 int 100000 lock_timeout 클라이언트 msec -1 가능 lock_timeout_message_type 서버 int 0 가능 rollback_on_lock_escalation 서버 bool no 가능 로깅 관련 파라미터 adaptive_flush_control 서버 bool yes 가능 background_archiving 서버 bool yes 가능 checkpoint_every_size 서버 byte 10000 * log_page_size checkpoint_interval 서버 msec 720min 가능 force_remove_log_archives 서버 bool yes 가능 log_buffer_size 서버 byte 128 * log_page_size log_max_archives 서버 int INT_MAX 가능 log_trace_flush_time 서버 msec 0 DBA만 가능 max_flush_size_per_second 서버 byte 10000 * db_page_size 가능 sync_on_flush_size 서버 byte 200 * db_page_size 가능 트랜잭션 처리 관련 파라미터 async_commit 서버 bool no group_commit_interval_in_msecs 서버 msec 0 가능 구문/타입 관련 파라미터 add_column_update_hard_default 클라이언트/서버 bool no 가능 alter_table_change_type_strict 클라이언트/서버 bool no 가능 ansi_quotes 클라이언트 bool yes block_ddl_statement 클라이언트 bool no 가능 block_nowhere_statement 클라이언트 bool no 가능 compat_numeric_division_scale 클라이언트/서버 bool no 가능 default_week_format 클라이언트/서버 int 0 가능 group_concat_max_len 서버 byte 1024 가능 intl_mbs_support 클라이언트 bool no no_backslash_escapes 클라이언트 bool yes only_full_group_by 클라이언트 bool no 가능 oracle_style_empty_string 클라이언트 bool no pipes_as_concat 클라이언트 bool yes plus_as_concat 클라이언트 bool yes require_like_escape_character 클라이언트 bool no return_null_on_function_errors 클라이언트/서버 bool no 가능 string_max_size_bytes 클라이언트/서버 byte 1048576 가능 질의 계획 캐시 관련 파라미터 max_plan_cache_entries 클라이언트/서버 int 1000 유틸리티 관련 파라미터 backup_volume_max_size_bytes 서버 byte 0 communication_histogram 클라이언트 bool no 가능 compactdb_page_reclaim_only 서버 int 0 csql_history_num 클라이언트 int 50 가능 HA 관련 파라미터 ha_mode 서버 string off 기타 파라미터 access_ip_control 서버 bool no access_ip_control_file 서버 string auto_restart_server 서버 bool yes 가능 index_scan_in_oid_order 클라이언트 bool no 가능 index_unfill_factor 서버 float 0.05 java_stored_procedure 서버 bool no multi_range_optimization_limit 서버 int 100 가능 pthread_scope_process 서버 bool yes server 서버 string service 서버 string session_state_timeout 서버 sec 21600 single_byte_compare 서버 bool no sql_trace_slow 서버 msec -1 가능 sql_trace_execution_plan 서버 bool no 가능 use_orderby_sort_limit 서버 bool yes 가능
- log_page_size: 데이터베이스 생성 시 --log-page-size 옵션으로 지정한 로그 볼륨 페이지 크기. 기본값: 16KB. 관련 파라미터의 설정 값은 페이지 단위로 버림된다. 예를 들어 checkpoint_every_size 의 값은 16KB로 나누어 소수점 이하를 버림한 값에 16KB를 곱한 값이 된다.
- db_page_size: 데이터베이스 생성 시 --db-page-size 옵션으로 지정한 DB 볼륨 페이지 크기. 기본값: 16KB. 관련 파라미터의 설정 값은 페이지 단위로 버림된다. 예를 들어 data_buffer_size 의 값은 16KB로 나누어 소수점 이하를 버림한 값에 16KB를 곱한 값이 된다.
파라미터의 섹션별 분류
cubrid.conf 에 지정된 파라미터는 다음과 같이 세 가지 섹션으로 제공된다.
- CUBRID 서비스를 시작할 때 사용 : [service] 섹션
- 전체 데이터베이스에 공통으로 적용 : [common] 섹션
- 각 데이터베이스에 개별적으로 적용 : [@<database>] 섹션
여기서 <database>는 파라미터를 개별적으로 적용할 데이터베이스 이름이며, [common]에 설정된 파라미터가 [@<database>]에 설정된 파라미터와 동일한 경우 [@<database>]에 설정된 파라미터가 최종 적용된다.
기본 제공 파라미터
CUBRID 설치 시 생성되는 기본 데이터베이스 환경 설정 파일(cubrid.conf)에는 데이터베이스 서버 파라미터 중 반드시 변경해야 할 일부 파라미터가 기본적으로 포함된다. 기본으로 포함되지 않는 파라미터의 설정값을 변경하기 원할 경우 직접 추가/편집해서 사용하면 된다.
다음은 cubrid.conf 파일 내용이다.
# Copyright (C) 2008 Search Solution Corporation. All rights reserved by Search Solution. # # $Id$ # # cubrid.conf# # For complete information on parameters, see the CUBRID # Database Administration Guide chapter on System Parameters # Service section - a section for 'cubrid service' command [service] # The list of processes to be started automatically by 'cubrid service start' command # Any combinations are available with server, broker and manager. service=server,broker,manager # The list of database servers in all by 'cubrid service start' command. # This property is effective only when the above 'service' property contains 'server' keyword. #server=server, broker, manager # Common section - properties for all databases # This section will be applied before other database specific sections. [common] # Read the manual for detailed description of system parameters # Manual > System Configuration > Database Server Configuration > Default Parameters # Size of data buffer are using K, M, G, T unit data_buffer_size=512M # Size of log buffer are using K, M, G, T unit log_buffer_size=4M # Size of sort buffer are using K, M, G, T unit # The sort buffer should be allocated per thread. # So, the max size of the sort buffer is sort_buffer_size * max_clients. sort_buffer_size=2M # The maximum number of concurrent client connections the server will accept. # This value also means the total # of concurrent transactions. max_clients=100 # TCP port id for the CUBRID programs (used by all clients). cubrid_port_id=1523testdb 만 data_buffer_size를 128M로, max_clients를 10으로 설정하고 싶은 경우 다음과 같이 설정한다.
[service] service=server,broker,manager [common] data_buffer_size=512M log_buffer_size=4M sort_buffer_size=2M max_clients=100 # TCP port id for the CUBRID programs (used by all clients). cubrid_port_id=1523 [@testdb] data_buffer_size=128M max_clients=10
접속 관련 파라미터¶
다음은 데이터베이스 서버와 관련된 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
cubrid_port_id | int | 1523 | 1 | |
check_peer_alive | string | both | ||
db_hosts | string | NULL | ||
max_clients | int | 100 | 10 | 10000 |
tcp_keepalive | bool | yes |
cubrid_port_id
cubrid_port_id는 마스터 프로세스가 사용하는 포트를 설정하기 위한 파라미터로 기본값은 1523이다. CUBRID를 설치한 서버에서 이미 1523 포트를 사용하고 있거나, 방화벽에 의해 1523 포트가 차단된 경우에는 마스터 프로세스가 정상적으로 구동할 수 없으므로, 마스터 서버와 연결할 수 없다는 에러 메시지가 나타날 수 있다. 이와 같이 포트 충돌이 발생하는 경우, 관리자는 서버 환경을 고려하여 cubrid_port_id 의 설정값을 변경해야 한다.
check_peer_alive
check_peer_alive는 클라이언트 프로세스와 서버 프로세스가 정상 동작하는지 각각 확인하는 과정의 수행 여부를 결정하는 파라미터이다. 기본값은 both이다.
서버 프로세스와 접속하는 클라이언트 프로세스에는 브로커 응용 서버(cub_cas) 프로세스, 복제 로그 반영 프로세스(copylogdb), 복제 로그 복사 프로세스(applylogdb), CSQL 인터프리터(csql) 등이 있다. 서버 프로세스와 클라이언트 프로세스는 접속이 이루어진 후 네트워크를 통해 데이터를 기다리는 중 오랫동안(예: 5초 이상) 응답을 받지 못하면 설정에 따라 상대방이 정상 동작하는지 확인하는 과정을 거친다. 서로 확인하는 과정에서 정상 동작하지 않는다고 판단되면 연결된 접속을 강제 종료한다.
값의 종류 및 동작 방식은 다음과 같다.
- both: 서버 프로세스는 클라이언트 프로세스의 ECHO(7) 포트에 주기적으로 접속하여 클라이언트 프로세스가 정상 동작하는지 확인하고, 클라이언트 프로세스는 서버 프로세스의 ECHO(7) 포트에 주기적으로 접속하여 서버 프로세스가 정상 동작하는지 확인한다(기본값).
- server_only: 서버 프로세스만 클라이언트 프로세스가 정상 동작하는지 확인한다.
- client_only: 클라이언트 프로세스만 서버 프로세스가 정상 동작하는지 확인한다.
- none: 클라이언트 프로세스와 서버 프로세스 둘 다 상대방이 정상 동작하는지 확인하지 않는다.
특히, ECHO(7) 포트가 방화벽(firewall) 설정으로 막혀있으면 서버 프로세스 또는 클라이언트 프로세스가 각각 서로의 상태를 확인할 때 상대방 프로세스가 종료된 것으로 오인할 수 있으므로, none으로 설정하여 이 문제를 회피해야 한다.
db_hosts
db_hosts는 클라이언트에서 연결할 수 있는 데이터베이스 서버 호스트의 목록 및 연결 순서를 지정하기 위한 파라미터이다. 서버 호스트 목록은 한 개 이상의 서버 호스트 이름을 나열하며, 각 호스트는 이름 사이에 공백 또는 콜론(:) 기호를 사용하여 구분한다. 이 때, 중복되거나 존재하지 않는 호스트 이름은 무시된다.
다음은 db_hosts 파라미터의 설정값을 보여주는 예제로 host1, host2, host3 의 순서대로 연결이 시도된다.
db_hosts="hosts1:hosts2:hosts3"한편, 클라이언트는 서버 연결을 위하여 데이터베이스 위치 정보 파일(databases.txt)을 참조하여 지정된 서버 호스트에 1차적으로 연결을 시도한다. 연결이 실패하면 데이터베이스 설정 파일(cubrid.conf)의 db_hosts 파라미터의 설정값을 참조하여 2차적으로 지정된 서버 호스트 중 첫 번째 서버 호스트에 연결을 시도한다.
max_clients
max_clients는 데이터베이스 서버에 동시 연결을 허용하는 클라이언트(일반적으로 브로커 용용 서버(CAS))의 최대 개수를 지정하기 위한 파라미터이다. 즉, max_clients 파라미터는 데이터베이스 서버 프로세스 하나 당 동시에 접속할 수 있는 클라이언트의 최대 개수를 의미한다. 이 파라미터의 기본값은 100이다.
CUBRID 환경에서 동시 사용자 수를 증가시키기 위해서는 질의 성능을 고려하여 max_clients 파라미터(cubrid.conf) 및 MAX_NUM_APPL_SERVER 파라미터(cubrid_broker.conf)를 적절한 값으로 설정해야 한다. 즉, max_clients 파라미터를 통해 데이터베이스 서버가 허용하는 동시 접속 개수를 설정하고, MAX_NUM_APPL_SERVER 파라미터를 통해 해당 브로커가 허용하는 동시 접속 개수를 설정한다.
예를 들어, cubrid_broker.conf 파일에서 [%query_editor]의 MAX_NUM_APPL_SERVER 값이 50이고 [%BROKER1]의 MAX_NUM_APPL_SERVER 값이 50인 브로커 노드 2개가 하나의 데이터베이스 서버에 접속하는 경우, 데이터베이스 서버가 허용하는 동시 접속 개수인 max_clients 의 값은 다음과 같이 설정할 수 있다.
- (각 브로커 노드 당 최대 100개) * (브로커 노드 2개) + (CSQL 인터프리터의 데이터베이스 서버 접속, HA 로그 복사 프로세스와 같은 CUBRID 내부 프로세스의 데이터베이스 서버 접속 등에 대한 여유분 10개) = 210
특히, HA 환경에서는 failover 등으로 인해 여러 브로커 노드 접속이 하나의 데이터베이스 서버에 집중될 수 있으므로, 같은 데이터베이스에 접속하는 모든 브로커 노드의 MAX_NUM_APPL_SERVER 값을 합한 값 보다 크게 설정해야 한다.
클라이언트의 데이터베이스 접속 여부에 관계 없이 max_clients의 개수를 크게 설정할수록 메모리 사용량이 증가하므로 주의한다.
Note
Linux 시스템에서 max_clients 파라미터는 "ulimit -n" 명령과 관련이 있는데, "ulimit -n" 명령은 프로세스 하나가 사용할 수 있는 file descriptor의 최대 개수를 지정한다. file descriptor는 파일 뿐 아니라 네트워크 소켓도 포함하므로, "ulimit -n"의 개수는 max_clients의 개수보다 크게 설정해야 한다.
tcp_keepalive
tcp_keepalive는 TCP 네트워크 프로토콜에 SO_KEEPALIVE 옵션을 적용할지 여부를 지정하는 파라미터로, 기본값은 yes*이다. 이 값이 **no이면 마스터 노드와 슬레이브 노드 간 방화벽이 설정되어 있는 환경에서 장시간 동안 트랜잭션 로그가 복사되지 않을 때 DB 서버 쪽 연결이 종료되는 현상이 발생할 수 있다.
메모리 관련 파라미터¶
다음은 데이터베이스 서버 또는 클라이언트에서 사용하는 메모리와 관련된 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
data_buffer_size | byte | 32768 * db_page_size | 1024 * db_page_size | 2G(32비트), INT_MAX * db_page_size (64비트) |
index_scan_oid_buffer_size | byte | 4 * db_page_size | 0.05 * db_page_size | 16 * db_page_size |
sort_buffer_size | byte | 128 * db_page_size | 1 * db_page_size | 2G(32비트), INT_MAX * db_page_size (64비트) |
temp_file_memory_size_in_pages | int | 4 | 0 | 20 |
thread_stacksize | byte | 1048576 | 65536 |
data_buffer_size
data_buffer_size는 데이터베이스 서버가 메모리 내에 캐시하는 데이터 버퍼의 크기를 설정하기 위한 파라미터이다. 값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 32768 * db_page_size (db_page_size가 16K일 때 512M) 이고, 최소값은 1024 * db_page_size (db_page_size가 16K일 때 16M)이다. CUBRID 64비트 버전에서는 최대값이 INT_MAX * db_page_size이다. CUBRID 32비트 버전에서는 최대값이 2G임에 주의한다.
data_buffer_size 파라미터의 값이 클수록 버퍼에 캐시되는 데이터 페이지가 많아지므로 디스크 I/O 비용을 줄일 수 있다는 장점이 있다. 반면, 이 파라미터의 값을 너무 크게 설정하면 과도하게 시스템 메모리가 점유되므로 운영체제에 의해 버퍼 풀이 스와핑(swapping)되는 현상이 발생할 수 있다. data_buffer_size 파라미터는 필요한 메모리 크기가 시스템 메모리의 2/3 이내가 되도록 설정할 것을 권장한다.
- 필요한 메모리 크기 = 데이터 버퍼 크기(data_buffer_size)
index_scan_oid_buffer_size
index_scan_oid_buffer_size는 인덱스 스캔을 수행할 때 OID 리스트의 임시 저장을 위한 버퍼의 크기를 설정하기 위한 파라미터이다. K 단위를 설정할 수 있으며, KB(kilobytes)를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 4 * db_page_size (db_page_size가 16K일 때 64K)이다. 최소값은 0.05 * db_page_size (db_page_size가 16K일 때 약 1K)이고, 최대값은 16 * db_page_size (db_page_size가 16K일 때 256K)이다.
index_scan_oid_buffer_size 파라미터 값과 데이터베이스 생성 시 설정한 단위 페이지의 크기에 비례하여 OID 버퍼의 크기가 결정되고, 이러한 OID버퍼의 크기가 클수록 인덱스 스캔 비용이 증가하는 경향을 보인다. 이를 고려하여 index_scan_oid_buffer_size 파라미터 값을 조정할 수 있다.
sort_buffer_size
sort_buffer_size는 정렬을 수행하는 질의를 처리할 때 사용되는 요청 하나 당 버퍼의 크기를 설정하기 위한 파라미터이다. 서버는 각 클라이언트의 정렬 요청마다 하나의 정렬 버퍼를 할당하며, 정렬을 완료한 후에는 할당되었던 버퍼 메모리를 해제한다.
값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 128 * db_page_size (db_page_size가 16K일 때 2M)이고, 최소값은 1 * db_page_size (db_page_size가 16K일 때 16K)이다.
temp_file_memory_size_in_pages
temp_file_memory_size_in_pages는 질의에 관한 임시 결과를 캐시하는 버퍼 페이지 개수를 설정하기 위한 파라미터로 기본값은 4이며, 최대값은 20까지 허용된다.
- 필요한 메모리 크기 = 임시 메모리 버퍼 페이지 수(temp_file_memory_size_in_pages) * 데이터베이스 페이지 크기(page size)
- 임시 메모리 버퍼 페이지 수 = temp_file_memory_size_in_pages 파라미터 설정값
- 데이터베이스 페이지 크기 = 데이터베이스 생성 시 cubrid createdb 유틸리티의 -s 옵션에 의해 지정된 페이지 크기 값
thread_stacksize
thread_stacksize는 스레드의 스택 크기를 설정하기 위한 파라미터로 기본값은 1048576 바이트이다. thread_stacksize 파라미터의 설정값은 운영체제가 허용하는 스택 크기를 초과할 수 없다.
디스크 관련 파라미터¶
다음은 데이터베이스 볼륨 정의 및 파일 저장을 위한 디스크 관련 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
db_volume_size | byte | 512M | 20M | 20G |
dont_reuse_heap_file | bool | no | ||
log_volume_size | byte | 512M | 20M | 4G |
temp_file_max_size_in_pages | int | -1 | ||
temp_volume_path | string | NULL | ||
unfill_factor | float | 0.1 | 0.0 | 0.3 |
volume_extension_path | string | NULL |
db_volume_size
db_volume_size는 다음과 같은 값을 설정하는 파라미터이다. 값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 512M이다.
- cubrid createdb와 cubrid addvoldb 유틸리티에서 --db-volume-size 옵션을 생략했을 때 데이터베이스 볼륨의 기본 크기
- 데이터베이스 볼륨 공간을 모두 사용하면 자동으로 추가되는 범용(generic) 볼륨의 기본 크기
dont_reuse_heap_file
dont_reuse_heap_file은 테이블 삭제(DROP TABLE)로 인해 삭제된 힙 파일을 새로운 테이블 생성(CREATE TABLE) 시 재사용하지 않도록 설정하는 파라미터로, 0으로 설정되면 삭제된 힙 파일을 재사용하고, 1로 설정되면 삭제된 힙 파일을 새로운 테이블 생성 시 재사용하지 않는다. 기본값은 0이다.
log_volume_size
log_volume_size는 cubrid createdb 유틸리티에서 --log-volume-size 옵션이 생략되었을 때 로그 볼륨 파일의 기본 크기를 설정하는 파라미터이다. 값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 512M이다.
temp_file_max_size_in_pages
temp_file_max_size_in_pages는 질의 또는 인덱스 생성 등을 위해 데이터를 정렬하는 과정에서 중간 결과 및 최종 결과를 저장하기 위해 일시적 임시 볼륨(temporary temp volume)이 사용될 때, 질의 하나가 수행될 때 사용할 수 있는 임시 공간의 최대 크기를 페이지 개수로 명시하는 파라미터로 기본값은 -1이다.
중간 결과 저장소의 크기와 최종 결과 저장소의 크기는 각각 별개로 측정되므로, 그들 중 하나의 크기가 파라미터가 명시한 크기보다 큰 경우 에러가 발생하면서 해당 질의의 수행이 취소된다. 기본값으로 설정되면 temp_volume_path 파라미터에서 지정된 디스크 공간 이내에서 무제한으로 일시적 임시 볼륨(temporary temp volume)이 저장되고, 0으로 설정되면 일시적 임시 볼륨이 생성되지 않는다.
질의 수행 시 필요한 임시 볼륨(temp volume)은 일시적 임시 볼륨과 영구적 임시 볼륨으로 구분되는데, 이 파라미터의 값은 일시적 임시 볼륨에만 적용된다. (큰 크기의 임시 공간이 필요한 질의를 수행하면서 일시적 임시 볼륨이 기대 이상으로 증가함으로 인해) 디스크의 여유 공간이 부족해져 시스템 운영에 문제가 발생하는 것을 예방하려면, 예상하는 영구적 임시 볼륨을 미리 확보하고, 하나의 질의가 수행될 때 일시적 임시 볼륨에서 사용되는 공간의 최대 크기를 제한하는 것이 좋다.
temp_volume_path
temp_volume_path는 복잡한 질의문이나 정렬 수행을 위하여 자동으로 생성되는 일시적 임시 볼륨(temporary temp volume)의 디렉터리를 지정하는 파라미터로 기본값은 데이터베이스 생성 시에 설정된 볼륨 위치이다.
unfill_factor
unfill_factor는 데이터 갱신에 대비하여 힙(heap) 페이지로 할당되는 디스크 공간의 비율을 정의하기 위한 파라미터로 기본값은 0.1로 10%의 여유 공간이 설정된다. 원칙적으로, 테이블의 데이터는 물리적인 순서대로 삽입되지만, 데이터가 원래 크기보다 큰 데이터로 갱신되어 해당 페이지의 저장 공간이 부족하면 갱신된 데이터는 다른 페이지에 재배치되어야 하므로 성능이 저하될 수 있다. 이를 방지하기 위하여 unfill_factor 파라미터를 통해 힙 페이지 공간 비율을 설정할 수 있고, 최대값은 0.3(30%)까지 허용된다. 한편, 데이터 갱신이 거의 발생하지 않는 데이터베이스에서는 이 파라미터를 0.0으로 설정하여 데이터 갱신을 위한 힙 페이지 공간을 할당하지 않을 수 있고, unfill_factor 파라미터의 값이 음수거나 최대값보다 크게 설정되는 경우에는 기본값(0.1)이 적용된다.
volume_extension_path
volume_extension_path는 cubrid addvoldb 유틸리티로 추가 볼륨을 생성할 때 추가 볼륨의 경로를 지정하는 -F 옵션을 생략하면 기본 경로로 사용할 경로를 지정하는 파라미터이다. 기본값은 데이터베이스 생성 시에 설정된 볼륨 위치이다.
오류 메시지 관련 파라미터¶
다음은 CUBRID에 의해 기록되는 오류 메시지의 처리에 관한 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 |
---|---|---|
call_stack_dump_activation_list | string | NULL |
call_stack_dump_deactivation_list | string | NULL |
call_stack_dump_on_error | bool | no |
error_log | string | cub_client.err, cub_server.err |
error_log_level | string | SYNTAX |
error_log_warning | bool | no |
error_log_size | int | 8000000 |
call_stack_dump_activation_list
call_stack_dump_activation_list는 모든 오류에 대해 콜-스택을 서버 에러 로그 파일($CUBRID/log/server 디렉터리에 위치)에 덤프하지 않기로 설정한 상태에서, 예외적으로 콜-스택을 덤프할 특정 오류 번호를 지정하기 위한 파라미터이다. 따라서, call_stack_dump_activation_list 파라미터는 call_stack_dump_on_error 의 값이 no 인 경우에만 효력이 있다.
기본적으로 다음 오류들은 call_stack_dump_activation_list에 항상 포함되어 있으므로 별도로 지정하지 않아도 된다.
오류 번호 오류 메시지 -2 Internal system failure: no more specific information is available. -7 Trying to format disk volume xxx with an incorrect value xxx for number of pages. -13 An I/O error occurred while reading page xxx of volume xxx. -14 An I/O error occurred while writing page xxx of volume xxx. -17 Internal error: fetching deallocated pageid xxx of volume xxx. -19 Internal error: pageptr = xxx of page xxx of volume xxx is not fixed. -21 Internal error: unknown sector xxx of volume xxx. -22 Internal error: unknown page xxx of volume xxx. -45 Slot xxx on page xxx of volume xxx is allocated to an anchored record. A new record cannot be inserted here. -46 Internal error: slot xxx on page xxx of volume xxx is not allocated. -48 Accessing deleted object xxx|xxx|xxx. -50 Internal error: relocation record of object xxx|xxx|xxx may be corrupted. -51 Internal error: object xxx|xxx|xxx may be corrupted. -52 Internal error: object overflow address xxx|xxx|xxx may be corrupted. -76 Your transaction (index xxx, xxx@xxx|xxx) timed out waiting on xxx on page xxx|xxx. You are waiting for user(s) xxx to release the page lock. -78 Internal error: an I/O error occurred while reading logical log page xxx (physical page xxx) of xxx. -79 Internal error: an I/O error occurred while writing logical log page xxx (physical page xxx) of xxx. -81 Internal error: logical log page xxx may be corrupted. -90 Redo logging is always a page level logging operation. A data page pointer must be given as part of the address. -96 Media recovery may be needed on volume xxx. -97 Internal error: unable to find log page xxx in log archives. -313 Object buffer underflow while reading. -314 Object buffer overflow while writing. -407 Unknown key xxx referenced in B+tree index {vfid: (xxx, xxx), rt_pgid: xxx, key_type: xxx}. -414 Unknown class identifier: xxx|xxx|xxx. -415 Invalid class identifier: xxx|xxx|xxx. -416 Unknown representation identifier: xxx. -417 Invalid representation identifier: xxx. -583 Trying to allocate an invalid number (xxx) of pages. -603 Internal Error: Sector/page table of file VFID xxx|xxx seems corrupted. -836 LATCH ON PAGE(xxx|xxx) TIMEDOUT -859 LATCH ON PAGE(xxx|xxx) ABORTED -890 Partition failed. -891 Appropriate partition does not exist. -976 Internal error: Table size overflow (allocated size: xxx, accessed size: xxx) at file table page xxx|xxx(volume xxx) -1040 HA generic: xxx. -1075 Descending index scan aborted because of lower priority on B+tree with index identifier: (vfid = (xxx, xxx), rt_pgid: xxx). 다음은 -115, -116번의 오류 번호에 대해 콜-스택 덤프가 수행되도록 파라미터를 설정한 예제이다.
call_stack_dump_on_error= no call_stack_dump_activation_list=-115,-116
call_stack_dump_deactivation_list
call_stack_dump_deactivation_list는 모든 오류에 대해 콜-스택 덤프를 설정한 상태에서, 예외적으로 콜-스택을 덤프하지 않는 특정 오류 번호를 지정하기 위한 파라미터이다. 따라서, call_stack_dump_deactivation_list 파라미터는 call_stack_dump_on_error 의 값이 yes 인 경우에만 효력이 있다.
다음은 -115, -116번의 오류 번호를 제외한 나머지 오류에 대해서 콜-스택 덤프를 수행하기 위해 파라미터를 설정한 예제이다.
call_stack_dump_on_error= yes call_stack_dump_deactivation_list=-115,-116
call_stack_dump_on_error
call_stack_dump_on_error는 데이터베이스 서버에서 오류가 발생했을 때 콜-스택을 덤프할지 결정하기 위한 파라미터이다. no로 설정되면 모든 오류에 대해서 콜-스택을 덤프하지 않고, yes로 설정되면 모든 오류에 대해서 콜-스택을 덤프한다. 기본값은 no이다.
error_log
error_log는 데이터베이스 서버에 오류가 발생하는 경우, 에러 로그가 저장되는 파일 이름을 지정하기 위한 서버/클라이언트 파라미터이다. 에러 로그가 저장되는 파일명의 작성 규칙은 <database_name>_<date>_<time>.err이다. 한편 시스템이 데이터베이스 서버 정보를 찾을 수 없는 오류에 대해서는 에러 로그 파일명의 작성 규칙을 따를 수 없다. 따라서, cubrid.err 파일에 오류 로그를 기록한다. cubrid.err 에러 로그 파일은 $CUBRID/log/server 디렉터리에 저장된다.
error_log_level
error_log_level은 에러 심각성(severity) 수준에 따라 에러 로그 파일에 저장할 에러 메시지를 지정할 수 있는 서버 파라미터이다. 에러 심각성 수준은 가장 낮은 수준인 NOTIFICATION 부터 가장 심각한 수준인 FATAL 까지 총 5단계로 구성되며, 그에 따른 에러 메시지 포함 관계는 FATAL ⊂ ERROR ⊂ SYNTAX ⊂ WARNING ⊂ NOTIFICATION이다. 기본값은 SYNTAX이며, 이 경우 FATAL, ERROR, SYNTAX 에 해당하는 에러 메시지만 에러 로그 파일에 기록된다.
error_log_warning
error_log_warning은 에러 심각성(severity) 수준이 WARNING 인 에러 메시지의 출력 여부를 설정할 수 있는 서버 파라미터이다. 기본값은 no이므로, error_log_level 의 값이 NOTIFICATION으로 설정된 경우에도 WARNING 메시지를 제외한 나머지 수준의 에러 메시지만 저장될 것이다. 따라서, WARNING 메시지가 에러 로그 파일에 저장되도록 하려면, error_log_warning 의 값을 yes로 설정해야 한다.
error_log_size
error_log_size는 에러 로그 파일에서 기록되는 최대 라인 수를 지정하는 파라미터로 기본값은 8,000,000이다. 에러 로그 파일의 라인 수가 이 파라미터의 설정값에 도달하면 <database_name>_<date>_<time>.err.bak 파일이 생성된다.
동시성/잠금 파라미터¶
다음은 데이터베이스 서버의 동시성 제어 및 잠금에 관한 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
deadlock_detection_interval_in_secs | float | 1.0 | 0.1 | |
isolation_level | int | 3 | 1 | 6 |
lock_escalation | int | 100000 | 5 | |
lock_timeout | msec | -1(무제한) | 0(대기안함) | INT_MAX |
lock_timeout_message_type | int | 0 | 0 | 2 |
rollback_on_lock_escalation | bool | no |
deadlock_detection_interval_in_secs
deadlock_detection_interval_in_secs는 중단된 트랜잭션에 대해 교착 상태 여부를 탐지하는 주기를 초 단위로 설정하기 위한 파라미터이다. CUBRID 시스템은 교착 상태에 있는 트랜잭션 중 하나를 롤백시켜 교착 상태를 해결한다. 기본값은 1초이며, 최소값은 0.1초이다. 이 값은 0.1초 단위로 올림하여 동작한다. 즉, 입력값이 0.12초이면 0.2초를 입력한 것과 같이 동작한다. 탐지 주기가 길면 오랜 시간동안 교착 상태를 탐지할 수 없으므로 주의한다.
isolation_level
isolation_level은 트랜잭션의 격리 수준을 설정하기 위한 파라미터로 격리 수준이 높을수록 트랜잭션의 동시성이 적고 다른 동시성 트랜잭션에 의해 간섭받지 않는다. isolation_level 파라미터는 격리 수준을 의미하는 1에서 6까지의 정수값 또는 문자열로 설정하며, 기본값은 TRAN_REP_CLASS_UNCOMMIT_INSTANCE이다. 각 격리 수준 및 파라미터 설정값에 대한 자세한 내용은 트랜잭션 격리 수준 과 다음 표를 참조한다.
격리 수준 isolation_level 파라미터 설정값 SERIALIZABLE "TRAN_SERIALIZABLE" or 6 REPEATABLE READ CLASS with REPEATABLE READ INSTANCES "TRAN_REP_CLASS_REP_INSTANCE" or "TRAN_REP_READ" or 5 REPEATABLE READ CLASS with READ COMMITTED INSTANCES (or CURSOR STABILITY) "TRAN_REP_CLASS_COMMIT_INSTANCE" or "TRAN_READ_COMMITTED" or "TRAN_CURSOR_STABILITY" or 4 REPEATABLE READ CLASS with READ UNCOMMITTED INSTANCES "TRAN_REP_CLASS_UNCOMMIT_INSTANCE" or "TRAN_READ_UNCOMMITTED" or 3 READ COMMITTED CLASS with READ COMMITTED INSTANCES "TRAN_COMMIT_CLASS_COMMIT_INSTANCE" or 2 READ COMMITTED CLASS with READ UNCOMMITTED INSTANCES "TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE" or 1
- TRAN_SERIALIZABLE : 가장 높은 수준의 일관성을 보장하는 격리 수준이며, SERIALIZABLE 을 참고한다.
- TRAN_REP_CLASS_REP_INSTANCE : 유령 읽기(phantom read)가 발생될 수 있는 격리 수준이며, REPEATABLE READ CLASS with REPEATABLE READ INSTANCES 를 참고한다.
- TRAN_REP_CLASS_COMMIT_INSTANCE : 반복 불가능한 읽기(unrepeatable read)가 발생될 수 있는 격리 수준이며, REPEATABLE READ CLASS with READ COMMITTED INSTANCES 를 참고한다.
- TRAN_REP_CLASS_UNCOMMIT_INSTANCE : 더티 읽기(dirty read)가 발생될 수 있는 격리 수준이며, REPEATABLE READ CLASS with READ UNCOMMITTED INSTANCES 를 참고한다.
- TRAN_COMMIT_CLASS_COMMIT_INSTANCE : 반복 불가능한 읽기(unrepeatable read)가 발생될 수 있고, 데이터 조회 중에 다른 트랜잭션에 의한 테이블 스키마의 변경이 허용되는 격리 수준이며, READ COMMITTED CLASS with READ COMMITTED INSTANCES 를 참고한다.
- TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE : 더티 읽기(dirty read)가 발생될 수 있고, 데이터 조회 중에 다른 트랜잭션에 의한 테이블 스키마의 변경이 허용되는 격리 수준이며, READ COMMITTED CLASS with READ UNCOMMITTED INSTANCES 를 참고한다.
lock_escalation
lock_escalation은 행에 대한 잠금이 테이블 잠금으로 확대되기 전에 개별 행에 허용되는 최대 잠금의 개수를 설정하기 위한 파라미터로 기본값은 100,000이다. lock_escalation 파라미터의 설정값이 작으면, 메모리 잠금 관리에 의한 오버헤드가 적은 반면 동시성은 줄어든다. 반대로 설정값이 크면 메모리 잠금 관리에 의한 오버헤드가 큰 반면 동시성이 향상된다.
lock_timeout
lock_timeout은 잠금 대기 시간을 지정하기 위한 클라이언트 파라미터로 지정된 시간 이내에 잠금이 허용되지 않으면 해당 트랜잭션이 취소되고 오류가 반환된다. 기본값인 -1로 설정하면 잠금이 허용될 때까지의 대기 시간이 무제한이고, 0으로 설정하면 잠금을 대기하지 않는다.
s, min, h 단위를 지정할 수 있으며 각각 seconds, minutes, hours를 의미한다. 단위 생략 시 기본 단위는 밀리초(ms)이며, 밀리초로 설정한 값은 초 단위로 올림된다. 예를 들어, 1ms는 1s가 되며, 1001ms는 2s가 된다.
lock_timeout_message_type
lock_timeout_message_type은 잠금 타임아웃 발생 시 반환되는 메시지에 포함되는 정보 수준을 설정하는 파라미터이다. 기본값인 0으로 설정하면 잠금 소유 정보가 메시지에 포함되지 않고, 1로 설정하면 잠금 소유 정보가 하나만 포함되며, 2로 설정하면 잠금 소유 정보가 모두 포함된다.
- lock_timeout_message_type = 0인 경우
ERROR: Your transaction (index 3, cub_user@cdbs006.cub|15668) timed out waiting on X_LOCK lock on instance 0|636|34 of class participant. You are waiting for user(s) to finish.
- lock_timeout_message_type = 1인 경우
ERROR: Your transaction (index 3, cub_user@cdbs006.cub|15668) timed out waiting on X_LOCK lock on instance 0|636|34 of class participant. You are waiting for user(s) cub_user@cdbs006.cub|15615 to finish.
- lock_timeout_message_type = 2인 경우
ERROR: Your transaction (index 3, cub_user@cdbs006.cub|15668) timed out waiting on X_LOCK lock on instance 0|636|34 of class participant. You are waiting for user(s) cub_user@cdbs006.cub|15615, cub_user@cdbs006.cub|15596 to finish.
rollback_on_lock_escalation
잠금 에스컬레이션 발생 시 트랜잭션의 롤백 여부를 지정한다. 기본값은 no이다.
이 파라미터가 yes로 설정되면, 잠금 에스컬레이션 발생 시점에 에스컬레이션 없이 에러 로그를 기록하고, 해당 잠금 요청은 실패하면서 트랜잭션을 롤백한다. no로 설정되면 잠금 에스컬레이션이 수행되고 트랜잭션을 계속 진행한다.
잠금 에스컬레이션이 발생하면 레코드 잠금이 테이블 잠금으로 전환되고, 잠금(lock)을 해제하는 시간이 오래 걸리면서 해당 테이블에 대한 다른 트랜잭션의 접근이 불가하게 되는 상황이 발생할 수 있다. 그렇다고 잠금 에스컬레이션이 발생하는 레코드 잠금 개수를 지정하는 lock_escalation 파라미터 값을 크게 하면 메모리 자원을 많이 사용하는 문제가 발생할 수 있다.
로깅 관련 파라미터¶
다음은 CUBRID 데이터베이스의 백업과 복구에 이용되는 로그에 관련된 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
adaptive_flush_control | bool | yes | ||
background_archiving | bool | yes | ||
checkpoint_every_size | byte | 10000 * log_page_size | 10 * log_page_size | log_page_size |
checkpoint_interval | msec | 720min | 1min | 35791394min |
force_remove_log_archives | bool | yes | ||
log_buffer_size | byte | 128 * log_page_size | 3 * log_page_size | INT_MAX * log_page_size |
log_max_archives | int | INT_MAX | 0 | INT_MAX |
log_trace_flush_time | int | 0 | 0 | INT_MAX |
max_flush_size_per_second | byte | 10000 * db_page_size | 1 * db_page_size | INT_MAX * db_page_size |
sync_on_flush_size | byte | 200 * db_page_size | 1 * db_page_size | INT_MAX * db_page_size |
adaptive_flush_control
adaptive_flush_control는 내려쓰기(flush) 작업 중에 50ms마다 작업 상태에 따라 내려쓰기할 용량(flush capacity)을 자동 조정하는 파라미터이며, 기본값은 yes이다. 즉, 특정 시점에 INSERT 또는 UPDATE 연산이 집중되어 내려쓰기한 페이지 수가 max_flush_size_per_second 파라미터 값에 도달하면 이 용량을 증가시키고, 이에 도달하지 못하면 이 용량을 감소시킨다. 이처럼 워크로드에 따라 주기적으로 내려쓰기 용량을 조정하여 I/O 부하를 분산할 수 있다.
background_archiving
background_archiving은 특정 시점마다 주기적으로 임시 보관 로그를 생성하도록 하는 파라미터로서, 보관 로그 작업으로 인한 디스크 I/O 부하를 분산시키고자 할 때 유용하다. 기본값은 yes이다.
checkpoint_every_size
checkpoint_every_size는 체크포인트가 수행되는 주기를 로그 페이지 단위로 설정하는 파라미터이다. 값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 10,000 * log_page_size (log_page_size가 16K이면 156.25M)이다.
특정 시간대에 INSERT / UPDATE 가 집중되는 서비스 환경에서는 checkpoint_every_size 파라미터의 설정값을 작게 설정하여 체크포인트 시점에 I/O 부하를 분산할 수 있다.
체크포인트는 특정 시점에 데이터 버퍼에 있는 모든 수정된 페이지를 데이터베이스 볼륨(디스크)에 기록하는 작업이며, 데이터베이스 장애 발생 시 최근 체크포인트 시점까지 데이터를 복구할 수 있다. 다만, 체크포인트 작업으로 인해 디스크로 저장되는 로그 파일의 양이 많을 경우 디스크 I/O가 발생하여 DB 운영에 영향을 끼칠 수 있으므로 체크포인트 주기를 적절하게 설정해야 한다.
체크포인트 주기 설정과 관련된 파라미터는 checkpoint_interval과 checkpoint_every_size이며, checkpoint_interval 파라미터의 설정값이 경과된 시점 또는 로그 페이지 수가 checkpoint_every_size 파라미터의 설정값에 도달하는 시점마다 체크포인트 작업이 주기적으로 수행된다.
checkpoint_interval
checkpoint_interval은 체크포인트가 수행되는 주기를 설정하는 파라미터이다. s, min, h 단위를 지정할 수 있으며 각각 seconds, minutes, hours를 의미한다. 단위 생략 시 기본 단위는 밀리초(ms)이며, 밀리초로 설정한 값은 초 단위로 올림된다. 예를 들어, 1ms는 1s가 되며, 1001ms는 2s가 된다. 기본값은 720min이고, 최소값은 1min이다. 최대값은 35791394min이다.
force_remove_log_archives
force_remove_log_archives는 log_max_archives로 지정한 개수의 최근 보관 로그(log archive) 파일을 제외한 나머지 파일의 삭제 허용 여부를 지정하는 파라미터로서, 기본값은 yes이다.
파라미터 값을 yes로 설정하면, log_max_archives로 지정한 개수의 최근 보관 로그 파일을 제외한 나머지 파일이 삭제된다.
파라미터 값을 no로 설정하면, 보관 로그 파일이 삭제되지 않지만, 예외적으로 ha_mode를 on으로 설정하면 HA 관련 프로세스에 필요한 보관 로그 파일과 log_max_archvies로 지정한 개수의 최근 보관 로그 파일을 제외한 나머지 파일이 삭제된다.
CUBRID HA 환경을 구축하고자 하는 사용자는 환경 설정을 참고한다.
log_buffer_size
log_buffer_size는 메모리에 캐시되는 로그 버퍼의 크기를 설정하는 파라미터이다. 값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 128 * log_page_size (log_page_size가 16K이면 2M) 이다.
log_buffer_size 파라미터의 설정값이 크면 데이터베이스 수정 연산이 많고, 길고 큰 트랜잭션이 많은 환경에서는 디스크 I/O가 감소되어 성능이 향상될 수 있다. CUBRID가 설치된 시스템의 메모리 크기 및 작업 연산의 크기를 고려하여 적당한 값으로 설정할 것을 권장한다.
- 필요한 메모리 크기 = 로그 버퍼 크기(log_buffer_size)
log_max_archives
log_max_archives는 보존할 보관 로그 파일의 최대 개수를 설정하는 파라미터이다. 최소값은 0이며, 기본값은 INT_MAX (2147483647)이다. 이 파라미터는 force_remove_log_archives 의 설정에 따라 동작이 달라질 수 있다.
예를 들어, cubrid.conf의 log_max_archives가 3이고 force_remove_log_archives가 yes이면, 최근 3개의 보관 로그 파일만 유지하고 네 번째 보관 로그가 생성될 때에는 이전에 생성된 보관 로그 파일을 자동으로 삭제한다. 이때 삭제되는 보관 로그 파일의 정보는 *_lginf 파일에 기록된다.
하지만 활성화된 트랜잭션이 기존 보관 로그 파일을 여전히 참조하고 있다면, 해당 보관 로그 파일은 삭제되지 않는다. 즉, 어떤 트랜잭션이 첫 번째 보관 로그 파일이 생성되는 시점에서 시작되어 다섯 번째 보관 로그 파일이 생성되는 시점까지도 종료되지 않았다면 첫 번째 보관 로그 파일은 삭제되지 않는다.
운영 중에 log_max_archives의 값을 동적으로 변경하는 경우, 변경된 값은 새로운 보관 로그 파일이 생성될 때 적용된다. 예를 들어, 해당 값을 10에서 5로 변경한 경우, 새로운 보관 로그 파일이 생성되는 시점에 오래된 파일 5개를 삭제한다.
CUBRID HA 환경을 구축하고자 하는 사용자는 환경 설정을 참고한다.
Note
2008 R4.3 이하 버전과 9.1 버전에서 log_max_archives는 HA 환경에서 복제 로그 파일의 최대 보존 개수를 지정할 때도 사용되었으나, 2008 R4.4와 9.2 이상 버전에서는 cubrid_ha.conf의 ha_copy_log_max_archives 파라미터가 그 역할을 대신하게 되었다.
log_trace_flush_time
이 파라미터에 설정한 시간보다 로그 플러싱 시간이 오래 걸리는 경우 해당 이벤트가 데이터베이스 서버 로그에 기록된다.
기록되는 정보의 예는 다음과 같다.
03/18/14 10:20:45.889 - LOG_FLUSH_THREAD_WAIT total flush count: 1 page(s) total flush time: 310 ms time waiting for log writer: 308 ms last log writer info client: DBA@cdbs037.cub|copylogdb(15312) time spent by log writer: 308 ms
- LOG_FLUSH_THREAD_WAIT: 이벤트 이름
- total flush count: 이벤트 발생 당시 플러시(flush)한 페이지 수
- total flush time: 총 플러시 소요 시간
- time waiting for log writer: LFT(Log Flushing Thread)가 LWT(Log Writer Thread)를 대기한 시간
- last log writer info
- DBA@cdbs037.cub|copylogdb(15312): LFT를 대기하게 한 LWT와 관련된 copylogdb 정보 <사용자@호스트명|클라이언트명(pid)>
- time spent by log writer: LWT에서 측정한 LWT 소요 시간(일반적으로 time waiting for log writer와 동일)
max_flush_size_per_second
max_flush_size_per_second는 버퍼로부터 디스크로 내려쓰기(flush) 작업을 수행할 때, 내려쓰기할 최대 용량 (flush capacity)을 설정하기 위한 파라미터이다. 값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 10000 * db_page_size (db_page_size가 16K이면 156.25M)이다. 즉, 이 파라미터 설정을 통해 1초당 내려쓰기할 최대 용량을 제어하여, 특정 시점에 I/O 부하가 집중되는 현상을 방지할 수 있다.
만약, 특정 시점에 INSERT 또는 UPDATE 연산이 집중되어 이 파라미터에 의해 설정된 최대 용량에 도달하면, 로그 페이지만 내려쓰기를 수행하고 데이터 페이지는 더 이상 디스크로 내려쓰지 않는다. 따라서, 이 파라미터는 서비스 환경의 워크로드를 고려하여 적절한 값을 설정해야 한다.
sync_on_flush_size
sync_on_flush_size는 버퍼로부터 데이터 페이지 및 로그 페이지를 내려쓰기한 후, 운영 시스템의 FILE I/O와 동기화를 수행하는 주기를 페이지 단위로 설정하는 파라미터이다. 값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 200 * db_page_size (db_page_size가 16K이면 3.125M)이다. 즉, 200페이지만큼 내려쓰기 작업이 수행될 때마다 CUBRID 서버는 운영 체제의 FILE I/O와 동기화를 수행한다. I/O 부하와 관련된 파라미터이다.
트랜잭션 처리 관련 파라미터¶
다음은 트랜잭션의 커밋 성능 향상을 위한 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
async_commit | bool | no | ||
group_commit_interval_in_msecs | msec | 0 | 0 |
async_commit
async_commit은 비동기식 커밋 기능을 활성화시키는 파라미터로 기본값인 no로 설정하면 비동기식 커밋을 수행하지 않고, yes로 설정하면 비동기식 커밋을 수행한다. 비동기식 커밋이란 커밋 로그가 디스크에 플러시되기 이전에 클라이언트에게 커밋을 완료 처리하고, 로그 플러시 스레드(LFT)가 로그 플러시를 백그라운드에서 수행하여 커밋 작업의 성능을 향상시키는 기능이다. 로그 플러시가 수행되기 전에 데이터베이스 서버에 장애가 발생하면 이미 커밋 완료된 트랜잭션을 복구할 수 없으므로 주의한다.
group_commit_interval_in_msecs
group_commit_interval_in_msecs은 그룹 커밋을 수행하는 간격을 밀리초(mesc) 단위로 지정하는 파라미터로 기본값인 0 으로 설정되면 그룹 커밋을 수행하지 않는다. 그룹 커밋이란 지정된 시간동안 발생한 여러 번의 커밋을 그룹으로 취합하여 커밋 로그가 동시에 디스크에 플러시되도록 하여 커밋 작업의 성능을 향상시키는 기능이다.
구문/타입 관련 파라미터¶
다음은 CUBRID에서 지원하는 SQL 구문 및 데이터 타입에 관한 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
add_column_update_hard_default | bool | no | ||
alter_table_change_type_strict | bool | no | ||
ansi_quotes | bool | yes | ||
block_ddl_statement | bool | no | ||
block_nowhere_statement | bool | no | ||
compat_numeric_division_scale | bool | no | ||
default_week_format | int | 0 | ||
group_concat_max_len | byte | 1024 | 4 | INT_MAX |
intl_mbs_support | bool | no | ||
no_backslash_escapes | bool | yes | ||
only_full_group_by | bool | no | ||
oracle_style_empty_string | bool | no | ||
pipes_as_concat | bool | yes | ||
plus_as_concat | bool | yes | ||
require_like_escape_character | bool | no | ||
return_null_on_function_errors | bool | no | ||
string_max_size_bytes | byte | 1048576 | 64 | 33554432 |
add_column_update_hard_default
add_column_update_hard_default는 ALTER TABLE … ADD COLUMN 절로 새로운 칼럼을 추가할 때 이 칼럼에 입력할 값을 고정 기본값(hard_default)으로 제공할지 여부를 설정하는 파라미터로서, 기본값은 no이다.
NOT NULL 제약 조건이 있고 DEFAULT 제약 조건이 없을 때 이 파라미터 값이 yes이면 칼럼의 새로운 입력값을 고정 기본값(hard default value)으로 입력하며, no이면 에러를 반환한다. 이 파라미터의 값이 yes일 때 추가하려는 칼럼의 타입에 고정 기본값이 없으면 에러를 반환한다. 각 타입별 고정 기본값에 대해서는 ALTER TABLE 문의 CHANGE/MODIFY 절을 참고한다.
SET SYSTEM PARAMETERS 'add_column_update_hard_default=yes'; CREATE TABLE tbl (i int); INSERT INTO tbl VALUES (1),(2); ALTER TABLE tbl ADD COLUMN j INT NOT NULL; SELECT * FROM tbl;i j ========================= 1 0 2 0SET SYSTEM PARAMETERS 'add_column_update_hard_default=no'; CREATE TABLE tbl (i INT); INSERT INTO tbl VALUES (1),(2); ALTER TABLE tbl ADD COLUMN j INT NOT NULL;ERROR: Cannot add NOT NULL constraint for attribute "j": there are existing NULL values for this attribute.
alter_table_change_type_strict
alter_table_change_type_strict는 타입 변경에 따른 해당 칼럼 값들의 변환 허용 여부를 지정하는 파라미터로서, 기본값은 no이다. 이 파라미터 값이 no이면 칼럼의 타입 변경이나 NOT NULL 제약 조건을 추가할 때 값의 변경이 발생하며, yes이면 값의 변경이 발생하지 않는다. 자세한 내용은 ALTER TABLE 문의 CHANGE/MODIFY 절 을 참고한다.
ansi_quotes
ansi_quotes는 식별자 처리를 위한 기호 또는 문자열을 감싸는 기호에 관한 파라미터로 기본값은 yes이다. 이 파라미터 값이 yes이면 큰따옴표는 식별자 처리 기호로 해석되고, 작은따옴표는 문자열 처리 기호로 해석된다. 이 값이 no이면 큰 따옴표와 작은 따옴표 모두 문자열 처리 기호로 해석된다.
block_ddl_statement
block_ddl_statement는 클라이언트가 수행하는 데이터 정의문(Data Definition Language, DDL)을 제한하기 위한 파라미터로 no로 설정하면 해당 클라이언트의 데이터 정의문 수행을 허용하며, yes로 설정하면 해당 클라이언트의 데이터 정의문 수행을 허용하지 않는다. 기본값은 no이다.
block_nowhere_statement
block_nowhere_statement는 클라이언트가 수행하는 조건절(WHERE)이 없는 UPDATE / DELETE 문을 제한하기 위한 파라미터로 no로 설정하면 해당 클라이언트의 조건절이 없는 UPDATE / DELETE 문을 허용하며, yes로 설정하면 해당 클라이언트의 조건절이 없는 UPDATE / DELETE 문의 수행을 허용하지 않는다. 기본값은 no이다.
compat_numeric_division_scale
compat_numeric_division_scale은 나눗셈 연산의 결과 값(몫)에 대하여 소수점 이하 자릿수를 몇 자리까지 표시할 것인가를 지정하기 위한 파라미터로 no로 설정하면 몫의 소수점 이하 자릿수가 9개가 되고, yes로 설정하면 몫의 소수점 이하 자릿수가 피연산자의 소수점 이하 자릿수에 따라 결정된다. 기본값은 no이다.
default_week_format
group_concat_max_len
group_concat_max_len은GROUP_CONCAT()
함수의 리턴 값의 크기를 제한하는 파라미터이다. 값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 1024 바이트이며, 최소값은 4 바이트, 최대값은 INT_MAX 바이트이다.GROUP_CONCAT()
함수의 결과가 제한을 넘으면 NULL을 반환한다.
intl_mbs_support
intl_mbs_support는 멀티바이트 문자셋(Multibyte Character Set)의 지원 여부를 지정하기 위한 파라미터이며, 기본값은 no이다. 한글과 같은 멀티바이트 문자로 테이블 이름 또는 칼럼 이름을 생성하는 경우, 이 파라미터 값을 yes로 설정해야 한다. 단, 멀티바이트 문자셋을 지원하기 위한 연산 비용이 크므로, 성능 향상을 위해 intl_mbs_support 파라미터를 no로 설정하고 테이블 이름이나 칼럼 이름을 영어로 사용할 것을 권장한다.
no_backslash_escapes
no_backslash_escapes은 이스케이프 문자로 백슬래시(\) 사용 여부에 관한 파라미터로서, 기본값은 yes이다. 이 파라미터 값이 no이면 백슬래시(\)가 이스케이프 문자로 사용되며, yes이면 백슬래시는 일반 문자로 사용된다. 예를 들어, 이 값이 no 일 때 "\n"은 개행(new line) 문자를 의미한다. 그러나 이 값이 yes이면 "\n"은 "\"과 "n" 두 개의 문자를 의미한다.
백슬래시가 이스케이프 문자로 사용되는 경우에 대한 자세한 설명은 특수 문자 이스케이프 를 참고한다.
only_full_group_by
only_full_group_by는 GROUP BY 절 사용에 관한 확장된 문법의 사용 여부를 설정하는 파라미터이다.
이 파라미터 값이 no이면 확장된 문법이 적용되므로 GROUP BY 절에 명시되지 않은 칼럼을 SELECT 칼럼 리스트에 명시할 수 있고, 이 값이 yes이면 GROUP BY 절에 명시된 칼럼만 SELECT 칼럼 리스트에 명시할 수 있다.
기본값은 no이므로, SQL 표준에 따라 질의를 수행하려면 only_full_group_by 파라미터 값을 yes로 설정한다. 이 경우에는 확장된 문법이 적용되지 않으므로 실행 결과로 아래와 같은 에러가 출력된다.
ERROR: Attributes exposed in aggregate queries must also appear in the group by clause.
oracle_style_empty_string
oracle_style_empty_string은 다른 DBMS(Database Management System)와의 호환성을 향상시키기 위한 파라미터로 빈 문자열(empty string)을 Oracle DBMS와 마찬가지로 NULL로 처리할 것인지 지정한다. oracle_style_empty_string 파라미터를 no로 설정하면 빈 문자열을 유효한 문자열로 처리하고, yes로 설정하면 Oracle DBMS와 마찬가지로 빈 문자열을 NULL로 처리한다.
pipes_as_concat
pipes_as_concat은 이중 파이프 기호(||)의 사용에 관한 파라미터로서, 기본값은 yes이다. 이 파라미터 값이 yes이면 이중 파이프 기호가 문자열의 병합 연산자로 해석되고, no이면 불리언(boolean) 연산자인 OR로 해석된다.
plus_as_concat
plus_as_concat은 + 연산자의 사용에 관한 파라미터로서, 기본값은 yes이다. 이 파라미터 값이 yes이면 + 연산자가 문자열의 병합 연산자로 해석되고, no이면 수치 연산자로 해석된다.
-- plus_as_concat = yes SELECT '1'+'1';'1'+'1' ====================== '11'SELECT '1'+'a';'1'+'a' ====================== '1a'-- plus_as_concat = no SELECT '1'+'1';'1'+'1' ========================== 2.000000000000000e+000SELECT '1'+'a';ERROR: Cannot coerce 'a' to type double.
require_like_escape_character
require_like_escape_character는 LIKE 절의 이스케이프 문자 사용 여부에 관한 파라미터로서, 기본값은 no이다. 이 파라미터 값이 yes이고 no_backslash_escapes 가 no이면 LIKE 절의 문자열에서 백슬래시(\)가 이스케이프 문자로 사용되며, 그렇지 않으면 LIKE… ESCAPE 절을 사용하여 이스케이프 문자를 명시해야 한다. 자세한 내용은 LIKE 을 참고한다.
return_null_on_function_errors
return_null_on_function_errors는 일부 SQL 함수에서 에러가 발생할 때의 동작을 정의하는 파라미터로서, 기본값은 no이다. 이 파라미터 값이 yes이면 함수에서 에러가 발생할 때 NULL을 반환하며, no이면 함수에서 에러가 발생할 때 에러를 반환하고 관련 메시지를 출력한다.
다음 SQL 함수가 이 시스템 파라미터의 영향을 받는다.
ADDDATE()
ADDTIME()
DATEDIFF()
DAY()
DAYOFMONTH()
DAYOFWEEK()
DAYOFYEAR()
FROM_DAYS()
FROM_UNIXTIME()
HOUR()
LAST_DAY()
MAKEDATE()
MAKETIME()
MINUTE()
MONTH()
QUARTER()
SEC_TO_TIME()
SECOND()
TIME()
TIME_TO_SEC()
TIMEDIFF()
TO_DAYS()
WEEK()
WEEKDAY()
YEAR()
SET SYSTEM PARAMETERS 'return_null_on_function_errors=no'; SELECT YEAR('12:34:56');ERROR: Conversion error in time format.SET SYSTEM PARAMETERS 'return_null_on_function_errors=yes'; SELECT YEAR('12:34:56');year('12:34:56') ====================== NULL
string_max_size_bytes
string_max_size_bytes는 문자열 함수 또는 연산에서 문자열 인자로 사용할 수 있는 최대 바이트 크기를 정의하는 파라미터이다. 값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 1,048,576 바이트(1M)이다. 최소값은 64 바이트, 최대값은 33,554,432 바이트(32M)이다.
이 파라미터에 영향을 받는 함수 및 연산식은 다음과 같다.
SPACE()
CONCAT()
CONCAT_WS()
- + : 문자열이 피연산자
REPEAT()
GROUP_CONCAT()
: 이 함수는 string_max_size_bytes 파라미터뿐만 아니라 group_concat_max_len 파라미터의 영향도 받는다.INSERT()
함수
질의 계획 캐시 관련 파라미터¶
다음은 질의 계획에 대한 캐시 기능과 관련된 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
max_plan_cache_entries | int | 1,000 |
max_plan_cache_entries
max_plan_cache_entries는 메모리에 캐시하는 질의 실행 계획의 최대 개수를 설정하는 파라미터이다. max_plan_cache_entries 파라미터가 -1이나 0으로 설정되면 작성된 질의 실행 계획을 메모리 캐시에 저장하지 않는 것이며, 1 이상의 정수값이 설정되면 설정된 개수만큼의 질의 실행 계획을 메모리 캐시한다.
다음은 최대 1,000개의 질의에 대해 질의 실행 계획 캐시 기능을 수행하는 예제이다.
max_plan_cache_entries=1000
유틸리티 관련 파라미터¶
다음은 CUBRID에서 사용되는 유틸리티와 관련된 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
backup_volume_max_size_bytes | byte | 0 | 32K | |
communication_histogram | bool | no | ||
compactdb_page_reclaim_only | int | 0 | ||
csql_history_num | int | 50 | 1 | 200 |
backup_volume_max_size_bytes
backup_volume_max_size_bytes는 cubrid backupdb 유틸리티에 의해 생성되는 백업 볼륨 파일의 분할 크기를 바이트 단위로 설정하는 파라미터이다. 값 뒤에 B, K, M, G, T로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 0이고, 최소값은 32K이다.
기본값인 0으로 설정하면 생성되는 백업 볼륨이 분할되지 않으며, 0보다 큰 값을 설정하면 지정된 크기의 단위로 백업 볼륨 파일을 분할하여 생성한다.
communication_histogram
communication_histogram은 csql 인터프리터의 세션 명령어 " ;.h "와 관련된 파라미터이며, 기본값은 no이다. CSQL 실행 통계 정보 출력를 참고한다.
compactdb_page_reclaim_only
compactdb_page_reclaim_only는 compactdb 유틸리티와 관련된 파라미터로 이미 할당된 저장 영역의 OID를 재사용하기 위하여 이미 삭제된 객체의 저장 영역을 정리하는 유틸리티이다. compactdb 유틸리티에 의해 저장 영역이 재정렬되는 작업은 3단계로 구분할 수 있으며, compactdb_page_reclaim_only 파라미터를 통해 재정렬 작업의 단위를 선택할 수 있다. 기본값인 0 으로 설정하면 1, 2, 3단계를 모두 수행하므로 데이터 단위, 테이블 단위, 파일 단위로 저장 영역을 재정렬한다. 1로 설정하면 1단계를 생략하므로 테이블 및 파일 단위로 저장 영역을 재정렬하고, 2로 설정하면 1, 2단계를 생략하므로 파일 단위로만 저장 영역을 재정렬한다.
- 1단계 : 데이터 단위로 저장 영역을 재정렬한다.
- 2단계 : 테이블 단위로 저장 영역을 재정렬한다.
- 3단계 : 파일 단위(heap file)로 저장 영역을 재정렬한다.
csql_history_num
csql_history_num은 CSQL 인터프리터와 관련된 파라미터로 CSQL 인터프리터 내에서 히스토리 내역으로 저장되는 SQL 문의 개수를 설정하는 파라미터이다. 기본값은 50이다.
HA 관련 파라미터¶
다음은 HA 관련 파라미터로, 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 |
---|---|---|
ha_mode | string | off |
ha_mode
ha_mode는 CUBRID HA 기능을 설정하기 위한 파라미터이며, 기본값은 off이다.
- off : CUBRID HA 기능을 사용하지 않는다.
- on : 설정한 노드는 failover의 대상이 되는 노드로, CUBRID HA 기능을 사용한다.
- replica : 설정한 노드는 failover의 대상이 되지 않는 노드로, CUBRID HA 기능을 사용한다.
CUBRID HA 기능을 사용하려면 ha_mode 파라미터를 설정하는 것 외에 cubrid_ha.conf 파일에서 HA 관련 파라미터를 설정해야 한다. 자세한 내용은 CUBRID HA 를 참고한다.
기타 파라미터¶
다음은 기타 파라미터 정보로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.
파라미터 이름 | 타입 | 기본값 | 최소값 | 최대값 |
---|---|---|---|---|
access_ip_control | bool | no | ||
access_ip_control_file | string | |||
auto_restart_server | bool | yes | ||
index_scan_in_oid_order | bool | no | ||
index_unfill_factor | float | 0.05 | 0 | 0.5 |
java_stored_procedure | bool | no | ||
multi_range_optimization_limit | int | 100 | 0 | 10000 |
pthread_scope_process | bool | yes | ||
server | string | |||
service | string | |||
session_state_timeout | sec | 21600(6시간) | 60(1분) | 31536000(1년) |
single_byte_compare | bool | no | ||
sql_trace_slow | msec | -1(무제한) | 0 | 86400000(24시간) |
sql_trace_execution_plan | bool | yes | ||
use_orderby_sort_limit | bool | yes |
access_ip_control
access_ip_control은 서버 접속을 허용하는 IP를 제한하는 기능 사용 여부를 지정하는 파라미터이다. 기본값은 no이다. 자세한 내용은 데이터베이스 서버 접속 제한 을 참고한다.
access_ip_control_file
access_ip_control_file은 서버가 허용하는 IP 목록을 저장한 파일 이름을 지정하는 파라미터이다. access_ip_control 값이 yes이면 데이터베이스 서버는 이 파라미터로 지정한 파일에 저장된 IP의 접속만 허용한다. 자세한 내용은 데이터베이스 서버 접속 제한 을 참고한다.
auto_restart_server
auto_restart_server는 데이터베이스 서버 프로세스에 심각한 오류가 발생해서 프로세스가 중단될 경우에 자동으로 재시작할 것인가를 지정하는 파라미터이다. auto_restart_server를 yes로 설정하면 서버 프로세스가 오류로 중단되었을 때 자동으로 재시작한다. 정상적인 종료 절차(CUBRID 서버의 STOP 명령)에 의해 종료된 경우에는 해당하지 않는다.
index_scan_in_oid_order
index_scan_in_oid_order는 인덱스를 스캔한 후 검색 결과 데이터를 가져오는 순서를 OID 순으로 지정하기 위한 파라미터이다. 기본값인 no로 설정하면 데이터 순서대로 결과를 가져오고, yes로 설정하면 OID 순서대로 결과를 가져온다.
index_unfill_factor
최초 인덱스 생성 후 INSERT 나 UPDATE를 실행할 때 인덱스 페이지가 꽉 차서 여유 공간이 없으면 인덱스 페이지 노드 분할(split)이 발생하는데, 이는 오퍼레이션 시간을 증가시켜 성능에 영향을 미친다. index_unfill_factor는 인덱스를 생성할 때 각 인덱스 페이지 노드의 여유 공간을 확보하는 비율을 지정하는 파라미터이다. index_unfill_factor 설정값은 인덱스를 처음 생성할 때만 적용되며, 페이지에 지정된 빈 공간의 비율을 동적으로 유지하지 않는다. 값의 범위는 0부터 0.5까지이고 기본값은 0.05이다.
인덱스를 생성할 때 인덱스의 페이지 노드에 여유 공간이 없이(index_unfill_factor를 0으로 설정) 생성한다면, 추가로 삽입할 때마다 매번 인덱스 페이지 노드의 분할이 발생하여 성능에 영향을 끼친다.
index_unfill_factor 값이 크면 인덱스 생성 시 노드 여유 공간을 많이 확보한다. 따라서 최초 인덱스 생성 후 노드 여유 공간이 꽉 찰 때까지 상대적으로 긴 시간 동안 인덱스 노드의 분할이 발생하지 않으므로, 상대적으로 성능이 나을 수 있다. 이 값이 작으면 인덱스 생성 시 노드 여유 공간이 작기 때문에, 인덱스 노드의 여유 공간이 금방 꽉 차게 될 가능성이 높으므로, 상대적으로 INSERT 나 UPDATE 에 의한 인덱스 노드 분할 발생 가능성이 높다.
java_stored_procedure
java_stored_procedure는 Java 가상 머신(Java Virtual Machine, JVM)을 실행하여 Java 저장 프로시저(Java stored procedure)를 사용하게 하기 위한 파라미터이다. 기본값인 no로 설정하며 JVM이 실행되지 않고, yes로 설정하면 JVM이 실행되어 Java 저장 프로시저(Java stored procedure)를 사용할 수 있다. 따라서, Java 저장 프로시저를 사용할 계획이 있는 경우에는 파라미터를 yes로 설정해야 한다.
multi_range_optimization_limit
multi_range_optimization_limit은 다중 범위(col IN (? , ?, …,?))의 조건을 가지며 인덱스 사용이 가능한 질의에서, LIMIT 절이 지정하는 행의 개수가 이 파라미터가 지정하는 숫자 이내이면 인덱스 정렬 방식에 대한 최적화를 수행한다. 기본값은 100이다.
예를 들어, 이 파라미터의 값이 50일 때 LIMIT 10이면 이 파라미터가 지정한 값 이내이므로 각 조건에 해당하는 범위의 값을 정렬하면서 결과를 생성한다. LIMIT 60이면 파라미터 설정값을 초과하므로 각 조건에 해당하는 범위의 값을 모두 가져온 후 정렬한다.
이 값의 설정에 따라 중간 값의 정렬을 진행하면서(on-the-fly) 결과를 수집하느냐, 결과 값을 먼저 수집한 후 정렬하느냐의 차이가 발생하므로, 이 값이 너무 크면 오히려 성능에 불리할 수 있다.
pthread_scope_process
pthread_scope_process는 스레드의 경쟁 범위를 설정하는 파라미터로 AIX 시스템에서만 적용된다. no로 설정하면 경쟁 범위가 PTHREAD_SCOPE_SYSTEM이 되고, yes로 설정하면 PTHREAD_SCOPE_PROCESS 가 된다. 기본값은 yes이다.
server
server는 CUBRID 서비스 시작 시 자동으로 시작하도록 하는 데이터베이스 서버 프로세스들의 이름을 등록하는 파라미터이다. 해당 데이터베이스들의 이름을 쉼표(,)로 구분하여 나열한다.
service
service는 CUBRID 서비스 시작 시 자동으로 시작하는 프로세스를 등록하는 파라미터로 server, broker, manager, heartbeat 의 네 종류 프로세스가 있다. 일반적으로 service=server,broker,manager와 같이 세 종류 프로세스를 등록한다. 각 프로세스에 따른 동작은 다음과 같다.
- server : @server 파라미터에서 지정한 데이터베이스 프로세스를 시작한다.
- broker : 브로커 프로세스를 시작한다.
- manager : 매니저 프로세스를 시작한다.
- heartbeat : HA 관련 프로세스를 시작한다.
session_state_timeout
session_state_timeout은 DB 서버 프로세스 내에서 세션 데이터가 유지되는 시간을 정의하는 시스템 파라미터이다. 세션 데이터는 드라이버가 연결을 종료하거나 세션 기간이 만료될(expired) 때 삭제되며, 응용 클라이언트가 비정상 종료되면 지정한 시간 이후에 세션 기간이 만료된다.
CUBRID 세션 데이터에 해당하는 것은 SET 으로 정의된 사용자 변수, PREPARE 문, 가장 마지막에 삽입한 ID(LAST_INSERT_ID), 가장 마지막에 실행한 문장에 영향받은 레코드의 개수(ROW_COUNT)이다. SET 으로 정의된 사용자 변수와 PREPARE 문은 세션 기간이 만료되기 전에 DROP / DEALLOCATE 문을 수행하여 삭제할 수 있다.
기본값은 21600 (6시간)이고, 단위는 초이다.
single_byte_compare
single_byte_compare는 문자열 비교(string compare)를 1바이트 단위로 수행하기 위한 파라미터이다. 기본값인 no로 설정하면 2바이트 단위로 문자열 비교를 수행한다. yes로 설정하면 1바이트 단위로 문자열 비교를 수행하므로 유니코드(UTF-8) 환경에서 저장된 데이터에 대해 정상적으로 문자열 비교/검색을 수행할 수 있다.
sql_trace_slow
sql_trace_slow는 장기 실행 질의(long running query)로 판단될 질의 실행 시간을 설정하는 파라미터이다. ms, s, min, h 단위를 지정할 수 있으며 각각 milliseconds, seconds, minutes, hours를 의미한다. 단위 생략 시 기본 단위는 밀리초(ms)이다. 기본값은 -1이고 최대값은 86400000 밀리초(24h)이다. -1은 무한대 시간을 의미하며 어떤 질의도 장기 실행 질의로 판단되지 않는다. 자세한 내용은 아래의 sql_trace_execution_plan 의 설명을 참고한다.
Note
sql_trace_slow는 서버의 질의 실행 시간을 기준으로 실행 시간 초과 여부를 판단하며, MAX_QUERY_TIMEOUT 브로커 파라미터는 브로커 단에서의 질의 실행 시간을 기준으로 이를 판단한다.
sql_trace_execution_plan
sql_trace_execution_plan은 sql_trace_slow 파라미터 값의 설정 시간을 초과한 장기 실행 질의(long running query)의 실행 계획을 출력할지 여부를 설정하는 파라미터이다. 기본값은 no이다.
이 값이 yes이면 서버 에러 로그 파일($CUBRID/log/server 이하의 파일), CAS 로그 파일($CUBRID/log/broker/sql_log 이하의 파일)에 해당 SQL 문, 질의 실행 계획, cubrid statdump 명령의 출력 정보를 기록하며, cubrid plandump를 실행할 때 해당 SQL 문과 질의 실행 계획을 출력한다.
이 값이 no면 서버 에러 로그 파일, CAS 로그 파일에 해당 SQL문만 기록하며, cubrid plandump를 실행할 때 해당 SQL 문만 출력한다.
예를 들어 5초를 초과하면 느린 질의(slow query)로 규정하고 해당 질의의 실행 계획을 로그 파일에 출력하고 싶은 경우, sql_trace_slow의 값을 5000(ms)로 설정하고 sql_trace_execution_plan 의 값을 yes로 설정한다.
단, 서버 에러 로그 파일에는 error_log_level 파라미터의 값이 NOTIFICATION인 경우에만 해당 정보를 기록한다.
use_orderby_sort_limit
use_orderby_sort_limit은 ORDER BY … LIMIT row_count 절을 포함하는 구문에서 질의의 정렬 및 합병(sort and merge) 과정의 중간 결과를 row_count 만큼만 유지할 것인지를 지정하는 파라미터이다. yes이면 중간 정렬 결과를 row_count 만큼만 유지하기 때문에 불필요한 비교 및 합병 과정을 줄일 수 있다. 기본값은 yes이다.
브로커 설정¶
cubrid_broker.conf 설정 파일과 기본 제공 파라미터¶
브로커 시스템 파라미터
다음은 cubrid_broker.conf 설정 파일에 사용할 수 있는 브로커 파라미터이다. 각 파라미터에 대한 설명은 공통 적용 파라미터 및 브로커별 파라미터 를 참조한다. 동적으로 설정값 변경이 가능한 파라미터는 broker_changer 유틸리티를 이용하여 한시적으로 변경할 수 있다. cubrid broker restart로 전체 브로커를 재시작한 후에도 값이 적용되도록 하려면 cubrid_broker.conf 에 설정된 값을 변경해 두어야 한다.
적용 구분 용도 파라미터 이름 타입 기본값 동적 변경 공통 적용 파라미터 접속 ACCESS_CONTROL bool no ACCESS_CONTROL_FILE string 로그 ADMIN_LOG_FILE string log/broker/cubrid_broker.log 브로커(cub_broker) MASTER_SHM_ID int 30001 브로커별 파라미터 접속 ACCESS_LIST string ACCESS_LOG string ON 가능 ACCESS_MODE string RW 가능 BROKER_PORT int 30000(최대값: 65535) KEEP_CONNECTION string AUTO 가능 PREFERRED_HOSTS string 브로커 응용 서버(CAS) APPL_SERVER string CAS APPL_SERVER_MAX_SIZE MB Windows 32비트: 40, Windows 64비트: 80, Linux: 0 가능 APPL_SERVER_MAX_SIZE_HARD_LIMIT MB 1024(최대값: 2,097,151) 가능 APPL_SERVER_PORT int BROKER_PORT+1 APPL_SERVER_SHM_ID int 30000 AUTO_ADD_APPL_SERVER string ON MAX_NUM_APPL_SERVER int 40 MIN_NUM_APPL_SERVER int 5 TIME_TO_KILL sec 120 가능 트랜잭션 및 질의 CCI_DEFAULT_AUTOCOMMIT string ON LONG_QUERY_TIME sec 60 가능 LONG_TRANSACTION_TIME sec 60 가능 MAX_PREPARED_STMT_COUNT int 2000(최소값: 1) MAX_QUERY_TIMEOUT sec 0(최대값: 86400(초)) 가능 SESSION_TIMEOUT sec 300 STATEMENT_POOLING string ON 가능 로그 ERROR_LOG_DIR string log/broker/error_log LOG_BACKUP string OFF 가능 LOG_DIR string log/broker/sql_log SLOW_LOG string ON 가능 SLOW_LOG_DIR string log/broker/sql_log SQL_LOG string ON 가능 SQL_LOG_MAX_SIZE KB 10000 가능 기타 MAX_STRING_LENGTH int -1 SERVICE string ON SOURCE_ENV string cubrid.env
기본 제공 파라미터
CUBRID 설치 시 생성되는 기본 브로커 설정 파일인 cubrid_broker.conf 에는 브로커 파라미터 중에서 반드시 변경해야 할 일부 파라미터가 기본으로 포함된다. 기본으로 포함되지 않는 파라미터의 설정값을 변경하기 원할 경우 직접 추가/편집해서 사용하면 된다.
다음은 설치 시 기본으로 제공되는 cubrid_broker.conf 파일 내용이다.
[broker] MASTER_SHM_ID =30001 ADMIN_LOG_FILE =log/broker/cubrid_broker.log [%query_editor] SERVICE =ON BROKER_PORT =30000 MIN_NUM_APPL_SERVER =5 MAX_NUM_APPL_SERVER =40 APPL_SERVER_SHM_ID =30000 LOG_DIR =log/broker/sql_log ERROR_LOG_DIR =log/broker/error_log SQL_LOG =ON TIME_TO_KILL =120 SESSION_TIMEOUT =300 KEEP_CONNECTION =AUTO [%BROKER1] SERVICE =ON BROKER_PORT =33000 MIN_NUM_APPL_SERVER =5 MAX_NUM_APPL_SERVER =40 APPL_SERVER_SHM_ID =33000 LOG_DIR =log/broker/sql_log ERROR_LOG_DIR =log/broker/error_log SQL_LOG =ON TIME_TO_KILL =120 SESSION_TIMEOUT =300 KEEP_CONNECTION =AUTO
브로커 설정 파일 관련 환경 변수
CUBRID_BROKER_CONF_FILE 환경 변수를 사용하여 cubrid_broker.conf 파일의 위치를 지정할 수 있다. 서로 다른 구성으로 여러 개의 브로커를 실행할 때 사용한다.
공통 적용 파라미터¶
다음은 브로커 전체에 공통으로 적용되는 파라미터로 [broker] 아래에 작성된다.
ACCESS_CONTROL
ACCESS_CONTROL은 브로커에 접속하는 응용 클라이언트를 제한하기 위한 파라미터이다. 기본값은 OFF이다. 자세한 내용은 브로커 서버 접속 제한 을 참고한다.
ACCESS_CONTROL_FILE
ACCESS_CONTROL_FILE은 브로커에 접속을 허용하는 데이터베이스 이름, 데이터베이스 사용자 ID, IP 목록을 저장한 파일 이름을 지정하는 파라미터이다. IP 목록은 하나의 브로커 내에서 <db_name>:<db_user> 별로 최대 256 라인까지 작성될 수 있다. 자세한 내용은 브로커 서버 접속 제한 을 참고한다.
ADMIN_LOG_FILE
ADMIN_LOG_FILE은 CUBRID 브로커의 구동에 관한 시간 기록을 저장하는 파일을 지정하기 위한 파라미터이다. 기본값은 log/broker/cubrid_broker.log 파일이다.
MASTER_SHM_ID
MASTER_SHM_ID는 CUBRID 브로커를 관리하기 위해 사용되는 공유 메모리의 ID를 설정하는 파라미터로, 이 값은 시스템 내에서 유일한 값이어야 한다. 기본값은 30001로 설정된다.
브로커별 파라미터¶
다음은 브로커에 개별적으로 적용되는 파라미터로 [%broker_name] 아래에 각각 작성된다. broker_name의 최대 길이는 영문 63자이다.
ACCESS_LIST
ACCESS_LIST는 CUBRID 브로커로 접근을 허용하는 응용 클라이언트의 IP 주소 리스트를 저장할 파일 이름을 지정하는 파라미터이다. 210.192.33.*와 210.194.34.*인 IP 주소의 접근을 허용하려면 이를 임의의 파일(ip_lists.txt)에 저장하여 이 파라미터의 값으로 파일명을 설정한다.
ACCESS_LOG
ACCESS_LOG는 해당 브로커의 접속 로그를 저장할 것인지 지정하는 파라미터로 기본값은 ON이다. 브로커 접속 로그 파일명은 broker_name_id.access이고, $CUBRID/log/broker 디렉터리에 저장된다.
ACCESS_MODE
ACCESS_MODE는 브로커의 모드를 설정하는 파라미터로 기본값은 RW이다. 자세한 내용은 cubrid_broker.conf 를 참고한다.
APPL_SERVER
APPL_SERVER는 CUBRID 브로커가 생성하고 관리하는 브로커 응용 서버(CAS)의 종류를 지정하는 파라미터로 기본값은 CAS이다.
APPL_SERVER_MAX_SIZE
APPL_SERVER_MAX_SIZE는 CAS가 처리하는 프로세스 메모리 사용량의 최대 크기를 지정하는 파라미터이다. 값 뒤에 B, K, M, G로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes를 의미한다. 단위 생략 시 M으로 지정된다.
이 파라미터는 진행 중인 트랜잭션이 있을 경우 사용자에 의해 정상 종료(커밋 혹은 롤백)되기를 기다렸다가 CAS를 재구동하는 동작에 영향을 준다. APPL_SERVER_MAX_SIZE_HARD_LIMIT는 APPL_SERVER_MAX_SIZE와 비슷하지만, 진행 중인 트랜잭션이 있을 경우 이를 강제 종료(롤백)하고 CAS를 재구동하는 동작에 영향을 준다는 점이 다르다.
APPL_SERVER_MAX_SIZE 파라미터는 Windows 버전과 Linux 버전의 기본값이 다르므로 주의한다.
Windows 버전의 CUBRID는 32비트 버전에서는 APPL_SERVER_MAX_SIZE 의 기본값이 40 (MB)이고, 64비트 버전에서는 80 (MB)이다. 현재 프로세스의 크기가 APPL_SERVER_MAX_SIZE 의 값을 초과하면, 브로커가 해당 CAS를 재구동한다.
Linux 버전의 CUBRID는 APPL_SERVER_MAX_SIZE 의 기본값이 0이고, 다음의 경우에 해당 CAS를 재구동한다.
- APPL_SERVER_MAX_SIZE 의 값이 0 또는 음수인 경우: 현재 프로세스의 크기가 CAS의 초기 메모리의 2배가 될 때
- APPL_SERVER_MAX_SIZE 의 값이 양수인 경우: APPL_SERVER_MAX_SIZE 의 설정 값을 초과할 때
Note
이 값을 너무 작게 설정하면 CAS가 빈번하게 재구동될 수 있으므로 주의한다. 일반적으로 APPL_SERVER_MAX_SIZE_HARD_LIMIT 의 값을 APPL_SERVER_MAX_SIZE 의 값보다 크게 설정한다. 자세한 내용은 APPL_SERVER_MAX_SIZE_HARD_LIMIT 의 설명을 참고한다.
APPL_SERVER_MAX_SIZE_HARD_LIMIT
APPL_SERVER_MAX_SIZE_HARD_LIMIT는 CAS가 처리하는 프로세스 메모리 사용량의 최대 크기를 지정하는 파라미터이다. 값 뒤에 B, K, M, G로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes를 의미한다. 단위 생략 시 M으로 지정된다. 기본값은 1024 (MB)이며, 최대값은 2,097,151 (MB)이다.
이 파라미터는 진행 중인 트랜잭션이 있어도 이를 강제 종료(롤백)하고 CAS를 재구동하는 동작에 영향을 준다. APPL_SERVER_MAX_SIZE는 APPL_SERVER_MAX_SIZE_HARD_LIMIT와 비슷하지만, 진행 중인 트랜잭션이 있을 경우 사용자에 의해 정상 종료(커밋 혹은 롤백)되기를 기다렸다가 CAS를 재구동하는 동작에 영향을 준다는 점이 다르다.
Note
이 값을 너무 작게 설정하면 CAS가 빈번하게 재구동될 수 있으므로 주의한다. CAS를 재구동할 때 메모리 사용량이 증가해도 트랜잭션이 정상 종료되기까지 기다리기 위해 APPL_SERVER_MAX_SIZE를 설정하고, 메모리 사용량이 허용하는 기준을 넘으면 트랜잭션을 강제 종료하기 위해 APPL_SERVER_MAX_SIZE_HARD_LIMIT를 설정한다. 따라서, 일반적으로 APPL_SERVER_MAX_SIZE_HARD_LIMIT 의 값을 APPL_SERVER_MAX_SIZE 의 값보다 크게 설정한다.
APPL_SERVER_PORT
APPL_SERVER_PORT는 Windows 운영체제에서만 추가하는 파라미터로 응용 클라이언트와 통신하는 CAS의 통신 포트를 지정하는 파라미터이다. Linux 운영체제에서는 응용 클라이언트와 CAS가 통신하기 위해 유닉스 도메인 소켓(unix domain socket)을 사용하므로, APPL_SERVER_PORT 가 사용되지 않는다. 기본값은 BROKER_PORT 파라미터 값에 1을 더한 값으로 설정되며, 지정한 번호의 포트부터 1씩 더한 번호의 포트들이 CAS의 개수만큼 사용된다. 예를 들어, BROKER_PORT 의 값이 30000이고 APPL_SERVER_PORT 의 값을 설정하지 않은 상태에서 MIN_NUM_APPL_SERVER 의 값이 5이면 브로커 초기 구동 시 5개의 CAS가 각각 30001~30005의 포트를 사용한다. 같은 조건이고 APPL_SERVER_PORT 의 값만 35000라면 브로커 초기 구동 시 5개의 CAS가 각각 35000~35004의 포트를 사용한다.
CAS의 최대 개수가 cubrid_broker_conf 의 MAX_NUM_APPL_SERVER 파라미터에 의해 제한되므로 설정할 수 있는 CAS의 통신 포트의 개수 역시 최대 MAX_NUM_APPL_SERVER 파라미터의 설정값으로 제한된다.
Windows 운영체제에서 응용 클라이언트와 CUBRID 브로커 사이에 방화벽이 존재한다면 반드시 BROKER_PORT 및 APPL_SERVER_PORT 에서 설정된 통신 포트를 열어야 한다.
Note
cub_master, cub_broker 프로세스의 유닉스 도메인 소켓 파일 경로를 지정하는 CUBRID_TMP 환경 변수에 대한 내용은 환경 변수 설정 을 참고한다.
APPL_SERVER_SHM_ID
APPL_SERVER_SHM_ID는 CAS가 이용하는 공유 메모리 ID를 지정하기 위한 파라미터로 시스템 내에서 유일한 값이어야 한다. 기본값은 해당 브로커의 포트와 동일한 값이다.
AUTO_ADD_APPL_SERVER
AUTO_ADD_APPL_SERVER는 필요한 경우 CAS를 MAX_NUM_APPL_SERVER 값까지 자동으로 증가시킬지 설정하는 파라미터로 ON과 OFF를 가지며, 기본값은 ON이다.
BROKER_PORT
BROKER_PORT는 해당 브로커의 포트 번호를 지정하기 위한 파라미터로 시스템 내에서 유일한 값이면서 65535 이하의 값이어야 한다. query_editor 의 브로커 포트는 기본값이 30000 으로 설정되며, broker1 의 브로커 포트는 기본값이 33000 으로 설정된다.
CCI_DEFAULT_AUTOCOMMIT
CCI_DEFAULT_AUTOCOMMIT은 CCI 인터페이스 또는 CCI기반 인터페이스(PHP, ODBC, OLE DB, Perl, Python, Ruby 등)로 개발된 응용 프로그램의 자동 커밋 여부를 설정하는 파라미터로 기본값은 ON이다. 이 파라미터는 JDBC로 개발된 응용 프로그램에는 영향을 끼치지 않는다. ODBC 사용자는 CCI_DEFAULT_AUTOCOMMIT이 ON인 경우 오동작을 일으킬 수 있으므로, 반드시 OFF로 설정해야 한다.
CCI_DEFAULT_AUTOCOMMIT 파라미터의 값이 OFF인 경우 트랜잭션이 종료될 때까지 브로커 응용 서버(CAS) 프로세스를 점유한 상태가 되므로, SELECT 문 수행 시에도 fetch 완료 후 반드시 커밋을 수행할 것을 권장한다.
Note
CCI_DEFAULT_AUTOCOMMIT 파라미터는 2008 R4.0부터 지원하기 시작했고, 이 때 기본값은 OFF였다. CCI_DEFAULT_AUTOCOMMIT을 설정하지 않은 2008 R4.0 혹은 그 이전 버전 사용자는 자동 커밋 모드가 OFF이므로, 2008 R4.1 이상 버전으로 업그레이드한 사용자가 기존 응용 프로그램을 그대로 사용하고자 하는 경우, 이 값을 OFF로 설정해야 의도하지 않은 트랜잭션의 자동 커밋을 방지할 수 있다.
Warning
ODBC 드라이버는 CCI_DEFAULT_AUTOCOMMIT의 설정이 무시되어 항상 ON인 상태로 동작하므로, 프로그램에서 자동 커밋 여부를 직접 설정해야 한다.
ERROR_LOG_DIR
ERROR_LOG_DIR은 브로커에 대한 에러 로그가 저장되는 디렉터리를 지정하는 파라미터로, 기본값은 log/broker/error_log이다. 브로커 에러 로그 파일명은 broker_ name_id.err이다.
KEEP_CONNECTION
KEEP_CONNECTION은 CAS와 응용 클라이언트 사이의 연결 방식을 지정하는 파라미터로 ON / AUTO 중 하나로 설정된다. 이 파라미터가 OFF로 설정되면 클라이언트가 트랜잭션 단위로 서버와 연결한다. ON 으로 설정되면 커넥션 단위로 CAS와 연결한다. 또한 AUTO로 설정되면 CAS의 개수가 클라이언트 개수보다 많은 경우 커넥션 단위로 연결하고, CAS의 개수가 클라이언트의 개수보다 적은 경우 트랜잭션 단위로 연결한다. 기본값은 AUTO이다.
LOG_BACKUP
LOG_BACKUP은 CUBRID 브로커가 종료될 때 브로커의 접속 로그 파일을 백업할 것인지 지정하는 파라미터이다. 기본값은 OFF이며, CUBRID 브로커가 종료될 때 $CUBRID/log/broker에 있는 접속 로그 파일(broker_name.access)이 삭제된다. ON 으로 설정되면 CUBRID 브로커가 종료될 때 접속 로그 파일이 다른 이름으로 백업된다. 이때, 접속 로그의 백업 파일명은 broker_name.access.YYYYMMDD.HHMI 가 된다.
LOG_DIR
LOG_DIR은 SQL 로그가 저장되는 디렉터리를 지정하는 파라미터로, 기본값은 log/broker/sql_log이다. SQL 로그가 기록되는 파일명은 broker_name_id.sql.log이다.
LONG_QUERY_TIME
LONG_QUERY_TIME은 장기 실행 질의(long-duration query)로 판단될 질의 실행 시간을 설정하는 파라미터이다. 값 뒤에 ms, s, min, h의 단위 지정이 가능하며, 각각 milliseconds, seconds, minutes, hours를 의미한다. 단위가 생략되면 s로 지정된다. 기본값은 60 (초)이고 소수점을 사용하여 밀리초(msec) 단위의 값을 설정할 수 있다. 예를 들어 500밀리초로 설정하려면 값을 0.5로 설정한다. 파라미터 값을 0으로 설정하면 장기 실행 질의를 판단하지 않는다.
LONG_TRANSACTION_TIME
LONG_TRANSACTION_TIME은 장기 실행 트랜잭션(long-duration transaction)으로 판단될 트랜잭션의 실행 시간을 설정하는 파라미터이다. 값 뒤에 ms, s, min, h의 단위 지정이 가능하며, 각각 milliseconds, seconds, minutes, hours를 의미한다. 단위가 생략되면 s로 지정된다. 기본값은 60 (초)이다.
소수점을 사용하여 밀리초(msec) 단위의 값을 설정할 수 있다. 예를 들어 값을 0.5로 설정하여 500밀리초로 설정할 수 있다.
파라미터 값을 0으로 설정하면 장기 실행 트랜잭션을 판단하지 않는다.
MAX_NUM_APPL_SERVER
MAX_NUM_APPL_SERVER는 해당 브로커에 동시 접속할 수 있는 CAS의 최대 개수를 설정하는 파라미터로, 기본값은 40이다.
MIN_NUM_APPL_SERVER
MIN_NUM_APPL_SERVER는 해당 브로커에 대한 연결 요청이 없더라도 기본적으로 대기하고 있는 CAS 프로세스의 최소 개수를 설정하는 파라미터로, 기본값은 5이다.
MAX_PREPARED_STMT_COUNT
MAX_PREPARED_STMT_COUNT은 사용자(응용 프로그램) 접속 당 허용하는 prepared statement의 개수를 제한하는 파라미터이다. 기본값은 2000이며 최소값은 1이다. 이 파라미터 값을 사용자가 적절히 지정함으로써, 응용 프로그램의 작성 실수로 인해 시스템이 허용하는 메모리를 초과하여 prepared statement 문을 생성하는 것을 사전에 방지할 수 있다.
MAX_QUERY_TIMEOUT
MAX_QUERY_TIMEOUT은 질의 수행의 타임아웃을 설정하는 브로커 파라미터로, 질의 수행을 시작한 후 지정 시간을 초과하면 수행하던 질의를 멈추고 롤백한다. 값 뒤에 ms, s, min, h의 단위 지정이 가능하며, 각각 milliseconds, seconds, minutes, hours를 의미한다. 단위가 생략되면 s로 지정된다. 기본값은 0이며, 무한 대기를 의미한다. 값의 범위는 0부터 86400초(1일)까지이다.
응용 프로그램에서 질의 타임아웃을 설정한 경우, 0을 제외하고 MAX_QUERY_TIMEOUT 값과 응용 프로그램의 질의 타임아웃 값 중 작은 값을 적용한다.
Note
CCI 응용 프로그램의 질의 타임아웃 설정은
cci_connect_with_url()
함수,cci_set_query_timeout()
함수를 참고하며, JDBC 응용 프로그램의 질의 타임아웃 설정은 setQueryTimeout 메서드를 참고한다.
MAX_STRING_LENGTH
MAX_STRING_LENGTH는 BIT, VARBIT, CHAR, VARCHAR인 데이터 타입에 대해서 최대 문자열 길이를 지정하는 파라미터이다. 기본값인 -1로 설정되면 데이터베이스에서 정의된 문자열 길이가 그대로 사용되고, 파라미터의 값이 100 으로 설정되면 임의의 속성이 VARCHAR(1000)으로 정의되었어도 100으로 정의된 것처럼 동작한다.
PREFERRED_HOSTS
PREFERRED_HOSTS는 브로커의 모드를 PHRO로 설정하면 반드시 설정해야 하는 파라미터로 기본값은 NULL이다. 자세한 내용은 관리자 안내서의 cubrid_broker.conf 를 참고한다.
SERVICE
SERVICE는 해당 브로커의 구동 여부를 결정하기 위한 파라미터로, ON 또는 OFF 의 값으로 설정된다. 기본값은 ON이며, 이 파라미터가 ON 으로 설정된 경우에만 해당 브로커를 구동할 수 있다.
SESSION_TIMEOUT
SESSION_TIMEOUT은 응용 클라이언트에 대한 CAS의 세션 타임 아웃 값을 설정하는 파라미터이다. 값 뒤에 ms, s, min, h의 단위 지정이 가능하며, 각각 milliseconds, seconds, minutes, hours를 의미한다. 단위가 생략되면 s로 지정된다. 기본값은 300 (초)이다.
트랜잭션 시작 이후 커밋 혹은 롤백하지 않은 채로 아무런 요청이 없는 상태에서 이 파라미터가 설정한 시간을 초과하면 해당 응용 클라이언트와 CAS 간의 접속이 종료된다.
SLOW_LOG
SLOW SQL 로깅 여부를 지정하는 파라미터이다. 기본값은 ON이다. 이 값이 ON이면 LONG_QUERY_TIME 시간을 초과한 장기 실행(long-duration query) 질의문 또는 에러가 발생한 질의문이 SLOW SQL 로그 파일에 저장된다. 생성되는 파일의 이름은 broker_name_id.slow.log이며, SLOW_LOG_DIR 이하에 생성된다.
SLOW_LOG_DIR
SLOW SQL 로그 파일이 생성되는 디렉터리를 지정한다. 기본값은 log/broker/sql_log이다.
SOURCE_ENV
SOURCE_ENV는 브로커 각각에 대해 개별적으로 운영체제 환경 변수를 설정할 수 있는 파일을 정하는 파라미터로, 파일 확장자는 반드시 env 여야 한다. cubrid.conf에서 지정하는 모든 파라미터는 환경 변수를 통해서도 설정할 수 있다. 예를 들어, cubrid.conf에서 lock_timeout은 환경 변수 CUBRID_LOCK_TIMEOUT으로 지정할 수 있다. 또 다른 예로, broker1에서만 데이터 정의문 수행을 차단하려면 SOURCE_ENV에서 지정한 파일에 CUBRID_BLOCK_DDL_STATEMENT를 1로 설정하면 된다.
환경변수가 있으면 cubrid.conf 보다 우선한다. 기본값은 cubrid.env이다.
SQL_LOG
SQL_LOG는 응용 클라이언트의 요청에 따라 CAS가 처리한 SQL 문에 대해 어떤 로그를 기록할 것인지 결정하는 파라미터로 기본값은 ON이다. 이 파라미터가 ON 으로 설정되면, 모든 로그를 기록한다. SQL 로그가 기록되는 파일명은 broker_name_id.sql.log이며, 설치 디렉터리의 log/broker/sql_log 디렉터리에 생성된다. 파라미터 값은 다음과 같다.
- OFF : 모든 로그를 기록하지 않음
- ERROR : 에러가 발생한 질의에 대한 로그만 기록
- NOTICE : 설정된 시간을 초과한 장기 실행 질의/트랜잭션의 로그, 에러가 발생한 질의에 대한 로그 기록
- TIMEOUT : 설정된 시간을 초과한 장기 실행 질의/트랜잭션의 로그 기록
- ON / ALL : 모든 로그 기록
SQL_LOG_MAX_SIZE
SQL_LOG_MAX_SIZE는 SQL 로그 파일과 SLOW SQL 로그 파일의 최대 크기를 지정하는 파라미터이다. 값 뒤에 B, K, M, G로 단위를 붙일 수 있으며, 각각 Bytes, Kilobytes, Megabytes, Gigabytes를 의미한다. 단위 생략 시 K로 지정된다. 기본값은 10,000 (KB)이다.
- SQL_LOG 파라미터가 ON 으로 설정된 경우에 생성되는 SQL 로그 파일의 크기가 파라미터의 설정값에 도달하면 broker_name_id.sql.log.bak이 생성된다.
- SLOW_LOG 파라미터가 ON 으로 설정된 경우에 생성되는 SLOW SQL 로그 파일의 크기가 이 파라미터의 설정값에 도달하면 broker_name_id.slow.log.bak이 생성된다.
STATEMENT_POOLING
STATEMENT_POOLING은 statement 풀링 기능의 사용 여부를 설정하는 파라미터로 기본값은 ON이다.
CUBRID는 트랜잭션이 커밋 또는 롤백되는 경우, 해당 클라이언트 세션에 존재하는 prepared statement의 핸들을 모두 close하는데, STATEMENT_POOLING 의 값이 ON 인 경우에는 prepared statement의 핸들을 지속적으로 풀에 유지하므로 이를 재사용할 수 있다. 따라서, prepared statement를 재사용하는 일반 응용 프로그램 또는 statement pooling이 구현된 DBCP와 같은 라이브러리가 적용된 환경에서는 반드시 기본 설정(ON)을 유지해야 한다.
STATEMENT_POOLING 의 값이 OFF 인 상태에서 트랜잭션 커밋 또는 종료 이후 해당 prepared statement를 실행하면 다음과 같은 메시지가 출력된다.
Caused by: cubrid.jdbc.driver.CUBRIDException: Attempt to access a closed Statement.
TIME_TO_KILL
TIME_TO_KILL은 자동 추가된 CAS 중 유휴 상태의 CAS를 제거하기 위한 기준 시간을 설정하는 파라미터이다. 값 뒤에 ms, s, min, h의 단위 지정이 가능하며, 각각 milliseconds, seconds, minutes, hours를 의미한다. 단위가 생략되면 s로 지정되며, 기본값은 120s이다.
유휴 상태(idle)란 작업이 없이 쉬고 있는 상태로, 이 상태가 TIME_TO_KILL 시간 이상 유지되면 해당 CAS를 제거한다.
이 파라미터에 설정된 값은 자동 추가된 CAS에만 적용되므로 AUTO_ADD_APPL_SERVER 파라미터가 ON 인 경우에만 적용된다. TIME_TO_KILL 파라미터의 값을 너무 작게 설정하면 CAS의 제거/추가가 너무 빈번하게 발생할 수 있으므로 주의한다.