* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
Window7 32bit, Linux 64bit 등 | |
[cubrid_rel] 수행 결과 | |
[도움말]-[버전정보] 확인 | |
java, php, odbc 등 입력 |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
밑에 메모리 누수 관련 글 답변을 해주세요.. 지금 현 시점에서 어떻게 해야하는지.. 큐브리드 측에서 패치해서 배포해야 없어지는 문제인지..
csql로 확인 중 메모리가 계속 증가하고 있는 것 같은데, 실제 사용 시 응용프로그램을 통해 호출되면 처리를 CAS가 담당하게 되고, CAS는 일정 메모리 이상 증가하면 재시작하여 초기화 하므로 메모리 증가가 서비스에 영향을 주지는 않을 것으로 보입니다.
DBMS에서 SQL 명령문만으로 처리하기에는 복잡한 자료의 저장이나 프로시저와 트리거 등을 작성하기 위하여 SQL 언어를 확장한 프로그래밍 언어를 사용하며,각 관계형 데이터베이스마다 이를 범용 언어로 구현하지 않고 본인들의 데이터베이스에서만 사용할 수 있는 언어로 개발하여 제공하고 있습니다.
예 : Oracle의 PL/SQL , MS-SQL의 Transact SQL(T-SQL)
이는 해당 데이터베이스내에서는 성능 등 측면에서 최적화의 장점이 있으나, 사용자는 표준이 아닌 언어의 사용으로 인해 호환성을 보장받지 못하고, 특정 DBMS제품에 종속(Lock-In)되는 단점이 있습니다.
CUBRID는 오픈소스SW로서 범용성 및 호환성을 우선 시 하며, SQL 확장 프로그래밍 언어 또한 표준 범용 언어인 Java를 채택하고 있습니다.
Java는 JVM(자바 가상 머신, Java Virtual Machine)이 설치될 수 있는 환경이면 CPU나 운영 체제의 종류에 관계없이 어디서나 실행할 수 있는 장점이 있지만,반면에 JVM라는 미들웨어의 존재로 인하여 성능 측면에서는 단점이 될 수 있습니다.
이러한 Java의 특성으로 인해 java기반으로 구현된 CUBRID의 Stored Procedure는
실시간으로 return을 요구하는 값이 특정 단일값이 아닌 반복적인 Transaction을 요구하는 로직인 경우 이를 Function이나 Procedure로 구현하면 DB와 java가 건건 마다 계속 통신을 해야되므로 최적의 성능을 보장할 수 없게 됩니다.
이러한 이유로 해당 logic을 DB가 아닌 응용에서 처리하도록 권장하고 있는 것이며, CUBRID의 Stored Procedure는 java 프로그래밍과 동일하므로 java 응용으로 어렵지않게 이식할 수 있습니다.
그러나, 이러한 경우를 제외한 실시간 응답이 필요없는의 환경(예: Batch 작업)에서는 CUBRID Stored Procedure를 문제 없이 사용할 수 있습니다.