5.1.0 버전에서 추가된 기능과 개선된 이슈를 정리한 릴리즈 노트입니다.
작성 중입니다.
추가된 기능
중요한 순으로 기재합니다.
APPEND Tagdata : TAGNAME 이 저장되어 있지 않다면, 자동 생성
TAGDATA TABLE APPEND 할 때, TAGNAME 이 저장되어 있지 않은 경우에는 자동으로 TAGNAME 을 생성해서 Tag 데이터의 APPEND 를 속행할 수 있습니다.
제어할 수 있는 Property 는 TAGDATA_AUTO_NAME_INSERT_IN_APPEND 이며, 기본값은 1 (켜짐) 입니다.
CREATE TAGDATA TABLE TAG (name VARCHAR(20) PRIMARY KEY, time DATETIME BASETIME, value DOUBLE SUMMARIZED); INSERT INTO TAG METADATA VALUES ('TAG-A'); -- 아래 데이터를 APPEND 로 입력할 때엔, TAG-B 는 저장되어 있지 않지만 입력이 성공한다. -- ('TAG-B', '2019-03-01 01:23:45', 36.5)
현재는 APPEND 에서만 지원되며, INSERT 는 추후 패치를 통해 지원될 예정입니다.
Disk Full 발생 시 알람 기능
마크베이스 서버가 위치한 디스크의 가용 공간의 일정 부분까지만 사용할 수 있습니다.
제어할 수 있는 Property 는 DISK_USED_RATIO_CAP 이며, 기본값은 0 (무제한) 입니다.
- 해당 Property 는, 디스크의 사용 공간 비율(%) 을 나타냅니다.
- Property 값이 설정되어 있는 경우, 해당 비율까지 디스크가 사용된 경우 다음의 현상이 발생합니다. (이 디스크 사용은 마크베이스 서버의 사용과 무관할 수 있습니다.)
- INSERT/APPEND 가 모두 실패하며, 디스크가 꽉 찼다는 에러 메시지를 반환합니다.
$MACHBASE_HOME/trc
의machbase.trc
파일에, 디스크 사용량과 Property 값이 함께 출력됩니다.$MACHBASE_HOME/trc
에alert.trc
가 생성되며, 해당 파일에는 디스크의 사용량과 Property 값이 함께 저장되어 있습니다.
INSERT INTO Tagdata : Bind Variable 지원
INSERT INTO 구문에 Bind Variable 을 사용해서 입력이 가능해졌습니다.
if (SQLPrepare(sStmt, (SQLCHAR *)"INSERT INTO TAG VALUES (?, '2010-01-01', 1.0)", SQL_NTS) == SQL_ERROR) { printf("Prepare error\n"); } if (SQLBindParameter(sStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, tagnameData, 0, &tagnameDataSize) == SQL_ERROR) { printf("Bind error tag name"); }
DURATION 절에 Bind Variable 지원
SELECT 구문의 DURATION 절에도 Bind Variable 이 지원됩니다.
if (SQLPrepare(sStmt, (SQLCHAR *)"SELECT * FROM tab1 DURATION ? SECOND", SQL_NTS) == SQL_ERROR) { printf("Prepare error\n"); } if (SQLBindParameter(sStmt, 1, SQL_PARAM_INPUT, SQL_C_UBIGINT, SQL_INTEGER, 0, 0, &sSecond, 0, NULL) == SQL_ERROR) { printf("Bind error tag name"); }
Trace Log Level 추가
$MACHBASE_HOME/trc/machbase.trc
에 출력되는 로그의 레벨을 조정할 수 있는 Property 를 추가합니다.
제어할 수 있는 Property 는 TRACE_LOG_LEVEL 이며, 기본값은 0 입니다.
- Level 0 : 기존 내용이 출력
- Level 1 : Level 0 의 내용 + Cluster Edition 의 Coordinator/Replication/Query Module Status 출력
- Level 2 : Level 1 의 내용 + 서버의 모든 입력/쿼리 수행에 대한 상세 경과를 기록 (SELECT/APPEND/DML)
Cluster Edition : DDL 실패 시, 성공한 Node 만으로 Cluster 서비스를 계속함
부분적으로 몇몇 Node 가 DDL 이 실패하게 되면, Cluster 전체가 서비스를 못 하는 상황이 발생했었습니다.
이제는 DDL 이 실패하더라도, 성공한 Node 만으로 Cluster 서비스를 계속하도록 수정했습니다.
실패한 Node 는 DDL-incompleted
상태가 되며, 별도 조치가 필요하거나 Remove-Node 로 삭제해야 합니다.
Tag Analyzer : 고정 X축 간격 설정
Zoom 을 할 때 마다 X축의 간격이 자동으로 설정되었는데, 이를 고정할 수 있습니다.
DELETE Log : 자동 DELETE 기능
아래의 CREATE TABLE
구문과 같이, 입력 시점에 특정 조건을 만족하는지 확인한 후 DELETE 를 자동으로 수행하는 기능을 제공합니다.
-- '입력 시점'에 다음을 검사한다. -- >> 최근 삭제 시점보다 1시간 이상 경과한 경우, 최근 2일치를 제외한 모든 레코드를 삭제한다. CREATE TABLE t1 (...) KEEP 2 DAY AFTER APPEND INTERVAL 1 HOUR;
DELETE Log : DELETE 가 이미 진행 중인 경우 추가 DELETE 작동 중단
DELETE 구문이 여러 개 동시에 수행시켜도 순차적으로 진행되므로, 성능만 저하되고 아무런 효과가 없습니다.
따라서 동일한 테이블에 DELETE 가 이미 진행 중이라면 추가로 입력되는 DELETE 는 곧바로 에러 메시지를 반환합니다.
Cluster Edition : 호스트 자원 모니터링 기능
추가 바람
개선된 이슈
반영된 순으로 기재합니다.
Common
모든 서버 제품 적용되는 이슈 사항입니다.
- LSM 인덱스를 사용한 Log Table SELECT 시, 인덱싱이 완료된 최근 레코드가 매우 낮은 확률로 조회되지 않는 문제가 해결되었습니다. (#1259)
- Lookup Table 에서 DURATION 절을 사용하게 되면, 서버가 비정상종료되던 문제가 해결되었습니다. (#1271)
- 클라이언트가 비정상적인 프로토콜 메시지를 전송할 때, 서버의 에러 메시지가
Invalid protocol state.
만 나오던 문제가 해결되었습니다. (#1214)
이제는Invalid protocol state. Check your application again. (Protocol = OOO, Stmt State = OOO)
로 자세히 나오도록 했습니다. - 메모리 사용량을 줄이기 위해 DISK_KEYVALUE_ENABLE_MEM_INDEX Property 를 해제 (0) 하는 경우,
Tagdata 테이블의 SELECT 가 느려지던 문제가 해결되었습니다. (#1164) - SELECT 가 빈번한 상황에서, 같은 테이블에 DELETE 를 수행하는 경우엔 Hang 이 발생하던 문제가 해결되었습니다. (#1286)
DELETE 작업을 곧바로 진행하기 힘든 경우에는, 별도의 DELETE Thread 에게 맡긴 채로 작업을 종료하기 때문에 DELETE 완료가 당장 안될 수도 있습니다. - Windows 환경에서, 클라이언트 연결 해제가 완료되었음에도 TIME_WAIT 가 급격히 늘어나는 문제가 해결되었습니다. (#1160)
- UNION ALL 에서 AVG Function 을 조회해서 합치는 경우, 서버가 비정상 종료하던 문제가 해결되었습니다. (#1330)
- Tagdata Table 에서 DELETE WHERE 를 통해 메타데이터 삭제를 수행할 때, 간헐적으로 서버가 비정상 종료하던 문제가 해결되었습니다. (#1322)
- Windows 환경에서, 이 작업을 완료하기 위한 페이징 파일이 너무 작습니다 라는 에러와 함께 서버가 비정상 종료하던 문제가 해결되었습니다. (#1291)
- Tagdata Table DELETE 이후에도 SELECT 속도가 예전보다 빨라지지 않던 문제가 해결되었습니다. (#1300)
- SELECT 구문에서 DURATION 절에 MINUTES 처럼 복수형 단위를 사용해도 에러가 나오지 않아서 의미 전달이 실패하던 문제가 해결되었습니다. (#1291)
기본적으로 단위를 나타낼 때는 단수형 단위를 사용합니다. (예) MINUTE, SECOND - Fixed Table 조회 시, 간혹 실패하는 경우가 발생할 수 있는데, 이 때 서버로의 클라이언트 접속이 아예 안 되는 문제가 해결되었습니다. (#1354)
- Stream 도중 실패할 경우, 에러 메시지를 출력한 다음에 종료하도록 수정했습니다. (#859)
- Volatile Table 의 INSERT INTO ON DUPLICATE UPDATE 구문이 실패하는 경우엔, 레코드가 변경되지 않습니다.
그런데 이 때 재부팅하면 레코드가 변경되어 있던 문제가 해결되었습니다. (#1366)
Cluster Edition
Cluster Edition 에 적용되는 이슈 사항입니다.
- 동일한 패키지 이름을 Add-Package 할 경우 성공하던 문제가 해결되었습니다. (#1296)
- Fixed Table 조회 시 Global OID 가 간헐적으로 오염될 수 있는 문제가 해결되었습니다. (#1285)
--force-restore-state
명령의 대상이scrapped
상태만 지원됐었으나,ddl-incomplete
상태도 가능하도록 수정했습니다. (#1324)- 종료되었다 되살아난 Warehouse 가 존재할 경우, 이후 DDL 수행이 되살아난 Warehouse 에서는 전혀 다른 방법으로 진행하던 문제를 수정했습니다. (#1223)
이렇게 진행할 경우, 추후 진행되는 쿼리가 해당 Warehouse 에서는 수행되지 않거나 비정상 종료될 수 있는 잠재적 위험을 가지고 있었습니다. - machloader 를 사용해 입력하는 경우, Warehouse 가 전부 비정상 종료되던 문제를 수정했습니다. (#1367)
MWA / Tag Analyzer
마크베이스 웹 관리자에 적용되는 이슈 사항입니다.
Client Library
클라이언트 라이브러리에 적용되는 이슈 사항입니다.
- 서버로 ODBC 연결 실패 시, 에러 메시지가 출력되지 않아 정상 상황으로 보이던 문제가 해결되었습니다. (#1226)
- C# Connector 에서, 연결 문자열 (Connection String) 에 입력할 수 있도록 CONNECT_TIMEOUT, COMMAND_TIMEOUT 을 지원합니다. (#1356)
- C# Connector 에서, APPEND 실패 에러 메시지를 확인할 수 있는 Delegator Type 과 인터페이스를 추가했습니다. (#1357)
잘 모르겠소요
- #1193 : Coordinator 정보 날아가는 부분은.. 한번 뒤엎은거 같은데 확인이 필요하다.