시스템/세션 관리
목차
ALTER SYSTEM
시스템 전역 자원을 관리하거나 설정을 변경할 때 사용하는 구문입니다.
KILL SESSION
alter_system_kill_session_stmt:
alter_system_kill_session_stmt: 'ALTER SYSTEM KILL SESSION' number
세션 ID를 지정해 해당 세션을 강제로 종료합니다.
SYS 사용자만 실행할 수 있으며, 자신의 세션은 종료할 수 없습니다.
CANCEL SESSION
alter_system_cancel_session_stmt:
alter_system_cancel_session_stmt ::= 'ALTER SYSTEM CANCEL SESSION' number
세션 ID를 지정해 해당 세션에서 수행 중인 작업을 취소합니다.
연결을 끊는 대신, 현재 수행 중인 작업을 중단하고 작업이 취소되었다는 오류 코드를 사용자에게 반환합니다. 마찬가지로 자신의 세션은 취소할 수 없습니다.
CHECK DISK_USAGE
alter_system_check_disk_stmt:
alter_system_check_disk_stmt ::= 'ALTER SYSTEM CHECK DISK_USAGE'
V$STORAGE에서 로그 테이블의 디스크 사용량을 나타내는 DC_TABLE_FILE_SIZE
값을 재계산합니다.
프로세스 장애나 정전이 발생하면 디스크 사용량이 부정확해질 수 있습니다. 이 명령은 파일 시스템에서 값을 다시 읽어 정확한 사용량을 반영하지만, 파일 시스템에 부담을 줄 수 있으므로 필요할 때만 사용해야 합니다.
INSTALL LICENSE
alter_system_install_license_stmt:
alter_system_install_license_stmt ::= 'ALTER SYSTEM INSTALL LICENSE'
라이선스 파일을 기본 경로($MACHBASE_HOME/conf/license.dat
)에 설치합니다.
설치 전 라이선스 적합성을 검증하며, 검증에 성공하면 설치가 완료됩니다.
INSTALL LICENSE (PATH)
alter_system_install_license_path_stmt:
alter_system_install_license_path_stmt: ::= 'ALTER SYSTEM INSTALL LICENSE' '=' "'" path "'"
지정한 경로에 라이선스 파일을 설치합니다.
경로에 파일이 없거나 손상된 라이선스 파일을 지정하면 오류가 발생합니다. 경로는 절대 경로여야 하며, 설치 전 라이선스 적합성을 검증합니다.
SET
alter_system_set_stmt:
alter_system_set_stmt ::= 'ALTER SYSTEM SET' prop_name '=' value
변경 가능한 속성 목록은 다음과 같습니다.
- QUERY_PARALLEL_FACTOR
- DEFAULT_DATE_FORMAT
- TRACE_LOG_LEVEL
- DISK_COLUMNAR_PAGE_CACHE_MAX_SIZE
- MAX_SESSION_COUNT
- SESSION_IDLE_TIMEOUT_SEC
- PROCESS_MAX_SIZE
- TAG_CACHE_MAX_MEMORY_SIZE
ALTER SESSION
개별 세션 단위로 자원을 관리하거나 설정을 변경할 때 사용하는 구문입니다.
SET SQL_LOGGING
alter_session_sql_logging_stmt:
alter_session_sql_logging_stmt ::= 'ALTER SESSION SET SQL_LOGGING' '=' flag
세션의 트레이스 로그에 메시지를 남길지 여부를 지정합니다.
다음과 같은 비트 플래그 값을 사용할 수 있습니다.
- 0x1: 파싱·검증·최적화 단계 로그
- 0x2: DDL 수행 결과 로그
따라서 값이 2이면 DDL 로그만 기록되고, 값이 3이면 오류와 DDL 로그가 함께 기록됩니다. 아래는 세션의 로깅 플래그를 변경해 오류 로그를 남기는 예시입니다.
Mach> alter session set SQL_LOGGING=1;
Altered successfully.
Mach> exit
SET DEFAULT_DATE_FORMAT
alter_session_set_defalut_dateformat_stmt:
alter_session_set_defalut_dateformat_stmt ::= 'ALTER SESSION SET DEFAULT_DATE_FORMAT' '=' date_format
Sets the default format for Datetime data types for this session.
서버가 시작되면 시스템 속성 DEFAULT_DATE_FORMAT 값이 각 세션에도 설정됩니다.
속성을 변경하지 않았다면 세션 기본값은 "YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn"
입니다.
이 구문을 사용하면 시스템 전체 설정과 무관하게 특정 세션의 날짜 형식을 변경할 수 있습니다.
각 세션에 설정된 기본 날짜 형식은 V$SESSION에서 확인 가능합니다. 아래는 값을 조회하고 변경하는 예시입니다.
Mach> CREATE TABLE time_table (time datetime);
Created successfully.
Mach> SELECT DEFAULT_DATE_FORMAT from v$session;
default_date_format
-----------------------------------------------
YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn
[1] row(s) selected.
Mach> INSERT INTO time_table VALUES(TO_DATE('2016/11/12'));
[ERR-00300: Invalid date value.(2016/11/12)]
Mach> ALTER SESSION SET DEFAULT_DATE_FORMAT='YYYY/MM/DD';
Altered successfully.
Mach> SELECT DEFAULT_DATE_FORMAT from v$session;
default_date_format
----------------------------------------------
YYYY/MM/DD
[1] row(s) selected.
Mach> INSERT INTO time_table VALUES(TO_DATE('2016/11/12'));
1 row(s) inserted.
Mach> SELECT * FROM time_table;
TIME
----------------------------------
2016/11/12
[1] row(s) selected.
SET SHOW_HIDDEN_COLS
alter_session_set_hidden_column_stmt:
alter_session_set_hidden_column_stmt ::= 'ALTER SESSION SET SHOW_HIDDEN_COLS' '=' ( '0' | '1' )
세션에서 SELECT *
를 실행할 때 숨김 컬럼(_arrival_time
)을 함께 출력할지 결정합니다.
서버가 시작되면 전역 속성 SHOW_HIDDEN_COLS 값이 각 세션에 0으로 설정됩니다. 세션 기본 동작을 바꾸고 싶다면 이 값을 1로 변경하면 됩니다. 각 세션의 SHOW_HIDDEN_COLS 값은 V$SESSION에서 확인할 수 있습니다.
Mach> SELECT * FROM v$session;
ID CLOSED USER_ID LOGIN_TIME SQL_LOGGING SHOW_HIDDEN_COLS
-----------------------------------------------------------------------------------------------------------------
DEFAULT_DATE_FORMAT HASH_BUCKET_SIZE
------------------------------------------------------------------------------------------------------
1 0 1 2015-04-29 17:23:56 248:263:000 3 0
YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn 20011
[1] row(s) selected.
Mach> ALTER SESSION SET SHOW_HIDDEN_COLS=1;
Altered successfully.
Mach> SELECT * FROM v$session;
_ARRIVAL_TIME ID CLOSED USER_ID LOGIN_TIME SQL_LOGGING
--------------------------------------------------------------------------------------------------------------------------------
SHOW_HIDDEN_COLS DEFAULT_DATE_FORMAT HASH_BUCKET_SIZE
------------------------------------------------------------------------------------------------------------------------
1970-01-01 09:00:00 000:000:000 1 0 1 2015-04-29 17:23:56 248:263:000 3
1 YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn 20011
[1] row(s) selected.
SET FEEDBACK_APPEND_ERROR
alter_session_set_feedback_append_err_stmt:
alter_session_set_feedback_append_err_stmt ::= 'ALTER SESSION SET FEEDBACK_APPEND_ERROR' '=' ( '0' | '1' )
세션에서 발생한 Append 에러 메시지를 클라이언트 프로그램으로 전달할지 여부를 설정합니다.
값은 다음과 같습니다.
- 0 = 에러 메시지를 보내지 않음
- 1 = 에러 메시지를 전송
아래는 사용 예시입니다.
mach> ALTER SESSION SET FEEDBACK_APPEND_ERROR=0;
Altered successfully.
SET MAX_QPX_MEM
alter_session_set_max_qpx_mem_stmt:
alter_session_set_max_qpx_mem_stmt ::= 'ALTER SESSION SET MAX_QPX_MEM' '=' value
세션에서 실행되는 단일 SQL이 GROUP BY, DISTINCT, ORDER BY 연산을 수행할 때 사용할 수 있는 최대 메모리를 지정합니다.
설정한 한도를 초과해 메모리를 할당하려고 하면 SQL 실행이 중단되고 오류로 처리됩니다.
오류 발생 시 쿼리를 포함한 오류 코드와 메시지가 machbase.trc
에 기록됩니다.
Mach> ALTER SESSION SET MAX_QPX_MEM=1073741824;
Altered successfully.
Mach> SELECT * FROM v$session;
ID CLOSED USER_ID LOGIN_TIME CLIENT_TYPE
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
USER_NAME USER_IP SQL_LOGGING SHOW_HIDDEN_COLS
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FEEDBACK_APPEND_ERROR DEFAULT_DATE_FORMAT HASH_BUCKET_SIZE MAX_QPX_MEM RS_CACHE_ENABLE RS_CACHE_TIME_BOUND_MSEC
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
RS_CACHE_MAX_MEMORY_PER_QUERY RS_CACHE_MAX_RECORD_PER_QUERY RS_CACHE_APPROXIMATE_RESULT_ENABLE IDLE_TIMEOUT QUERY_TIMEOUT
-----------------------------------------------------------------------------------------------------------------------------------------------
14 0 1 2021-03-08 16:33:01 503:181:809 CLI
NULL 192.168.0.194 11 0
1 YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn 20011 1073741824 1 1000
16777216 50000 0 0 0
[1] row(s) selected.
Elapsed time: 0.001
- SQL 문이 최대 메모리를 초과했을 때의 trc 로그 예시
[2021-03-08 16:36:32 P-69000 T-140515328653056][INFO] DML FAILURE (2E10000084:Memory allocation error (alloc'd: 1048595, max: 1048576).)
- SQL 문이 최대 메모리를 초과했을 때 machsql 에러 메시지 예시
Mach> select * from tag order by value DESC, time ASC;
NAME TIME VALUE
--------------------------------------------------------------------------------------
[ERR-00132: Memory allocation error (alloc'd: 1048595, max: 1048576).]
[0] row(s) selected.
Elapsed time: 0.447
SET SESSION_IDLE_TIMEOUT_SEC
alter_session_set_session_idle_timeout_sec_stmt:
alter_session_set_session_idle_timeout_sec_stmt ::= 'ALTER SESSION SET SESSION_IDLE_TIMEOUT_SEC' '=' value
세션이 유휴 상태일 때 연결을 유지할 최대 시간을 지정합니다. 초 단위로 설정하며, 지정한 시간이 지나면 해당 세션이 종료됩니다. 설정된 유휴 제한 시간은 V$SESSION에서 확인할 수 있습니다.
Mach> ALTER SESSION SET SESSION_IDLE_TIMEOUT_SEC=200;
Altered successfully.
Mach> SELECT IDLE_TIMEOUT FROM V$SESSION;
IDLE_TIMEOUT
-----------------------
200
[1] row(s) selected.
SET QUERY_TIMEOUT
alter_session_set_query_timeout_stmt:
alter_session_set_query_timeout_stmt ::= 'ALTER SESSION SET QUERY_TIMEOUT' '=' value
세션에서 쿼리를 실행할 때 서버 응답을 기다리는 최대 시간을 지정합니다. 초 단위로 설정하며, 지정한 시간을 초과하면 쿼리가 자동으로 중단됩니다. 세션에 설정된 QUERY_TIMEOUT 값은 V$SESSION에서 확인할 수 있습니다.
Mach> ALTER SESSION SET QUERY_TIMEOUT=200;
Altered successfully.
Mach> SELECT QUERY_TIMEOUT FROM V$SESSION;
QUERY_TIMEOUT
-----------------------
200
[1] row(s) selected.