Contents

CUBRID 2008 R4.4 패치 릴리스 노트

릴리스 노트 정보

본 문서는 CUBRID 2008 R4.4 Patch 1(빌드번호 8.4.4.1001)부터 R4.4 Patch 13(빌드번호 8.4.4.13002)까지의 정보를 포함한다.

CUBRID 2008 R4.4의 각 패치 버전은 이전 패치 버전에서 발견된 오류 수정 및 기능 개선을 포함한다.

CUBRID 2008 R4.4는 CUBRID 2008 R4.3에서 발견된 오류 수정 및 기능 개선과 이전 버전들에 반영된 모든 오류 수정 및 기능 개선을 포함한다.

CUBRID 2008 R4.3을 포함한 이전 버전에 대한 정보는 http://release.cubrid.org/ko에서 확인할 수 있다.

동작 변경

2008 R4.4 Patch 8

복제 동기화 잠금을 획득하지 못하는 경우의 에러 로그 레벨을 NOTIFICATION 에서 ERROR로 변경 (CUBRIDSUS-14156)

복제 동기화 잠금을 영구히 획득할 수 없어서 복제 반영이 멈춘 경우에도, 에러 로그 레벨에 따라서 에러 로그가 기록되지 않는 문제가 있다. 이 상황을 사용자가 감시할 수 있도록 해당 메시지에 대한 에러 로그 수준을 NOTIFICATION에서 ERROR로 변경했다. 해당 에러 메시지는 applylogdb의 에러 로그 파일($CUBRID/log/<db-name>@<local-node-name>_applylogdb_<db-name>_<remote-node-name>.err )에 출력된다.

Unable to mount disk volume "/home/cubrid/CUBRID/var/APPLYLOGDB/testdb". The database "testdb", to which the disk volume belongs, is in use by user - on process 13223 of host - since -.

복제 동기화 잠금을 영구히 획득할 수 없는 경우는 아래와 같다.

  • 기존 HA 그룹으로 구성되어 복제 반영 중이던 노드가 제거된 경우
  • 기존 HA 그룹으로 구성되어 복제 반영 중이던 노드의 이름이 변경된 경우

2008 R4.4 Patch 7

"cubrid broker status" 명령에 "-b" 또는 "-f" 옵션 사용 시 출력되는 값들이 잘림 (CUBRIDSUS-13588)

수정 이전에는 브로커 이름이 영문 최대 20자를 넘으면 넘는 부분을 생략하여 출력했으나 수정 이후에는 생략 없이 전체 이름을 출력한다. 또한, "LONG-T "등 고정폭을 넘어 출력되는 값은 잘려서 출력되었으나 값이 잘리지 않도록 수정했다.

이 수정으로 인해 출력되는 값의 문자열 길이에 따라 출력폭이 가변적일 수 있음에 유의한다.

2008 R4.4 Patch 4

JDBCCCI CCI의 loginTimeout과 JDBC의 connectTimeout의 적용 범위 및 기본값 변경 (CUBRIDSUS-12537)

수정 이전에는 URL에 설정한 CCI의 loginTimeout(JDBC는 ConnectTimeout)이 최초 접속시에만 적용되며 loginTimeout(JDBC는 connectTimeout)을 지정하지 않으면 무한 대기했다. 수정 이후 로그인 타임아웃이 최초 접속 이후 내부 재접속에도 적용되며, loginTimeout(JDBC는 connectTimeout)을 지정하지 않은 경우 기본 값이 30초로 설정된다.

CCI prepare 또는 execute 함수에서 내부적인 재접속 시 login_timeout 속성이 적용되도록 수정 (CUBRIDSUS-12530)

수정 이전 버전에서는 prepare 또는 execute 함수에서 내부적인 재접속 시 로그인 타임아웃이 적용되지 않았으나 login_timeout이 설정되어 있을 경우 반영되도록 수정했다.

기능 추가

2008 R4.4 Patch 8

디스크 장애를 감지하는 기능 추가 (CUBRIDSUS-13796)

디스크 장애를 감지하기 위해 cubrid.conf의 ha_monitor_disk_failure_interval 파라미터가 추가되었다. 이 파라미터 값에 설정한 시간마다 디스크 장애 여부를 판단한다.

2008 R4.4 Patch 7

질의 수행 시간 및 질의 계획을 재확인하기 위해 SQL 로그를 재생하는 cubrid_replay 유틸리티 추가 (CUBRIDSUS-13170)

이 유틸리티를 통해 다음 정보를 확인할 수 있다.

  • SQL 로그에 기록된 질의 수행 시간과 이 유틸리티에 의해 재생된 질의 수행 시간의 차이가 큰 것부터 확인할 수 있다. 즉, 어떤 장비에 기록된 SQL 로그를 다른 장비에서 재생하여 어떤 SQL에서 성능 차이가 발생하는지를 확인할 수 있다.
  • SELECT 문 뿐 아니라 UPDATE, DELETE 문도 SELECT 문으로 변환하여 질의 계획을 확인할 수 있다.

cubrid.conf의 montor_waiting_thread 파라미터 설정 시 (log flush 시작 ~ LWT 완료 시간)까지 측정하여 해당 파라미터보다 클 경우 NOTIFICATION 에러 로깅하도록 수정 (CUBRIDSUS-13112)

다음은 monitor_waiting_thread 값을 1000으로 설정했을 때 출력하는 NOTIFICATION 메시지 예이다.

Time: 04/01/14 17:43:41.002 - NOTIFICATION *** file ../../src/transaction/log_page_buffer.c, line 5343 CODE = -980 Tran = 0, CLIENT = (unknown):(unknown)(-1), EID = 20
A thread is waiting in flushing log pages (total time for flushing: 11954 ms, time waiting for cdbs036.cub:copylogdb(13142): 11952 ms) more than 1000 msec.

문자열 중간에 '\0'가 있는 경우에도 바인딩할 수 있는 cci_bind_param_ex 함수를 추가 (CUBRIDSUS-9791)

cci_bind_param 함수는 중간에 '\0'이 포함된 문자열을 바인딩할 수 없으므로, 이 동작이 가능한 cci_bind_param_ex 함수를 추가했다.

cci_bind_param_ex(statement, 1, CCI_A_TYPE_STR, "aaa\0bbb", 7, CCI_U_TYPE_STRING, 0);

위에서 다섯번째 인자인 7이 문자열의 바이트 길이에 해당된다.

이 함수를 추가하면서 CUBRIDSUS-13503 이슈와 CUBRIDSUS-13879 이슈가 발생하였고, 각각 2008 R4.4 Patch 7, 2008 R4.4 Patch 8에서 수정되었다.

2008 R4.4 Patch 5

어떤 칼럼의 제약 조건이 NULL일 때 데이터 검사 없이 제약 조건을 NOT NULL로 변경하는 것을 허용하는 SKIP_UPDATE_NULL 힌트 추가 (CUBRIDSUS-13221)

NULL을 NOT NULL로 제약 조건을 변경하는 경우 기존 버전에서는 hard default로 값을 업데이트하는 과정으로 인해 많은 시간이 소요되며, 이 문제를 해소하기 위해 수정된 버전에서는 SKIP_UPDATE_NULL를 제공한다. 이 힌트 사용 이후 사용자는 NOT NULL 제약 조건과 불일치하는 NULL 값이 존재할 수 있음을 인지해야 한다.

ALTER /*+ SKIP_UPDATE_NULL */ TABLE foo MODIFY col INT NOT NULL;

2008 R4.4 Patch 4

CCI datasource에서 연결 개수의 제한을 동적으로 변경할 수 있도록 수정 (CUBRIDSUS-12616)

datasource에서 연결 개수를 제한하는 pool_size 속성을 변경 가능하도록 하고, datasource 생성 시 연결 풀에 유지되는 최대 연결 개수를 지정하는 max_pool_size 속성을 추가했다. 수정 이후 pool_size 속성은 cci_datasource_change_property 함수를 통해 최대 max_pool_size 값까지 변경할 수 있다.

CCI 로그인 타임아웃 값 변경 함수 추가 및 datasource 속성 변경 함수 추가 (CUBRIDSUS-12530)

다음 함수들이 추가되었다.

  • cci_set_login_timeout: 로그인 타임아웃을 밀리초 단위로 설정한다.
  • cci_get_login_timeout: 로그인 타임아웃 값을 반환한다.
  • cci_datasource_change_property: CCI의 DATASOURCE에 대해 key에 명시한 속성(property)의 값을 val에 설정한다. 이 함수를 사용하여 변경한 속성 값은 datasource 내 모든 연결에 적용된다.

2008 R4.4 Patch 2

개선 및 오류 수정

2008 R4.4 Patch 11

2008 R4.4 이상 버전의 JDBC 드라이버로 2008 R4.1 이하 버전의 CUBRID 엔진에 접속하면 CAS 변경 시 질의 타임아웃 에러가 발생함 (CUBRIDSUS-15656)

동시 접속이 많은 환경에서 CAS 변경이 일어날 때, 질의 타임아웃 시간(연결 URL 문자열에서 queryTimeout으로 설정)을 너무 짧게 잡으면 CAS가 변경된 이후에 이미 질의 타임아웃을 초과하는 상황이 자주 발생할 수 있다.

수정 이전에는 2008 R4.4 이상의 JDBC 드라이버에서 2008 R4.1 데이터베이스 엔진에 접속하고 있을 때 JDBC 드라이버에서 초로 설정한 값이 1/1000로 나뉘어져서, 데이터베이스 엔진에 전달되기 전에 질의 타임아웃이 발생한 것으로 잘못 판단된다.

UNION 문이나 부질의에 LIMIT 0이 포함되면 서버 프로세스가 비정상 종료함 (CUBRIDSUS-15369)

CREATE TABLE t1(c1 int, c2 int);
CREATE TABLE t2(c1 int, c2 int);

PREPARE stmt1 FROM '( SELECT fv.c1, fv.c2 as prec2, ? as targetc2
                     FROM t1 fv JOIN t2 gu
                     ON fv.c1=gu.c1
                     LIMIT ? )
                     UNION ALL
                   ( SELECT c1, c2 as prec2, ? as targetc2
                     FROM t1
                     LIMIT ?
                    )
                    LIMIT ?';

EXECUTE stmt1 USING 2,2,2,2,0;

자동 커밋 OFF일 때 DDL 수행 직후 요청된 DML 이 실패하면 이미 성공한 DDL이 복제되지 않음(CUBRIDSUS-14969)

CREATE TABLE tbl (id INT PRIMARY KEY, col2 INT);
COMMIT;
INSERT INTO tbl VALUES (1, 1);
ALTER TABLE tbl ADD COLUMN col1 VARCHAR(10); -- 복제 안 됨
INSERT INTO tbl VALUES (1, 1, 'a'); -- 고유 키 위반으로 실패
COMMIT;

2008 R4.4 Patch 9

데이터베이스 연결 과정에서 할당된 CAS가 다른 응용 프로그램에 의해 사용된 이후 cci_get_db_parameter 함수가 호출되면 함수 수행 이후에도 트랜잭션이 진행 중인 상태로 남아있는 현상 (CUBRIDSUS-15091)

응용 프로그램 A에 할당된 CAS가 다른 응용 프로그램 B에 의해 사용된 이후에, 원래 응용 프로그램 A에서 요청한 cci_get_db_paramter() 를 처리하는 CAS의 상태가 요청을 처리한 이후에도 트랜잭션 진행중(CLIENT_WAIT)인 상태로 남는 문제를 수정했다. CAS의 상태는 "cubrid broker status" 명령으로 확인할 수 있다.

DISTINCT와 같은 질의문에서 정렬 연산 수행 도중, 실행 중인 사용자의 인터럽트 또는 설정에 의해 질의가 중단되면 서버 프로세스가 비정상 종료함 (CUBRIDSUS-14982)

DISTINCT와 같은 질의문에서 정렬 연산 수행 도중, 다음에 의해 실행이 중단되면 서버 프로세스가 비정상 종료하는 현상을 수정했다.

  • 응용 프로그램 또는 브로커에서 질의 타임아웃을 설정하여 타임아웃이 발생하는 경우
  • 응용 프로그램에서 질의 수행 중 Statement.cancel()을 호출하여 질의를 강제로 종료하는 경우
  • CSQL에서 질의 수행 중 사용자가 Ctrl-C를 누른 경우

느린 질의 발생 시 CAS 프로세스에서 메모리가 누수되는 현상 (CUBRIDSUS-14793)

cubrid.conf의 sql_trace_slow 파라미터를 설정한 후, 이 값을 초과하여 실행하는 질의(slow query)가 발생하면 CAS 프로세스에서 메모리가 누수되는 현상을 수정했다.

명시한 시간을 초과 실행하는 슬로우 쿼리(slow query)를 이벤트 로그에 출력할 때 서버 프로세스가 비정상 종료하는 현상 (CUBRIDSUS-14781)

"Invalid XASL" 에러가 발생한 이후 슬로우 쿼리(slow query)를 이벤트 로그에 출력하려는 경우 서버 프로세스가 비정상 종료하는 현상을 수정했다. 슬로우 쿼리란 cubrid.conf의 sql_trace_slow 파라미터 값에 설정된 시간을 초과하여 수행하는 질의를 지칭한다.

해당 상황은 sql_trace_slow의 값을 1밀리 초 이하의 매우 작은 값으로 설정했기 때문에 발생한 것이다. sql_trace_slow의 기본 단위는 밀리 초이므로, 이 값을 적절히 큰 값(보통 1초 이상)으로 설정하기를 권장한다.

"Invalid XASL" 에러는 어떤 질의에 대해 PREPARE 연산 이후 해당 질의가 캐시에 없는 상태에서 EXECUTE 연산을 수행할 때 발생하는 에러로, 매우 짧은 시간 이내에 실행되므로 sql_trace_slow의 값을 1밀리 초 이하로 설정하는 경우가 아니면 수정 이전 버전에서도 해당 현상은 발생하지 않는다.

서버 프로세스가 비정상 종료된 이후, 재시작하여 복구하는 과정에서 데이터베이스 볼륨에 이상이 발생할 수 있음 (CUBRIDSUS-14534)

서버 프로세스가 비정상 종료된 이후 재시작되어 복구하는 과정에서, 마지막 체크포인트때 수집된 트랜잭션의 상태에 따라 이미 종료된 트랜잭션의 언두 로그가 잘못 적용되는 문제를 해결하였다.

OR 절이 매우 많이 사용된 질의 수행 시 서버 프로세스가 비정상 종료하는 현상 (CUBRIDSUS-14100)

수정 이후 OR 절이 400개 이상 사용된 질의를 수행하면 다음의 에러 메시지를 출력하여 서버 프로세스의 비정상 종료를 방지한다.

SELECT *
FROM tbl
WHERE id = ?
AND ((email = ? AND uname = ?)
OR(email = ? AND uname = ?)
...
OR(email = ? AND uname = ?)
);
The query has been rejected due to attempt to exceed the maximum allowed nesting level(400).

GROUP BY ... HAVING 질의문에서 HAVING 절의 칼럼을 GROUP BY 절이 포함하지 않으면 집계 함수 결과 값이 잘못됨 (CUBRIDSUS-13764)

HAVING 절에 포함된 칼럼이 GROUP BY 절에 존재하지 않는 경우, HAVING 조건이 집계 결과에 영향을 끼치지 않도록 수정했다.

CREATE TABLE foo (a INT, b INT, c INT);

INSERT INTO foo VALUES (1, 1, 1);
INSERT INTO foo VALUES (1, 2, 2);
INSERT INTO foo VALUES (1, 3, 3);

SELECT a, b, COUNT(c) FROM foo GROUP BY a HAVING b=1;

예를 들어, 위의 질의 수행 시 HAVING 절의 칼럼 b는 GROUP BY 절에 포함되어 있지 않으므로 집계 결과는 HAVING 조건의 영향을 받지 않게 되어 COUNT(c)의 결과 값은 3이 되어야 하지만, 수정 이전 버전에서는 1을 출력한다.

참고로, cubrid.conf의 only_full_group_by 파라미터 값이 yes인 경우에는 HAVING 절에 포함된 칼럼이 반드시 GROUP BY 절에 포함되어야 한다.

2008 R4.4 Patch 8

여러 클라이언트를 통해 동시에 INSERT가 수행되는 환경에서 query timeout이 자주 발생하면, DB볼륨에 이상이 발생할 수 있음 (CUBRIDSUS-14026)

여러 클라이언트가 동시에 INSERT를 수행하고 query cancel이나 query timeout이 자주 발생하면, 데이터 페이지의 연결 체인이 잘못될 수 있는 문제를 해결하였다.

이 경우 해당 테이블에 대한 인덱스 스캔결과는 이상이 없으나, 순차스캔의 결과가 잘못될 수 있다.

해당 문제가 발생하면 checkdb를 통해 검출이 되는데, 아래와 같은 오류들이 보고된다.

  • 에러 번호 : -597, -546, -698, -699
Time: 05/14/14 10:04:58.246 - ERROR *** file ../../src/storage/heap_file.c, line 15908 ERROR CODE = -597 Tran = 1, EID = 4
Number of pages for heap file 0|261|630 is inconsistent.
200508 and 200534 were found according to heap chain and file table, respectively.

Time: 05/14/14 10:09:07.070 - ERROR *** file ../../src/transaction/locator_sr.c, line 8252 ERROR CODE = -698 Tran = 1, EID = 9
Internal error: INDEX pk_XXX_id ON CLASS XXX (CLASS_OID: 0|605|4). the number of OIDs in the unique hierarchy: 786125 does not equal the number of OIDs: 786126 found in the unique B+tree plus the number of NULLs: 0 found in the unique hierarchy for B+tree: 0|264|660.

Time: 05/14/14 10:09:07.070 - ERROR *** file ../../src/transaction/locator_sr.c, line 8277 ERROR CODE = -699 Tran = 1, EID = 10
Internal error: INDEX pk_XXX_id ON CLASS XXX (CLASS_OID: 0|605|4). the number of OIDs in the unique hierarchy: 786125 does not equal the number of OIDs: 786126 found in the unique B+tree root statistics for B+tree: 0|264|660.

Time: 05/14/14 10:09:19.281 - ERROR *** file ../../src/transaction/locator_sr.c, line 7827 ERROR CODE = -546 Tran = 1, EID = 11
Internal error: INDEX i_XXX_c_b ON CLASS XXX (CLASS_OID: 0|605|4). Expecting 786125 OID entry values, but 786126 were found on B+tree: 0|299|850.

FROM_UNIXTIME()의 입력 인자로 호스트 변수를 사용하면 NULL을 반환하는 문제 (CUBRIDSUS-14282)

CREATE TABLE foo (c1 INT, c2 TIMESTAMP, PRIMARY KEY(c1));
PREPARE stmt1 FROM 'INSERT INTO foo VALUES (?, FROM_UNIXTIME(?))';
EXECUTE stmt1 using 2,2;

REUSE_OID 테이블에 대해 INSERT ... ON DUPLICATE KEY UPDATE 문 또는 UPDATE 문을 수행하면 다른 키가 가리키는 값을 갱신하는 현상 (CUBRIDSUS-14101)

이러한 현상을 회피하기 위한 우회안으로, 2008 R4.4 Patch 7 이하 또는 9.2 Patch 6 이하 버전에서는 테이블 생성 시 REUSE_OID를 사용하지 않도록 한다.

톰캣 종료 시 CUBRID JDBC에서 예외 처리가 발생하는 현상 (CUBRIDSUS-14710)

CUBRID JDBC를 사용하는 환경에서 톰캣 종료 시 아래와 같은 예외(exception) 처리 로그가 발생하는 현상을 수정했다.

org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: A web application appears to have started a thread named Thread-13 but has failed to stop it. This is very likely to create a memory leak.

CCI 응용 프로그램에서 pool statement 사용 시 cci_schema_info 함수로 생성된 요청을 닫으면 응용 프로그램에 비정상 종료함 (CUBRIDSUS-14333)

cci_property_set (ps, "pool_prepared_statement", "true");
ds = cci_datasource_create (ps, &err);
...
req = cci_schema_info(con, CCI_SCH_PRIMARY_KEY, "foo", NULL, CCI_CLASS_NAME_PATTERN_MATCH, &err);
...
cci_close_req_handle (req);

cci_schema_info를 통해 기본 키(primary key) 정보를 구할 때 동일한 정보가 중복되어 출력되는 현상 (CUBRIDSUS-14019)

수정 이전 버전에서 각각 다른 테이블에 같은 이름을 가진 기본 키를 생성하는 경우 해당 현상이 발생한다.

CREATE TABLE test1 (id INT, a INT);
CREATE TABLE test2 (id INT, a INT);

ALTER TABLE test1 ADD CONSTRAINT pk_id PRIMARY KEY(id);
ALTER TABLE test2 ADD CONSTRAINT pk_id PRIMARY KEY(id);
cci_schema_info(src_conn_hid, CCI_SCH_PRIMARY_KEY, test1, NULL, CCI_CLASS_NAME_PATTERN_MATCH, &cci_err);

JDBC의 Date나 Time 객체 값을 받을 때 밀리초가 0으로 리셋되지 않은 채로 반환되는 문제 수정 (CUBRIDSUS-14380)

java.sql.Date나 java.sql.Time 객체의 값이 밀리초 부분의 값이 0으로 리셋되지 않은 상태로 반환되는 문제를 수정했다.

ResultSet rs = connection.createStatement().executeQuery("select time '12:15:00'");
rs.next();
System.out.println(rs.getTime(1).getTime());

split-brain으로 인한 장애 시 우선 순위가 낮은 마스터를 슬레이브로 변경 (CUBRIDSUS-13850)

HA 환경에서 split-brain으로 인한 장애 시 우선 순위가 낮은 마스터를 슬레이브로 역할을 변경하도록 수정했다. 수정 이전에는 우선 순위가 낮은 마스터 노드를 강제로 종료시켰다.

다수의 호스트 접속 환경에서 CCI 응용 프로그램이 특정 호스트에만 접속 빈도가 낮음 (CUBRIDSUS-14247)

HA 환경에서 연결 URL의 altHosts에 다수의 호스트를 설정하고 loadBalance 속성을 true로 설정했음에도 불구하고 CCI 응용 프로그램들이 여러 브로커에 고루 분산되어 접속되지 않는 현상을 수정했다.

applylogdb 프로세스가 DB에 반영하는 SQL 문을 로깅할 때 출력되는 float/double 값의 유효 자리수가 6자리로 고정되는 현상 (CUBRIDSUS-13968)

ha_enable_sql_logging 파라미터 값을 yes로 설정하여 applylogdb의 SQL 문을 로깅할 때, 출력되는 float/double 값의 유효 자리수가 6자리로 고정되는 현상을 수정했다.

마스터 노드의 DB 서버 프로세스가 1분 이내에 재시작에 실패하는 경우 슬레이브로 역할을 변경하도록 수정 (CUBRIDSUS-13849)

수정 이전 버전에서는 같은 조건 하에서 마스터 노드가 동작을 정지하고 failover가 발생한다.

Windows 환경의 JDBC 프로그램에서 NULL 문자열을 바인딩하면 invalid precision 예외가 발생함(CUBRIDSUS-13879)

cubrid.jdbc.driver.CUBRIDException: Given precision of 0 is invalid; it should be greater than 0 and no greater than 1073741823.

이 이슈는 CUBRIDSUS-9791 이슈의 반영으로 인해 발생했다.

"cubrid checkdb" 명령 수행 도중 몇 가지 오류 상황에서 나머지 검사들을 수행하지 않고 종료되는 문제 (CUBRIDSUS-13987)

"cubrid checkdb"는 데이터베이스에 대한 여러가지 항목에 대한 오류 검사를 수행하는데, 몇 가지 상황에서 특정 항목에 대한 오류를 발견한 이후 나머지 항목에 대한 검사를 이어서 수행하지 않고 종료되는 문제를 수정했다.

2008 R4.4 Patch 7

오버플로우(overflow)되는 레코드, 즉 DB 볼륨 한 페이지의 크기(기본 크기: 16K)보다 큰 레코드에 LOB 타입 칼럼이 포함되어 있는 경우 LOB 타입이 아닌 다른 칼럼을 UPDATE한 이후 LOB 타입 칼럼을 SELECT하면 오류가 발생함(CUBRIDSUS-13561)

CREATE TABLE foo (a STRING, b BLOB); INSERT INTO FOO VALUES (REPEAT('0123456789', 2000), BIT_TO_BLOB(X'abcdef1234567890987654321fedcba')); SELECT BLOB_TO_BIT(b) FROM foo; UPDATE foo SET a = REPEAT('abcdeabcde', 2000); SELECT BLOB_TO_BIT(b) FROM foo;

ERROR: External file "/home/user1/CUBRID/databases/testdb/lob/ces_524/foo.00001396576111615326_9340" was not found.

GROUP_CONCAT 함수의 메모리 누수 현상 (CUBRIDSUS-13509)

SELECT a, GROUP_CONCAT(b) FROM foo GROUP BY a;

cci_bind_param 함수에서 STRING 타입을 DATETIME 타입으로 변환하면 입력값과 달라짐 (CUBRIDSUS-13581)

snprintf (sql, 4096, "insert into foo values(?,?)");
req1 = cci_prepare (con, sql, 0, &err);
res = cci_bind_param(req1, 2, CCI_A_TYPE_STR, "2012/01/01 01:03:05.0", CCI_U_TYPE_DATETIME, 0);

수정 이전 버전에서는 변환된 데이터의 초가 입력 데이터와 다르게 변환된다.

2012/1/1 1:3:3.000

cci_datasource_release 함수의 실행이 성공할 때 0을 반환함 (CUBRIDSUS-13576)

이 함수의 실행이 성공하면 1을 반환하도록 수정했다.

copylogdb의 지연으로 인해 로그 플러시도 지연되는 상태를 감지하여 데이터베이스 서버 로그 파일에 로깅하는 기능 추가 (CUBRIDSUS-13232)

cubrid.conf의 log_trace_flush_time 파라미터에 설정한 시간보다 로그 플러싱 시간이 오래 걸리는 상태를 감지하여 로깅하는 기능을 추가했다.

JDBC 연결 객체 생성 시 브로커 연결 없이 대기하게 하는 기능 추가 (CUBRIDSUS-13376)

JDBC 연결 URL의 속성에 'useLazyConnection=(true|false)'를 추가했다. 기본값은 false이며, 이 값이 true이면 사용자의 연결 요청 시 브로커 연결 없이 성공을 반환하며, prepare나 execute 등의 함수를 호출할 때 브로커에 연결된다. 이 값을 true로 설정하면 많은 클라이언트 응용이 동시에 재시작되면서 CONNECTION POOL을 생성할 때 접속이 지연되거나 실패하는 현상을 피할 수 있다.

2008 R4.4 Patch 6

DB 서버와 응용 프로그램의 연결을 중계하는 CAS가 다른 CAS로 변경된 이후 사용자의 요청을 처리하지 못함 (CUBRIDSUS-13390)

수정 이전 버전에서는 CAS가 변경된 이후 PREPARE와 EXECUTE를 제외한 나머지 요청들을 처리하지 못한다. 이 현상의 예로 JDBC 응용 프로그램에서 CUBRIDDatabaseMetaData.getTables()을 호출하면 통신 에러(communication error)가 발생한다.

2008 R4.4 Patch 5

페이지 크기에 근접한 크기의 레코드에 대해 INSERT/DELETE 작업이 반복되는 경우 공간이 재활용되지 않음 (CUBRIDSUS-13355)

페이지 크기(기본 크기: 16K)에 근접한 크기의 레코드에 대해 INSERT/DELETE 작업이 반복되면 기존 여유 공간을 재활용하지 않고 새로운 페이지를 할당하는 오류를 수정했다.

동일한 조인 칼럼에 검색 조건이 2개 이상인 병합 조인(merge join) 수행 시 잘못된 결과를 출력함 (CUBRIDSUS-13199)

CREATE TABLE foo (i INT, j INT);
INSERT INTO foo VALUES (1, 1);
INSERT INTO foo VALUES (2, 1);

CREATE TABLE bar (v VARCHAR(10), i INT);
INSERT INTO bar VALUES ('one', 1);
INSERT INTO bar VALUES ('two', 2);

SELECT /*+ RECOMPILE USE_MERGE */
f.*, b.*
FROM foo f JOIN bar b ON f.i=b.i AND f.j=b.i;

위 질의를 수행하면 1건을 출력해야 하나 수정 이전에는 2건을 출력한다.

동시에 같은 테이블에 많은 FULL SCAN 작업이 수행되는 경우에 대해 성능을 일부 개선 (CUBRIDSUS-13188)

테이블 FULL SCAN 질의가 수행되면 INSERT에서 사용될 BEST PAGE를 질의 처리와 병행하여 선별하게 되는데, 이때 다른 트랜잭션이 DELETE 작업 이후 COMMIT을 수행하지 않아 비어있지만 사용할 수 없는 공간을 확인하는 과정을 수행한다. 그런데 이 과정에서 CRITICAL SECTION을 사용하므로 동시에 많은 FULL SCAN 질의는 성능 저하를 유발한다. 실제 INSERT 과정에서 이 공간을 다시 확인하게 되므로, 이 수정에서는 DELETE후 COMMIT하지 않은 공간을 확인하는 절차를 생략하여 CRITICAL SECTION으로 인한 병목 현상을 줄이도록 했다.

커버링 인덱스의 칼럼에 NULL 값이 존재할 때 커버링 인덱스 스캔으로 GROUP BY 절을 포함하는 질의를 수행하면 부정확한 결과를 출력함 (CUBRIDSUS-13100)

CREATE TABLE foo (id VARCHAR(60), stat VARCHAR(15));
INSERT INTO foo VALUES ('line', '1');
INSERT INTO foo VALUES ('line', '1');
INSERT INTO foo VALUES ('line', '1');
INSERT INTO foo VALUES ('line', null);
INSERT INTO foo VALUES ('line', null);

CREATE INDEX idx1 ON foo (id, stat);

SELECT /*+ RECOMPILE */ COUNT(*) cnt, id, stat
FROM foo
WHERE id > ''
GROUP BY id, stat
ORDER BY cnt desc;
  cnt id stat
======================================
    3 'line' '1'
    1 'line' NULL
    1 'line' NULL

수정 이전에는 위의 질의 수행 결과로 3건을 출력하나, 수정 이후 2건을 정상적으로 출력한다.

  cnt id stat
======================================
    3 'line' '1'
    2 'line' NULL

레플리카 존재 시 split-brain 방지 기능이 동작하지 않음 (CUBRIDSUS-12986)

마스터 노드에서 슬레이브로 역할 변경(demote)이 필요한 경우 마스터 노드의 고립 여부에 따라 역할 변경 수행 여부를 결정하나, 수정 이전 버전에서는 레플리카가 존재하는 경우 마스터 노드는 고립이 아니라고 판단하여 역할 변경이 되지 않거나 혹은 불필요한 역할 변경이 발생한다.

브로커 다중화에서 모든 브로커 호스트가 장애로 판단되는 경우 재접속하는 방법 개선 (CUBRIDSUS-12977)

수정 이전 버전에서는 모든 호스트가 장애로 판단(unreachable)되면 2차 연결 이후에도 모든 호스트를 장애 노드로 판단하나 수정 이후 버전에서는 2차 연결 시 성공한 노드는 장애 노드 리스트에서 제외한다.

응용 프로그램에서 PREPARE->EXECUTE->테이블 재성성 이후 다시 EXECUTE를 수행하면서 바인딩되는 칼럼의 타입이 기존 테이블과 다르면 오류가 발생함 (CUBRIDSUS-12745)

CREATE TABLE tbl (i INT);

INSERT INTO tbl VALUES(?); -- prepare & execute

DROP TABLE IF EXISTS tbl;
CREATE TABLE tbl (i STRING); -- the type of a column is changed

INSERT INTO tbl VALUES(?); -- execute with previous prepare statement

CREATE TABLE tbl (i int);
Semantic: Cannot coerce host var to type integer.

"cubrid statdump" 명령 수행 시 tran_index의 값이 cubrid.conf [common] 영역의 max_clients보다 크면 결과가 출력되지 않음 (CUBRIDSUS-13205)

예를 들어, 아래와 같이 특정 데이터베이스에 max_clients를 설정했을 때 [common] 영역의 설정 값 이상의 클라이언트, 즉 10개 이상의 클라이언트(CSQL 또는 CAS)가 접속되면 statdump 결과가 출력되지 않는 현상을 수정했다.

[common] max_clients = 10
[@testdb] max_clients = 100

슬레이브 노드를 정지할 때 JDBC 응용 프로그램에서 잘못된 오류 메시지를 출력하는 현상 (CUBRIDSUS-13030)

수정 이전에는 " cubrid.jdbc.driver.CUBRIDException: null"을 출력하는데, 수정 이후 "cubrid.jdbc.driver.CUBRIDException: Request timed out"과 같은 정상 오류 메시지를 출력한다.

cubrid.jdbc.driver.CUBRIDException: null[CAS INFO - 10.99.116.61:9703,1,1575],[SESSION-6],[URL-jdbc:cubrid:10.99.116.61:9703:tdb:dba:********:?charset=utf8].

2008 R4.4 Patch 4

"SELECT ... INTO col" 문에 의해 특정 값이 저장된 "col"을 사용하여 "INSERT INTO ... (col)"을 실행하면 CAS 프로세스가 비정상 종료하는 현상 (CUBRIDSUS-13066)

INSERT 리스트에는 칼럼 이름만 가능하고, 그 외의 경우는 오류를 반환하도록 수정했다.

다음은 수정 이전 버전에서 해당 이슈가 발생하는 구문의 예이다.

SELECT 1 INTO a;
CREATE TABLE t1 (id INT);
INSERT INTO t1(a) VALUES (2), (11), (8);

CONNECT BY 절을 사용하는 상관 부질의에서 발생하는 오류 (CUBRIDSUS-12485)

SELECT a.w_id wId , a.c_id cId ,
(
    SELECT SUBSTR(SYS_CONNECT_BY_PATH(name, ' > '), 4) fullname
    FROM innertbl
    WHERE cId = a.c_id /* workClsId */
    START WITH lvl = 1 CONNECT BY PRIOR WORK_CLS_ID = UPR_ID
) AS cname
FROM outertbl a
WHERE 1 = 1
AND ROWNUM < 10
ERROR: An I/O error occurred while reading page 1094004801 of volume "(null)".... Bad file description

BLOB 컬럼이 있는 데이터 파일을 로드 시 loaddb 프로세스가 비정상 종료하는 문제 (CUBRIDSUS-12878)

BLOB 컬럼이 있는 unloaddb 데이터 파일을 가지고 loaddb 유틸리티를 수행하면 loaddb 프로세스가 비정상 종료하는 문제를 수정하였다.

GROUP BY와 ORDER BY가 함께 존재하고 두 절의 컬럼이 다를때, 질의에 따라 잘못된 인덱스 스캔이 선택되어 질의 결과가 잘못 나오는 문제 (CUBRIDSUS-12883)

CREATE TABLE foo (a INT, b INT, c INT);
CREATE INDEX idx_a ON foo (a);
INSERT INTO foo values (null, 1, 1);

SELECT b, c
FROM foo
WHERE a IS NULL GROUP BY b, c ORDER BY c, b;

수정 이전에는 위의 질의 수행시 잘못된 인덱스 스캔이 선택되어 잘못된 결과를 출력하지만, 수정 이후에는 순차스캔으로 동작하여 정상 결과를 출력하게 된다. 하지만 순차 스캔으로 인해 성능이 저하될 수 있으므로, 해당 질의 계획을 확인하여 질의를 최적화하는 방안을 다시 고려해야 한다.

오버플로우 키를 가진 고정 길이 CHAR 타입 칼럼에 데이터를 INSERT하지 못하는 현상 (CUBRIDSUS-12762)

키의 크기가 DB 볼륨의 1/4 페이지(페이지 크기 기본값 16KB)를 초과하여 오버플로우 키로 설정된 CHAR 타입 칼럼에 데이터를 INSERT할 때, 페이지 분할 중 B-tree의 구분자(separator)가 크게 생성되면 INSERT가 실패할 수 있는 현상을 수정했다.

잠금 타임아웃 이벤트 로그에 blocker의 SQL이 잘못 출력되는 현상 (CUBRIDSUS-12713)

client 1
    csql> INSERT INTO x VALUES (4);

client 2
    csql> UPDATE x SET a = 10 WHERE a = 4;

위의 질의를 각 클라이언트에서 수행할 때 아래와 같이 blocker의 SQL이 실제 blocker SQL이 아닌 다른 SQL로 잘못 출력되는 현상을 수정했다.

12/19/13 18:37:57.304 - LOCK_TIMEOUT
waiter:
  client: PUBLIC@testhost|csql(10458)
  lock: U_LOCK (oid=0|560|4, table=x)
  sql: update x x set x.a= ?:1 where x.a= ?:0
  bind: 4
  bind: 10

blocker:
  client: PUBLIC@testhost|csql(10459)
  lock: X_LOCK (oid=0|560|4, table=x)
  sql: update x x set x.a= ?:1 where x.a= ?:0

JDBC getObject()를 통해 Timestamp 타입 또는 Date 타입으로 저장된 데이터를 가져올 때 "NULL pointer exception" 에러 발생 (CUBRIDSUS-12686)

한 예로, 수정 이전 버전에서 iBatis를 사용하여 Timestamp 또는 Date 타입 값을 가져올 때 에러가 발생한다.

SQL 트레이스 출력 결과에서 인덱스 스캔의 힙 "lookup time" 시간이 실제보다 작은 값으로 출력되는 오류 (CUBRIDSUS-12678)

csql> ;trace on
csql> SELECT a, b FROM x WHERE a < 10 and b = 'g';
...
Trace Statistics:
  SELECT (time: 925, fetch: 73745, ioread: 64532)
    SCAN (index: x.idx), (btree time: 921, fetch: 73742, ioread: 64532, readkeys: 9, filteredkeys: 9, rows: 9216) (lookup time: 85, rows: 1024)

AUTO_INCREMENT 칼럼에 정의된 SERIAL의 CACHE 크기가 0보다 크면 서버 프로세스에서 메모리 누수 발생 (CUBRIDSUS-12628)

CREATE TABLE foo (a INT AUTO_INCREMENT, b DATETIME);
ALTER SERIAL foo_ai_a INCREMENT BY 1 CACHE 5000;

기본 키 또는 고유 키를 포함하는 조건이 있으면 다른 키가 아닌 해당 키를 선택하여 스캔 범위를 좁히도록 수정 (CUBRIDSUS-12615)

기본 키 또는 고유 키의 모든 컬럼에 대해 동등(equal)조건이 주어지는 경우, 해당 키를 사용하는 스캔 계획이 생성되도록 수정했다.

CREATE TABLE foo (a INT, b INT, c STRING);
CREATE UNIQUE INDEX u_foo ON foo(a);
CREATE INDEX i_foo ON foo(b, c);

SELECT /*+ RECOMPILE */ b, c
FROM foo
WHERE a = 100 AND b = 100 AND c = 'aaaaa';

"cubrid broker status -f" 명령 수행 결과에 이전에 접속한 호스트 이름이 출력되는 현상 (CUBRIDSUS-12573)

databases.txt의 db-hosts에 다수의 호스트가 설정된 상태에서 절체 등으로 인해 CAS가 다른 호스트에 재연결되는 경우 "cubrid broker status -f" 명령을 수행하면 재연결된 호스트 정보가 아닌 이전의 호스트 정보가 출력되는 문제를 수정했다.

브로커가 새로운 CAS를 생성하는데 계속 실패하면서 드라이버의 연결이 안 됨 (CUBRIDSUS-12567)

브로커가 새로운 CAS를 생성하는데 계속 실패하면서 드라이버의 연결이 안 되는 현상을 수정했다. 수정 이전 버전에서 드라이버에 login_timeout 속성이 명시되어 있으면 login timeout으로 실패하고 login_timeout 속성이 명시되지 않으면 무한 대기하는 상황이 발생한다.

cubrid_broker.conf의 MIN_NUM_APPL_SERVER, MAX_NUM_APPL_SERVER 값이 서로 다른 경우 "cubrid broker status -b" 수행 결과 일부가 잘못 출력되는 현상(CUBRIDSUS-12562)

cubrid_broker.conf의 MIN_NUM_APPL_SERVER, MAX_NUM_APPL_SERVER 값이 서로 다른 경우 "cubrid broker status -b" 명령으로 출력되는 TPS, QPS, SELECT, INSERT, UPDATE, DELETE, OTHERS, #CONNECT 값들이 잘못되는 현상을 수정했다.

HA 환경에서 트리거가 존재하는 경우 트리거에 의해 변경된 데이터가 복제 반영되었음에도 불구하고 슬레이브 노드에서 재차 트리거를 수행하는 문제 (CUBRIDSUS-13051)

마스터 노드의 트리거 동작 결과가 슬레이브 노드에 복제되었음에도 불구하고 슬레이브 노드에서 동일한 트리거 동작이 수행되어 질의 결과가 잘못될 수 있는 문제를 수정했다.

copylogdb 프로세스의 응답이 늦어지면 상대방 노드의 DB 서버 프로세스가 비정상 종료할 수 있는 현상 (CUBRIDSUS-12884)

HA copylogdb 프로세스가 존재하는 장비에 작업 부하가 커지면서 copylogdb 프로세스의 응답이 늦어지면 상대방 노드의 DB 서버 프로세스가 비정상 종료할 수 있는 현상을 수정했다.

Windows 64 비트용 CUBRID 소스 코드 빌드 시 gencat.exe가 없다는 에러 메시지와 함께 실패함 (CUBRIDSUS-12370)

'"D:\code\win\x64\Debug"\..\..\gencat\gencat.exe' is not recognized as an internal or external command

Windowws 환경에서 응용프로그램을 통해 질의를 수행하는 경우 Linux 환경에 비해 상대적으로 느린 현상 (CUBRIDSUS-12980)

수정 이전 버전에서는 Windows 환경에서 응용 프로그램의 드라이버와 CAS 사이의 데이터 전송 지연 문제로 인해 Linux 환경에 비해 질의 수행이 상대적으로 느리다.

2008 R4.4 Patch 3

두 개의 REPLACE문이 PRIMARY KEY와 UNIQUE가 동시에 존재하는 테이블에 대해 동시에 수행될 때 잘못된 오류가 발생하는 문제 (CUBRIDSUS-12447)

특정 컬럼에 PRIMARY KEY와 UNIQUE가 함께 존재하는 상황에서 REPLACE문이 동시에 수행될 때 교착 상태가 발생할 수 있는데, 교착 상태 에러가 아닌 잘못된 오류("Object found in workspace without class")를 반환하는 문제를 수정했다.

GROUP BY 최적화(skip group by)가 되는 SELECT 질의문의 SELECT 리스트 중 오버플로우(overflow)된 칼럼이 존재하면 DB 서버가 비정상 종료하는 현상 (CUBRIDSUS-12464)

칼럼 값의 크기가 DB 볼륨 1 페이지(기본값 16KB)를 초과하는 오버플로우가 발생하면 DB 서버가 비정상 종료하는 현상을 수정했다.

CREATE TABLE FOO (id INT PRIMARY KEY, name STRING);
INSERT INTO foo SELECT ROWNUM, LPAD('A', 3*16*1024, 'A') FROM DB_CLASS;
UPDATE foo SET name='A' WHERE id % 2 = 1;
SELECT name, id FROM tbl GROUP BY id;

JDBC ResultSetMetaData.isAutoIncrement()를 호출하면 NullPointerException 발생 (CUBRIDSUS-12612)

DatabaseMetaData를 통해 생성된 ResultSet에서 (예, DatabaseMetaData.getTables()) ResultSetMetaData를 사용할 때 isAutoIncrement()를 호출하면 NullPointerException이 발생하는 오류를 수정했다.

DatabaseMetaData m = c.getMetaData();
ResultSet r = m.getTables(null, null, "foo", null);
ResultSetMetaData rm = r.getMetaData();

for (int i = 0; i < rm.getColumnCount(); i++) {
    System.out.println(String.format("%s%s", rm.getColumnName(i + 1), rm.isAutoIncrement(i + 1) ? "true" : "false"));
}

MIN_NUM_APPL_SERVER와 MAX_NUM_APPL_SERVER가 다른 경우 일부 CAS에 "cubrid broker reset" 명령이 적용되지 않는 문제 (CUBRIDSUS-12516)

cubrid_broker.conf의 MIN_NUM_APPL_SERVER 값과 MAX_NUM_APPL_SERVER 값이 서로 다른 경우 일부 CAS에 "cubrid broker reset" 명령이 적용되지 않는 문제를 수정했다.

2008 R4.4 Patch 2

UNION ALL이 많은 질의 또는 표현식의 중첩이 많은 질의 수행 시 DB 서버가 비정상 종료함 (CUBRIDSUS-12208)

UNION ALL이 많은 질의 또는 표현식의 중첩이 많은 질의 수행 시 DB 서버가 비정상 종료했으나, 오류 처리하도록 수정했다.

중첩 깊이가 128을 초과하는 부질의를 수행하면 응용 프로그램이 비정상 종료함 (CUBRIDSUS-12120)

중첩 깊이가 128을 초과하는 부질의(subquery)를 수행하면 응용 프로그램이 비정상 종료되는 현상을 수정했다.

SELECT * FROM (SELECT * FROM (... (SELECT 1)...)...);

테이블에 대해 다량의 DELETE가 수행되어 데이터 페이지에 빈 공간이 많아진 이후, INSERT 수행 시간이 오래 소요되는 현상 (CUBRIDSUS-12405)

하나의 테이블에 대해 많은 양의 DELETE가 발생해서 데이터페이지에 대한 빈 공간이 많이진 이후, 여러 클라이언트들이 해당 테이블에 대해 동시에 INSERT를 수행할 때 비정상적으로 많은 시간이 소요되는 현상을 수정했다.

슬레이브 노드의 DB 볼륨이 마스터 노드의 DB 볼륨보다 커지는 현상 (CUBRIDSUS-11994)

슬레이브 노드의 DB 볼륨이 마스터 노드의 DB 볼륨보다 커지는 현상을 줄이기 위해, 슬레이브 노드의 복제 반영 주기(커밋 주기)가 자동으로 조절되도록 수정했다.

복제 로그를 슬레이브 노드의 DB에 반영하는 applylogdb 프로세스는 일정 시간 단위로 복제 로그에 대한 커밋을 수행하는데, 주기가 짧을수록 볼륨 재사용률이 높아져서 볼륨 크기가 불필요하게 증가하지 않게 된다. 반면, 주기가 짧아지면 복제 반영 속도가 늦어져서 복제 지연의 가능성이 높아진다. 수정 이전 버전에서는 복제 반영 주기가 고정되었으나, 수정 이후 버전에서는 복제 지연 정도를 계산하여 복제 반영 주기를 자동으로 조정한다.

마스터 노드와 슬레이브 노드 간 방화벽이 설정되어 있는 경우 장시간 동안 트랜잭션 로그가 복사되지 않으면 DB 서버 쪽 연결이 종료되는 현상 (CUBRIDSUS-12201)

TCP 네트워크 프로토콜에 SO_KEEPALIVE 옵션을 적용하여, 위 제목의 현상으로 인해 마스터 DB에서 장애 발생 시 failover가 정상 동작하지 않을 수 있는 문제를 수정했다.

또한, cubrid.conf에 tcp_keepalive 파라미터(기본값: yes)를 추가하여 TCP 네트워크 프로토콜에 SO_KEEPALIVE 옵션을 적용할지 여부를 지정할 수 있도록 수정했다.

HA 환경에서 copylogdb가 요청한 로그 페이지가 없는 경우 copylogdb 에러 로그에 에러 메시지를 기록하도록 수정 (CUBRIDSUS-12249)

HA 환경에서 copylogdb가 요청한 로그 페이지가 없는 경우 copylogdb와 서버의 에러 로그에 다음 메시지를 기록하도록 수정했다.

log writer: failed to get log page(s) starting from page id 108.

SHARD 힌트로 인해 broker_log_top 수행 결과에서 동일한 질의가 구분되어 집계되는 현상 (CUBRIDSUS-12410)

broker_log_top 수행 시 질의 힌트를 제거한 이후에 질의 개수를 집계하도록 수정했다.

CAS의 keepalive 패킷 전송 주기가 OS 설정을 따라가도록 수정하고, 드라이버의 소켓에 keepalive 시간을 사용하도록 수정 (CUBRIDSUS-12354)

CAS에서 사용하는 소켓의 keepalive 패킷전송 주기가 OS 설정을 따라가도록 수정했고, JDBC와 CCI드라이버의 소켓도 CAS 소켓과 동일하게 keepalive 시간을 사용하도록 수정했다. 이 수정으로 인해 드라이버와 CAS 간 방화벽에 의해 연결이 끊기는 현상이 줄어들게 되었다.

access_ip_control_file에서 ip 주소에 0이 포함되어 있으면 DB 서버 구동에 실패함 (CUBRIDSUS-12188)

$ vi cubrid.conf

access_ip_control=yes
access_ip_control_file=db.access

수정 이전 버전에서 아래 db.access 파일의 IP 주소에 0이 포함되면 DB 서버 구동에 실패한다.

$ vi db.access

@TESTDB
10.100.0.1

백업 수행 시 -B 혹은 -D 옵션으로 주어진 경로에 접근 권한이 없거나 디스크 여유 공간이 없으면 멈춰있는(hang) 현상 (CUBRIDSUS-12286)

수정 이전 버전에서 위의 현상이 발생하면 체크포인트가 실행되지 않아서 보관 로그 파일이 삭제되지 않을 수 있다.

cub_master 프로세스가 비정상 종료하는 현상(CUBRIDSUS-12058)

cub_master 프로세스의 에러 로깅으로 인해 cub_master 프로세스가 비정상 종료하는 현상을 수정했다.

2008 R4.4 Patch 1

한 테이블 내에서 총 20억건이 입력된 후, 새로운 입력 요청이 다량의 I/O Read를 유발하는 문제 (CUBRIDSUS-12170)

해당 문제는 데이터의 입력과 삭제가 함께 수행되는 환경에서 발현되며, 삭제된 건수와 상관없이 DB생성 이후 총 입력된 건수가 20억건을 넘어서면 문제가 발생할 수 있다.