시스템 설정

성능과 동작에 영향을 미칠 수 있는 시스템 파라미터의 설정 정보를 제공한다. 시스템 파라미터는 시스템의 전체적인 성능과 동작을 결정한다. 이 장에서는 데이터베이스 서버, 브로커에 적용하는 설정 파일의 사용법과 개별 파라미터의 의미를 설명한다. 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  
메모리 관련 파라미터 data_buffer_size 서버 int 512M  
index_scan_oid_buffer_size 서버 int 64K 가능
sort_buffer_size 서버 int 2M 가능
temp_file_memory_size_in_pages 서버 int 4 가능
thread_stacksize 서버 int 1048576  
디스크 관련 파라미터 db_volume_size 서버 int 512M  
dont_reuse_heap_file 서버 bool no  
temp_file_max_size_in_pages 서버 int -1  
temp_volume_path 서버 string NULL  
unfill_factor 서버 float 0.1 가능
volume_extension_path 서버 string NULL 가능
log_volume_size 서버 int 512M  
오류 메시지 관련 파라미터 call_stack_dump_activation_list 클라이언트/서버 string DEFAULT 가능
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_in_secs 클라이언트 int -1 가능
로깅 관련 파라미터 adaptive_flush_control 서버 bool yes 가능
background_archiving 서버 bool yes 가능
checkpoint_every_npages 서버 int 100000 가능
checkpoint_interval_in_mins 서버 int 60 가능
force_remove_log_archives 서버 bool yes 가능
log_buffer_size 서버 int 2M  
log_max_archives 서버 int INT_MAX 가능
max_flush_pages_per_second 서버 int 10000 가능
page_flush_interval_in_msecs 서버 int 0 가능
sync_on_nflush 서버 int 200 가능
트랜잭션 처리 관련 파라미터 async_commit 서버 bool no 가능
group_commit_interval_in_msecs 서버 int 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 서버 int 1024 가능
intl_check_input_string 클라이언트 bool no 가능
intl_date_lang 클라이언트 string   가능
intl_number_lang 클라이언트 string   가능
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 클라이언트/서버 int 1048576 가능
unicode_input_normalization 클라이언트 bool no 가능
unicode_output_normalization 클라이언트 bool no 가능
질의 계획 캐시 관련 파라미터 max_plan_cache_entries 클라이언트/서버 int 1000  
max_filter_pred_cache_entries 클라이언트/서버 int 1000  
유틸리티 관련 파라미터 backup_volume_max_size_bytes 서버 int -1  
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 서버 int 21600  
sql_trace_slow_msecs 서버 int -1 가능
sql_trace_execution_plan 서버 bool no 가능
use_orderby_sort_limit 서버 bool yes 가능

파라미터의 섹션별 분류

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=1523

testdb 만 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

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 의 개수를 크게 설정할수록 메모리 사용량이 증가하므로 주의한다.

메모리 관련 파라미터

다음은 데이터베이스 서버 또는 클라이언트에서 사용하는 메모리와 관련된 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.

파라미터 이름 타입 기본값 최소값 최대값
data_buffer_size int 512M 16M 2G(32비트 버전)
index_scan_oid_buffer_size int 64K 1K 256K
sort_buffer_size int 2M 64K  
temp_file_memory_size_in_pages int 4 0 20
thread_stacksize int 1048576 65536  

data_buffer_size

data_buffer_size 는 데이터베이스 서버가 메모리 내에 캐시하는 데이터 버퍼의 크기를 설정하기 위한 파라미터이다. K, M, G, T로 단위를 설정할 수 있으며, 각각 KB(kilobytes), MB(megabytes), GB(gigabytes), TB(terabytes)를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 512M 이고, 최소값은 16M이다. 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)를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 64K 이고, 최소값은 1K, 최대값은 256K이다.

index_scan_oid_buffer_size 파라미터 값과 데이터베이스 생성 시 설정한 단위 페이지의 크기에 비례하여 OID 버퍼의 크기가 결정되고, 이러한 OID버퍼의 크기가 클수록 인덱스 스캔 비용이 증가하는 경향을 보인다. 이를 고려하여 index_scan_oid_buffer_size 파라미터 값을 조정할 수 있다.

sort_buffer_size

sort_buffer_size 는 정렬을 수행하는 질의를 처리할 때 사용되는 버퍼의 크기를 설정하기 위한 파라미터이다. K, M, G, T로 단위를 설정할 수 있으며, 각각 KB(kilobytes), MB(megabytes), GB(gigabytes), TB(terabytes)를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 2M 이고, 최소값은 64K이다

서버는 각 클라이언트 요청에 대하여 하나의 정렬 버퍼를 할당하며, 정렬을 완료한 후에는 할당되었던 버퍼 메모리를 해제한다.

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 int 512M 20M 20G
dont_reuse_heap_file bool no    
log_volume_size int 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 는 다음과 같은 값을 설정하는 파라미터이며, 기본값은 512M 이다.

  • cubrid createdbcubrid 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_sizecubrid createdb 유틸리티에서 --log-volume-size 옵션이 생략되었을 때 로그 볼륨 파일의 기본 크기를 설정하는 파라미터이다. K, M, G, T로 단위를 설정할 수 있으며, 각각 KB(kilobytes), MB(megabytes), GB(gigabytes), TB(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으로 설정되면 일시적 임시 볼륨이 생성되지 않으므로 관리자가 직접 cubrid addvoldb 유틸리티를 이용하여 영구적 임시 볼륨(permanent 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_pathcubrid addvoldb 유틸리티로 추가 볼륨을 생성할 때 추가 볼륨의 경로를 지정하는 -F 옵션을 생략하면 기본 경로로 사용할 경로를 지정하는 파라미터이다. 기본값은 데이터베이스 생성 시에 설정된 볼륨 위치이다.

오류 메시지 관련 파라미터

다음은 CUBRID에 의해 기록되는 오류 메시지의 처리에 관한 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.

파라미터 이름 타입 기본값
call_stack_dump_activation_list string DEFAULT
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 는 모든 오류에 대해 콜-스택을 덤프하지 않기로 설정한 상태에서, 예외적으로 콜-스택을 덤프할 특정 오류 번호를 지정하기 위한 파라미터이다. 따라서, call_stack_dump_activation_list 파라미터는 call_stack_dump_on_error 의 값이 no 인 경우에만 효력이 있다.

값을 설정하지 않을 경우 기본값은 "DEFAULT" 키워드이며, 다음 오류들을 포함한다. "DEFAULT" 키워드는 다른 오류 번호와 함께 사용될 수 있다.

오류 번호 오류 메시지
-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

다음은 -115, -116번의 오류 번호와 "DEFAULT" 오류 번호에 대해 콜-스택 덤프가 수행되도록 파라미터를 설정한 예제이다.

call_stack_dump_on_error= no
call_stack_dump_activation_list=-115,-116, DEFAULT

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단계로 구성되며, 그에 따른 에러 메시지 포함 관계는 FATALERRORSYNTAXWARNINGNOTIFICATION 이다. 기본값은 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_in_secs int -1 -1  

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

lock_escalation

lock_escalation 은 행에 대한 잠금이 테이블 잠금으로 확대되기 전에 개별 행에 허용되는 최대 잠금의 개수를 설정하기 위한 파라미터로 기본값은 100,000 이다. lock_escalation 파라미터의 설정값이 작으면, 메모리 잠금 관리에 의한 오버헤드가 적은 반면 동시성은 줄어든다. 반대로 설정값이 크면 메모리 잠금 관리에 의한 오버헤드가 큰 반면 동시성이 향상된다.

lock_timeout_in_secs

lock_timeout_in_secs 는 잠금 대기 시간을 지정하기 위한 클라이언트 파라미터로 지정된 시간 이내에 잠금이 허용되지 않으면 해당 트랜잭션이 취소되고 오류가 반환된다. 기본값인 -1 로 설정하면 잠금이 허용될 때까지의 대기 시간이 무제한이고, 0으로 설정하면 잠금을 대기하지 않는다.

로깅 관련 파라미터

다음은 CUBRID 데이터베이스의 백업과 복구에 이용되는 로그에 관련된 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.

파라미터 이름 타입 기본값 최소값 최대값
adaptive_flush_control bool yes    
background_archiving bool yes    
checkpoint_every_npages int 100000 10  
checkpoint_interval_in_mins int 60 1  
force_remove_log_archives bool yes    
log_buffer_size int 2M 192K  
log_max_archives int INT_MAX 0  
max_flush_pages_per_second int 10000 1 INT_MAX
page_flush_interval_in_msecs int 0 -1  
sync_on_nflush int 200 1 INT_MAX

adaptive_flush_control

adaptive_flush_control 는 내려쓰기(flush) 작업 중에 50ms마다 작업 상태에 따라 내려쓰기할 용량(flush capacity)을 자동 조정하는 파라미터이며, 기본값은 yes 이다. 즉, 특정 시점에 INSERT 또는 UPDATE 연산이 집중되어 내려쓰기한 페이지 수가 max_flush_pages_per_second 파라미터 값에 도달하면 이 용량을 증가시키고, 이에 도달하지 못하면 이 용량을 감소시킨다. 이처럼 워크로드에 따라 주기적으로 내려쓰기 용량을 조정하여 I/O 부하를 분산할 수 있다.

background_archiving

background_archiving 은 특정 시점마다 주기적으로 임시 보관 로그를 생성하도록 하는 파라미터로서, 보관 로그 작업으로 인한 디스크 I/O 부하를 분산시키고자 할 때 유용하다. 기본값은 yes 이다.

checkpoint_every_npages

checkpoint_every_npages 는 체크포인트가 수행되는 주기를 로그 페이지 단위로 설정하는 파라미터이며, 기본값은 100,000 이다.

특정 시간대에 INSERT / UPDATE 가 집중되는 서비스 환경에서는 checkpoint_every_npages 파라미터의 설정값을 작게 설정하여 체크포인트 시점에 I/O 부하를 분산할 수 있다.

체크포인트는 특정 시점에 데이터 버퍼에 있는 모든 수정된 페이지를 데이터베이스 볼륨(디스크)에 기록하는 작업이며, 데이터베이스 장애 발생 시 최근 체크포인트 시점까지 데이터를 복구할 수 있다. 다만, 체크포인트 작업으로 인해 디스크로 저장되는 로그 파일의 양이 많을 경우 디스크 I/O가 발생하여 DB 운영에 영향을 끼칠 수 있으므로 체크포인트 주기를 적절하게 설정해야 한다.

체크포인트 주기 설정과 관련된 파라미터는 checkpoint_interval_in_minscheckpoint_every_npages 이며, checkpoint_interval_in_mins 파라미터의 설정값이 경과된 시점 또는 로그 페이지 수가 checkpoint_every_npages 파라미터의 설정값에 도달하는 시점마다 체크포인트 작업이 주기적으로 수행된다.

checkpoint_interval_in_mins

checkpoint_interval_in_mins 는 체크포인트가 수행되는 주기를 분 단위로 설정하는 파라미터이며, 기본값은 60 이다.

force_remove_log_archives

force_remove_log_archiveslog_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 는 메모리에 캐시되는 로그 버퍼의 크기를 설정하는 파라미터이다. K, M, G, T로 단위를 설정할 수 있으며, 각각 KB(kilobytes), MB(megabytes), GB(gigabytes), TB(terabytes)를 의미한다. 단위를 생략하면 바이트 단위가 적용된다. 기본값은 2M 이다.

log_buffer_size 파라미터의 설정값이 크면 데이터베이스 수정 연산이 많고, 길고 큰 트랜잭션이 많은 환경에서는 디스크 I/O가 감소되어 성능이 향상될 수 있다. CUBRID가 설치된 시스템의 메모리 크기 및 작업 연산의 크기를 고려하여 적당한 값으로 설정할 것을 권장한다.

  • 필요한 메모리 크기 = 로그 버퍼 크기(log_buffer_size)

log_max_archives

log_max_archives 는 보존할 보관 로그 파일의 최대 개수를 설정하는 파라미터이다. 최소값은 0이며, 기본값은 INT_MAX (2147483647)이다. CUBRID 설치 시 cubrid.conf 에는 0으로 설정되어 있다. 이 파라미터는 force_remove_log_archives 의 설정에 따라 동작이 달라질 수 있다.

예를 들어, cubrid.conflog_max_archives 가 3이고 force_remove_log_archives 가 yes이면, 최근 3개의 보관 로그 파일만 유지하고 네 번째 보관 로그가 생성될 때에는 이전에 생성된 보관 로그 파일을 자동으로 삭제한다. 이때 삭제되는 보관 로그 파일의 정보는 *_lginf 파일에 기록된다.

하지만 활성화된 트랜잭션이 기존 보관 로그 파일을 여전히 참조하고 있다면, 해당 보관 로그 파일은 삭제되지 않는다. 즉, 어떤 트랜잭션이 첫 번째 보관 로그 파일이 생성되는 시점에서 시작되어 다섯 번째 보관 로그 파일이 생성되는 시점까지도 종료되지 않았다면 첫 번째 보관 로그 파일은 삭제되지 않는다.

CUBRID HA 환경을 구축하고자 하는 사용자는 환경 설정 을 참고한다.

max_flush_pages_per_second

max_flush_pages_per_second 는 버퍼로부터 디스크로 내려쓰기(flush) 작업을 수행할 때, 내려쓰기할 최대 용량 (flush capacity)을 설정하기 위한 파라미터이며, 기본값은 10000 이다. 즉, 이 파라미터 설정을 통해 1초당 내려쓰기할 최대 용량을 제어하여, 특정 시점에 I/O 부하가 집중되는 현상을 방지할 수 있다.

만약, 특정 시점에 INSERT 또는 UPDATE 연산이 집중되어 이 파라미터에 의해 설정된 최대 용량에 도달하면, 로그 페이지만 내려쓰기를 수행하고 데이터 페이지는 더 이상 디스크로 내려쓰지 않는다. 따라서, 이 파라미터는 서비스 환경의 워크로드를 고려하여 적절한 값을 설정해야 한다.

page_flush_interval_in_msecs

page_flush_interval_in_msecs 는 데이터 버퍼에 존재하는 더티 페이지를 디스크로 저장(flush)하는 주기를 밀리초(msec) 단위로 설정하는 파라미터이며, 기본값은 0 이다. 최소값인 -1로 설정하면 0으로 설정했을 때와 똑같이 동작한다.

이는 I/O 부하, 버퍼 동시성과 관련있는 파라미터로서, 서비스 환경의 워크로드를 고려하여 파라미터 값을 설정해야 한다.

sync_on_nflush

sync_on_nflush 는 버퍼로부터 데이터 페이지 및 로그 페이지를 내려쓰기한 후, 운영 시스템의 FILE I/O와 동기화를 수행하는 주기를 페이지 단위로 설정하는 파라미터이며, 기본값은 200 이다. 즉, 200페이지만큼 내려쓰기 작업이 수행될 때마다 CUBRID 서버는 운영 체제의 FILE I/O와 동기화를 수행한다. I/O 부하와 관련된 파라미터이다.

트랜잭션 처리 관련 파라미터

다음은 트랜잭션의 커밋 성능 향상을 위한 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.

파라미터 이름 타입 기본값 최소값 최대값
async_commit bool no    
group_commit_interval_in_msecs int 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 int 1024 4 33554432
intl_check_input_string bool no    
intl_date_lang string      
intl_number_lang string      
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 int 1048576 64 33554432
unicode_input_normalization bool no    
unicode_output_normalization bool no    

add_column_update_hard_default

add_column_update_hard_defaultALTER TABLE … ADD COLUMN 절로 새로운 칼럼을 추가할 때 이 칼럼에 입력할 값을 고정 기본값(hard_default)으로 제공할지 여부를 설정하는 파라미터로서, 기본값은 no 이다.

이 파라미터 값이 yes이면 NOT NULL 제약 조건이 있고 DEFAULT 제약 조건이 없을 때 칼럼의 새로운 입력값을 고정 기본값(hard default value)으로 입력하며, no이면 NOT NULL 제약조건이 있더라도 NULL 로 입력한다. 이 파라미터의 값이 yes일 때 추가하려는 칼럼의 타입에 고정 기본값이 없으면 오류를 출력하고 롤백한다. 각 타입별 고정 기본값에 대해서는 ALTER TABLE 문의 CHANGE/MODIFY 절 을 참고한다.

-- 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;

SELECT * FROM TBL;

            i          j
========================
            2       NULL
            1       NULL

-- 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
=========================
            2          0
            1          0

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

default_week_formatWEEK() 함수 mode 인자의 기본값을 설정한다. 기본값은 0 이다. 자세한 내용은 WEEK() 함수를 참고한다.

group_concat_max_len

group_concat_max_lenGROUP_CONCAT() 함수의 리턴 값의 크기를 제한하는 파라미터로서 기본값은 1024 바이트이며, 최소값은 4바이트, 최대값은 33,554,432바이트이다. GROUP_CONCAT() 함수의 결과가 제한을 넘으면 NULL 을 반환한다.

intl_check_input_string

intl_check_input_string 은 입력되는 문자열이 사용하는 문자셋에 맞게 입력되는지에 대한 검사 여부를 설정하는 파라미터이다. 기본값은 no 이다. 예를 들어, 이 값이 no이고 문자셋이 UTF-8일 때 UTF-8 바이트 순서(byte sequence)에 맞지 않는 데이터가 들어오는 경우 비정상적인 동작을 보이거나 심하면 데이터베이스 서버 혹은 응용 프로그램이 비정상 종료될 수도 있다. 하지만 이러한 문제가 없다는 것이 보장된다면 검사하지 않는 것이 성능상 좀더 유리하다.

UTF-8과 EUC-KR만이 검사 대상이며, ISO-8859-1은 한 바이트 인코딩이고 모든 바이트가 유효하므로 검사할 필요가 없다.

intl_date_lang

intl_date_langTIME, DATE, DATETIME, TIMESTAMP 타입의 값을 입력 또는 출력하는 함수의 인자로 언어 이름이 생략되는 경우, 문자열의 지역화된(localized) 캘린더(월 이름과 요일 이름, 오전/오후 이름) 형식을 지정하는 파라미터이다.

사용할 수 있는 값은 다음과 같다. 단, 이 값들을 모두 사용하려면 내장된 로캘(locale)을 제외한 나머지 로캘에 대해서는 원하는 로캘 라이브러리를 설정해야 한다. 로캘 설정에 대해서는 로캘 설정 을 참고한다.

언어 언어의 로캘 이름
영어 en_US
독일어 de_DE
스페인어 es_ES
프랑스어 fr_FR
이태리어 it_IT
일본어 ja_JP
캄보디아어 km_KH
한국어 ko_KR
터키어 tr_TR
베트남어 vi_VN
중국어 zh_CN

지정된 언어의 캘린더 형식에 따라 입력 문자열을 인식하는 함수는 다음과 같다.

지정된 언어의 캘린더 형식에 따라 문자열을 출력하는 함수는 다음과 같다.

intl_number_lang

intl_number_lang 은 문자열을 숫자로, 또는 숫자를 문자열로 변환하는 함수들에서 입력되거나 출력되는 문자열에 숫자 형식을 부여할 때 적용할 로캘을 지정하는 파라미터이다. 숫자에 대해 지역화되는 것들은 자릿수 구분 기호와 소수점 기호이다. 일반적으로는 쉼표(,)와 마침표(.)가 쓰이는데, 로캘에 따라 서로 바뀔 수 있다. 예를 들어, 숫자 1000.12(천 소수점 이하 일이)는 대부분의 로캘에서는 1,000.12로 쓰이는 반면, tr_TR 로캘에서는 1.000,12로 쓰인다.

지정된 언어의 숫자 형식에 따라 입력 문자열을 인식하는 함수는 다음과 같다.

지정된 언어의 숫자 형식에 따라 문자열을 출력하는 함수는 다음과 같다.

no_backslash_escapes

no_backslash_escapes 은 이스케이프 문자로 백슬래시(\) 사용 여부에 관한 파라미터로서, 기본값은 yes 이다. 이 파라미터 값이 no이면 백슬래시(\)가 이스케이프 문자로 사용되며, yes이면 백슬래시는 일반 문자로 사용된다. 예를 들어, 이 값이 no 일 때 "\n"은 개행(new line) 문자를 의미한다. 그러나 이 값이 yes이면 "\n"은 "\"과 "n" 두 개의 문자를 의미한다.

백슬래시가 이스케이프 문자로 사용되는 경우에 대한 자세한 설명은 특수 문자 이스케이프 를 참고한다.

only_full_group_by

only_full_group_byGROUP 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+000

SELECT '1'+'a';

ERROR: Cannot coerce 'a' to type double.

require_like_escape_character

require_like_escape_characterLIKE 절의 이스케이프 문자 사용 여부에 관한 파라미터로서, 기본값은 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 함수가 이 시스템 파라미터의 영향을 받는다.

-- return_null_on_function_errors=no

SELECT YEAR('12:34:56');
ERROR: Conversion error in time format.

-- return_null_on_function_errors=yes

SELECT YEAR('12:34:56');

   year('12:34:56')
======================
   NULL

string_max_size_bytes

string_max_size_bytes 는 문자열 함수 또는 연산에서 문자열 인자로 사용할 수 있는 최대 바이트 크기를 정의하는 파라미터로, 기본값은 1048576 (1 MB)이다. 최소값은 64바이트, 최대값은 33554432바이트(32 MB)이다.

이 파라미터에 영향을 받는 함수 및 연산식은 다음과 같다.

unicode_input_normalization

시스템 수준에서 입력할 유니코드를 결합된 코드로 저장할지 여부를 설정하는 파라미터로 기본값은 no 이다.

일반적으로 유니코드 텍스트는 "완전히 결합된(fully composed)" 혹은 "완전히 분해된(fully decomposed)" 상태로 저장될 수 있다. 예를 들면 "완전히 결합된" 문자 'A'는 하나의 코드포인트인 00C4를 갖는데, 이는 UTF-8 인코딩으로 C3 84의 2바이트가 된다. 이와 달리 "완전히 분해된" 모드에서는 두 개의 코드포인트/문자 0041(문자 "A")과 0308(COMBINING DIAERESIS)이 되며, UTF-8 인코딩으로는 41 CC 88의 3바이트가 된다.

CUBRID는 완전히 결합된 유니코드만 가지고 동작할 수 있다. 완전히 분해된 문자열을 가진 응용 클라이언트에 대해서는 unicode_input_normalization 의 값을 yes로 설정하여 완전히 결합된 코드로 변환하여 동작한 후 unicode_output_normalization 의 값을 yes로 설정하여 다시 완전히 분해된 텍스트로 되돌려줄 수 있다. 일반적으로 유니코드 정규화는 결합 이후 분해 시 역변환이 불가능하지만 CUBRID는 가능한 한 많은 문자들의 역변환을 가능하게 하기 위해 간략화한 유니코드 정규화 방식을 적용한다. CUBRID 정규화의 특징은 다음과 같다.

  • 정규화는 언어 특징적인 요소가 아니며 로캘에 의존하지 않는다.

    일단 하나 이상의 로캘을 사용할 수 있다면, 모든 CAS/CSQL 프로세스에서 이를 사용할 수 있다. 하지만 정규화는 CUBRID 서버 프로세스에 적용되는 것이 아니다. unicode_input_normalization 시스템 파라미터는 시스템 수준에서 정규화에 의한 입력 코드의 결합 여부를 지정한다. unicode_output_normalization 시스템 파라미터는 시스템 수준에서 정규화에 의한 출력 코드의 분해 여부를 지정한다.

  • 콜레이션과 정규화는 직접 관련이 없다.

    unicode_input_normalization 값이 no임에도 불구하고, 확장이 있는 콜레이션(utf8_de_exp, utf8_jap_exp, utf8_km_exp) 문자열이 완전히 분해된 상태에서 제대로 정렬되지만 이는 의도한 사항이 아니며 UCA(Unicode Collation Algorithm)의 우연한 효과(side-effect)일 뿐이다. 확장이 있는 콜레이션은 오직 완전히 결합된 텍스트만 가지고 동작하도록 구현되었다.

  • CUBRID에서 유니코드 정규화를 위한 결합(composition)과 분해(decomposition)는 별개로 동작하지 않는다.

클라이언트 응용 프로그램이 텍스트 데이터를 분해된 형태로 CUBRID에 보낸다면, unicode_input_normalizationyes 로 설정하여 CUBRID가 결합된 코드로 다루게 한다.

클라이언트 응용 프로그램이 분해된 형태로만 데이터를 다룰 수 있다면 unicode_output_normalizationyes 로 설정하여 CUBRID가 항상 분해된 코드로 데이터를 보내도록 한다.

클라이언트 응용 프로그램이 입력과 출력의 형태에 대해 모두 알고 있다면, unicode_input_normalizationunicode_output_normalizationno 인 상태로 둔다(기본 설정).

로캘과 콜레이션에 대한 자세한 설명은 다국어 지원 을 참고한다.

unicode_output_normalization

시스템 수준에서 저장된 유니코드를 분해된 코드로 출력할 것인지 여부를 설정하는 파라미터로 기본값은 no 이다. 보다 자세한 설명은 위의 unicode_input_normalization 설명을 참고한다.

질의 계획 캐시 관련 파라미터

다음은 질의 계획에 대한 캐시 기능과 관련된 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.

파라미터 이름 타입 기본값 최소값 최대값
max_plan_cache_entries int 1,000    
max_filter_pred_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

max_filter_pred_cache_entries

max_filter_pred_cache_entries 는 메모리에 캐시하는 필터링된 인덱스 표현식의 최대 개수를 설정하는 파라미터이다. 필터링된 인덱스 표현식은 컴파일된 상태로 저장되므로, 서버에서 즉시 사용할 수 있다. 캐시에 저장되어 있지 않을 경우, 필터링된 인덱스 표현식을 데이터베이스 스키마에서 가져와서 해석하는 과정이 필요하다.

유틸리티 관련 파라미터

다음은 CUBRID에서 사용되는 유틸리티와 관련된 파라미터로 각 파라미터의 타입과 설정 가능한 값의 범위는 다음과 같다.

파라미터 이름 타입 기본값 최소값 최대값
backup_volume_max_size_bytes int -1 1024*32  
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_bytescubrid backupdb 유틸리티에 의해 생성되는 백업 볼륨 파일의 분할 크기를 바이트 단위로 설정하는 파라미터이다. 기본값인 -1 로 설정하면 생성되는 백업 볼륨이 분할되지 않으며, 값을 설정하면 지정된 크기의 단위로 백업 볼륨 파일을 분할하여 생성한다.

communication_histogram

communication_histogram 은 csql 인터프리터의 세션 명령어 " ;.h "와 관련된 파라미터이며, 기본값은 no 이다. CSQL 실행 통계 정보 출력를 참고한다.

compactdb_page_reclaim_only

compactdb_page_reclaim_onlycompactdb 유틸리티와 관련된 파라미터로 이미 할당된 저장 영역의 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 int 21600(6시간) 60(1분) 31536000(1년)
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

최초 인덱스 생성 후 INSERTUPDATE 를 실행할 때 인덱스 페이지가 꽉 차서 여유 공간이 없으면 인덱스 페이지 노드 분할(split)이 발생하는데, 이는 오퍼레이션 시간을 증가시켜 성능에 영향을 미친다. index_unfill_factor 는 인덱스를 생성할 때 각 인덱스 페이지 노드의 여유 공간을 확보하는 비율을 지정하는 파라미터이다. index_unfill_factor 설정값은 인덱스를 처음 생성할 때만 적용되며, 페이지에 지정된 빈 공간의 비율을 동적으로 유지하지 않는다. 값의 범위는 0부터 0.5까지이고 기본값은 0.05 이다.

인덱스를 생성할 때 인덱스의 페이지 노드에 여유 공간이 없이(index_unfill_factor 를 0으로 설정) 생성한다면, 추가로 삽입할 때마다 매번 인덱스 페이지 노드의 분할이 발생하여 성능에 영향을 끼친다.

index_unfill_factor 값이 크면 인덱스 생성 시 노드 여유 공간을 많이 확보한다. 따라서 최초 인덱스 생성 후 노드 여유 공간이 꽉 찰 때까지 상대적으로 긴 시간 동안 인덱스 노드의 분할이 발생하지 않으므로, 상대적으로 성능이 나을 수 있다. 이 값이 작으면 인덱스 생성 시 노드 여유 공간이 작기 때문에, 인덱스 노드의 여유 공간이 금방 꽉 차게 될 가능성이 높으므로, 상대적으로 INSERTUPDATE 에 의한 인덱스 노드 분할 발생 가능성이 높다.

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시간)이고, 단위는 초이다.

sql_trace_slow_msecs

sql_trace_slow_msecs 는 장기 실행 질의(long running query)로 판단될 질의 실행 시간을 설정하는 파라미터이다. 기본값은 -1이고 최대값은 86400000 msec (24 hour) 이다. -1은 무한대 시간을 의미하며 어떤 질의도 장기 실행 질의로 판단되지 않는다. 자세한 내용은 아래의 sql_trace_execution_plan 의 설명을 참고한다.

Note

sql_trace_slow_msecs 는 서버의 질의 실행 시간을 기준으로 실행 시간 초과 여부를 판단하며, MAX_QUERY_TIMEOUT 브로커 파라미터는 브로커 단에서의 질의 실행 시간을 기준으로 이를 판단한다.

sql_trace_execution_plan

sql_trace_execution_plansql_trace_slow_msecs 파라미터 값의 설정 시간을 초과한 장기 실행 질의(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_msecs 의 값을 5000(ms)로 설정하고 sql_trace_execution_plan 의 값을 yes로 설정한다.

단, 서버 에러 로그 파일에는 error_log_level 파라미터의 값이 NOTIFICATION인 경우에만 해당 정보를 기록한다.

use_orderby_sort_limit

use_orderby_sort_limitORDER 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)  
ENABLE_MONITOR_HANG string OFF  
KEEP_CONNECTION string AUTO 가능
PREFERRED_HOSTS string
 
브로커 응용 서버(CAS) APPL_SERVER string CAS  
APPL_SERVER_MAX_SIZE int Windows 32비트: 40, Windows 64비트: 80, Linux: 0 가능
APPL_SERVER_MAX_SIZE_HARD_LIMIT int 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 int 120 가능
트랜잭션 및 질의 CCI_DEFAULT_AUTOCOMMIT string ON  
LONG_QUERY_TIME int 60 가능
LONG_TRANSACTION_TIME int 60 가능
MAX_QUERY_TIMEOUT int 0(최대값: 86400(초)) 가능
MAX_PREPARED_STMT_COUNT int 2000(최소값: 1)  
SESSION_TIMEOUT int 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 int 100000 가능
기타 SERVICE string ON  
SOURCE_ENV string cubrid.env  
MAX_STRING_LENGTH int -1  

기본 제공 파라미터

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 목록을 저장한 파일 이름을 지정하는 파라미터이다. 자세한 내용은 브로커 서버 접속 제한 을 참고한다.

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가 처리하는 프로세스 메모리 사용량의 최대 크기를 지정하는 파라미터로 단위는 MB이다. 이 파라미터는 진행 중인 트랜잭션이 있을 경우 사용자에 의해 정상 종료(커밋 혹은 롤백)되기를 기다렸다가 CAS를 재구동하는 동작에 영향을 준다. APPL_SERVER_MAX_SIZE_HARD_LIMITAPPL_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가 처리하는 프로세스 메모리 사용량의 최대 크기를 지정하는 파라미터로 단위는 MB이고, 기본값은 1024 (MB)이며, 최대값은 2,097,151 (MB)이다. 이 파라미터는 진행 중인 트랜잭션이 있어도 이를 강제 종료(롤백)하고 CAS를 재구동하는 동작에 영향을 준다. APPL_SERVER_MAX_SIZEAPPL_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_confMAX_NUM_APPL_SERVER 파라미터에 의해 제한되므로 설정할 수 있는 CAS의 통신 포트의 개수 역시 최대 MAX_NUM_APPL_SERVER 파라미터의 설정값으로 제한된다.

Windows 운영체제에서 응용 클라이언트와 CUBRID 브로커 사이에 방화벽이 존재한다면 반드시 BROKER_PORTAPPL_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로 설정해야 의도하지 않은 트랜잭션의 자동 커밋을 방지할 수 있다.

ENABLE_MONITOR_HANG

ENABLE_MONITOR_HANG 은 일정 비율 이상의 CAS가 멈춘(hang) 것으로 판단되면 응용 프로그램이 해당 브로커로의 접속을 차단할 것인지 지정하는 파라미터이다. 이 값이 ON이면 해당 기능을 수행한다. 기본값은 OFF로, 해당 기능을 수행하지 않는다. 브로커 프로세스는 CAS의 멈춤(hang)이 1분 이상 지속되는 경우 CAS를 멈춘(hang) 상태로 판단하고, 해당 CAS의 개수에 따라 해당 브로커 프로세스가 비정상으로 판단되면 정상화되기 전까지 해당 브로커로 접속을 시도하는 응용 프로그램을 차단하여, 접속 URL에 설정한 대체 호스트(altHosts)로의 접속을 유도한다.

ERROR_LOG_DIR

ERROR_LOG_DIR 은 브로커에 대한 에러 로그가 저장되는 디렉터리를 지정하는 파라미터로, 기본값은 log/broker/error_log 이다. 브로커 에러 로그 파일명은 broker_ name_id.err 이다.

KEEP_CONNECTION

KEEP_CONNECTION 은 CAS와 응용 클라이언트 사이의 연결 방식을 지정하는 파라미터로 ON / AUTO 중 하나로 설정된다. 이 파라미터가 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)로 판단될 질의 실행 시간을 설정하는 파라미터이다. 기본값은 60 (초)이고 소수점을 사용하여 밀리초(msec) 단위의 값을 설정할 수 있다. 예를 들어 500밀리초로 설정하려면 값을 0.5로 설정한다. 파라미터 값을 0으로 설정하면 장기 실행 질의를 판단하지 않는다.

LONG_TRANSACTION_TIME

LONG_TRANSACTION_TIME 은 장기 실행 트랜잭션(long-duration transaction)으로 판단될 트랜잭션의 실행 시간을 설정하는 파라미터이다. 기본값은 60 (초)이고 소수점을 사용하여 밀리초(msec) 단위의 값을 설정할 수 있다. 예를 들어 500밀리초로 설정하려면 값을 0.5로 설정한다. 파라미터 값을 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 은 질의 수행의 타임아웃을 설정하는 브로커 파라미터로, 질의 수행을 시작한 후 지정 시간을 초과하면 수행하던 질의를 멈추고 롤백한다. 기본값은 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의 세션 타임 아웃 값을 설정하는 파라미터이다. 트랜잭션 시작 이후 커밋 혹은 롤백하지 않은 채로 아무런 요청이 없는 상태에서 이 파라미터가 설정한 시간을 초과하면 해당 응용 클라이언트와 CAS 간의 접속이 종료된다. 기본값은 300 (초)이다.

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_in_secs 는 환경 변수 CUBRID_LOCK_TIMEOUT_IN_SECS 로 지정할 수 있다. 또 다른 예로, 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 로그 파일의 최대 크기를 지정하는 파라미터로 기본값은 100,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를 제거하기 위한 기준 시간을 설정하는 파라미터로 기본값은 120 (초)이다. 유휴 상태란 작업이 없이 쉬고 있는 상태로, 이 상태가 TIME_TO_KILL 시간 이상 유지되면 해당 CAS를 제거한다.

이 파라미터에 설정된 값은 자동 추가된 CAS에만 적용되므로 AUTO_ADD_APPL_SERVER 파라미터가 ON 인 경우에만 적용된다. TIME_TO_KILL 파라미터의 값을 너무 작게 설정하면 CAS의 제거/추가가 너무 빈번하게 발생할 수 있으므로 주의한다.