Background Image
조회 수 37613 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

 

인덱스, 아는 만큼 보인다!
DBMS 개발자가 전하는 인덱스 활용 노하우

 

고성능 서비스를 구축하기 위한 DB 쿼리 튜닝의 핵심은 인덱스를 얼마나 잘 활용하는가에 달려 있다. 지난 3년 동안 CUBRID를 NHN 내/외부 서비스에 적용하면서 의외로 많은 개발자들이 DB 인덱스에 대해 “잘” 알지 못하고 “잘” 활용하지 못한다는 것을 발견하였다. 본 기고문에서는 6월 30일에 출시된 CUBRID 2008 R4.0에 적용된 다양한 인덱스 기법을 중심으로 인덱스 구조와 인덱스 활용 노하우를 쉽게 설명하고자 한다. 단, MySQL, MS-SQL, Oracle 등 다른 DBMS에서도 이와 동일/유사한 인덱스 기법이 적용되어 있으므로 본 기고문에서 소개할 인덱스 활용 노하우가 CUBRID에 국한되지 않는다는 점을 강조하고 싶다.

 

* 본 게시글은 월간 마이크로소프트웨어 8월호에 게재된 내용의 원작입니다.

   월간 마이크로소프트웨어에서는 약간 내용이 줄어서 게재된 관계로 본 게시글과 차이가 있을 수 있습니다.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
강동완  | NHN Business Platform 서비스 플랫폼 개발 센터 내 DBMS 개발랩 소속이다. CUBRID 차기 버전(코드명: Apricot)에 오라클의 Index Skip Scan 기법 (MySQL에서는 Loose Index Scan이라고 함)과 Function Index, MS-SQL Server의 Include Index 등 다양한 인덱스 활용 최적화 기법을 적용하기 위하여 개발에 몰두하고 있다.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

인덱스 구조와 스캔 방식을 이해하기


 

CUBRID의 인덱스는 B+-Tree 를 이용하여 인덱스를 구현한다. B+-Tree 는 B-Tree 의 한 종류로 일반적인 B-Tree 와는 달리 데이터 포인터들을 리프(Leaf) 노드에만 저장한다. 리프 노드의 상위 레벨인 넌리프(Non-Leaf) 노드는 전형적인 B-Tree 로 구성되는데, 리프 노드를 빠르게 찾기 위한 인덱스 역할을 한다. 리프 노드에는 키와 키에 대응하는 데이터의 포인터가 저장되어 있다. 리프 노드는 링크드 리스트로 연결되어 있기 때문에 범위 검색과 같은 순차 처리를 편하게 해준다. 그림 1 은 B+-Tree 의 전형적인 구조를 보여준다.

 

pic1.jpg


그림 1 B+-Tree 구조


B+-Tree 의 리프 노드는 서로 연결되어 있어 순차 처리가 가능하기 때문에 범위를 검색하는데 유리하다. 테이블은 처음부터 끝까지 모든 레코드를 읽어야 완전한 결과 집합을 얻을 수 있지만, 인덱스는 키 컬럼 순으로 정렬되어 있기 때문에 특정 위치에서 검색을 시작해서 검색 조건이 일치하지 않는 값을 만나는 순간 멈출 수 있다. 이것을 인덱스 범위 스캔(Index Range Scan)이라고 부른다. CUBRID는 범위 스캔을 B+-Tree 검색의 기본 연산으로 제공한다. 범위 스캔을 위해서는 두 개의 키가 필요한데, 범위의 양 끝을 표현하는 하위 키와 상위 키가 그것이다.

인덱스 범위 스캔은 두 단계로 진행된다. 첫 번째 단계에서는 루트에서부터 트리를 순회하여 리프 노드에서 하위 키를 찾아낸다. 두 번째 단계에서는 첫 번째 단계에서 찾은 키에서부터 상위 키까지 순차적으로 레코드를 읽어 처리한다. 상위 키가 현재 노드에서 발견되지 않으면 다음 노드를 읽어 상위 키를 가진 노드까지 검색을 계속해 나간다. 상위 키까지 순차 검색이 끝나면 전체 범위 검색이 완료된다.
두 번째 단계에서 상위 키까지 찾아가는 과정은 레코드에서 키를 읽어와 상위 키와 비교하는 과정의 연속이다. 상위 키가 최대 키이면 현재 노드의 키부터 마지막 노드까지 모두 검색 결과에 포함되기 때문에 비교 연산을 할 필요가 없어져 검색의 성능이 좋아진다. 이를 위해 옵티마이저는 입력된 쿼리를 재작성(rewrite)하며, CUBRID는 특정 키를 찾는 검색도 범위 검색으로 변환하여 수행한다. 이런 경우에는 하위 키와 상위 키 모두를 찾고자 하는 키로 동일하게 설정한다.

 

인덱스 스캔을 통한 질의 처리 과정을 이해하기


CREATE TABLE tbl (a INT NOT NULL, b STRING, c BIGINT);
CREATE INDEX idx ON tbl (a, b);

그림 2는 CUBRID에서 위의 구문으로 테이블과 인덱스를 생성하고 데이터를 입력한 경우, 인덱스 리프 노드와 테이블 데이터의 관계를 나타낸 그림이다. 왼쪽 인덱스 리프 노드에는 인덱스 키와 키에 대응되는 OID(레코드의 물리적 주소 값)가 저장되어 있다.

 

pic2.jpg  
그림 2 인덱스 리프 노드와 테이블 데이터의 관계

 

SELECT * FROM tbl WHERE a > 1 AND a < 5 AND b < ‘K’ AND c > 10000 ORDER BY b;

 

위와 같은 SELECT질의가 주어졌을 때 WHERE 절에 있는 검색 조건은 아래의 3가지로 나눌 수 있다.
 Key Range: 인덱스 스캔 범위로 활용되는 조건이다. (a>1 and a < 5)
 Key Filter: Key Range에 포함될 수 없지만 인덱스 키로 처리 가능한 조건이다. (b < ‘K’)
 Data Filter: 인덱스를 사용할 수 없는 조건이다. 테이블 데이터를 검색하는데 적용된다. (c > 10000)
CUBRID의 질의 처리 과정은 다음과 같다.
1) 인덱스 스캔인 경우 먼저 Key Range와 Key Filter를 적용하여 조건에 부합하는 OID 리스트를 만들어 낸다. 이 과정은 Key Range의 시작부터 끝까지 계속된다.
2) OID를 이용해 데이터 페이지에서 해당 레코드를 읽어 Data Filter를 적용하거나 SELECT 리스트에 기술된 컬럼 값을 읽어와 결과를 저장하는 임시 페이지에 기록한다.
3) ORDER BY나 GROUP BY 절이 있으면 임시 페이지에 저장된 레코드들을 정렬하여 최종 결과를 생성한다. 그림 3은 위의 SELECT 질의가 처리되는 1), 2), 3) 과정을 보여 준다.

 

 

pic3.jpg


 그림 3 인덱스 및 테이블 데이터 검색을 통한 질의 처리 과정

 

인덱스 사용 시 이런 점을 주의하자


옵티마이저가 인덱스를 사용하도록 하기 위해서는 WHERE 절에 Range 조건이 있어야 한다. Range 조건은 값의 비교조건, 즉 크다, 작다, 크거나 같다, 작거나 같다, 같다와 같은 비교문으로 기술된다. 만약 Range 조건이 없다면 옵티마이저는 테이블 순차 스캔을 시도할 것이다.
또한, WHERE 절에 인덱스 키의 첫 번째 컬럼이 사용되어야만 인덱스 스캔을 수행한다. 인덱스가 여러 컬럼으로 조합되어 있는 경우 많은 사람들이 이중 한가지 컬럼만을 사용하더라도 비교가 가능하다고 생각하는 경우가 있는데, 그것은 잘못된 생각이다. 첫 번째가 없는 상태에서는 두 번째가 정렬된 상태라고 할 수 없기 때문에 범위를 정의할 수 없다. 따라서 반드시 첫 번째 컬럼이 조건에 있어야 하며, 뒤의 컬럼들은 없어도 상관없다.
인덱스는 값의 대소 비교를 통해 트리가 구성되어 있다. 따라서 값의 대소 비교가 아닌 것은 B+-Tree를 사용해서 값을 찾을 수 없다. <>, != 와 같이 부정형 조건이나 NULL 비교는 인덱스를 사용할 수 없다. 인덱스의 첫 번째 컬럼을 조건절에서 가공하는 경우도 인덱스를 사용할 수 없다. 다음은 인덱스를 사용하지 못하는 질의문의 예이다.

 

SELECT * FROM student WHERE grade <> 'A';
SELECT name, email_addr FROM student WHERE email_addr IS NOT NULL;
SELECT student_id FROM record WHERE substring(yymm, 1, 4) = ‘1997’;

 

인덱스 활용 최적화: 디스크 I/O를 최소화하는 것이 튜닝의 핵심이다!


B+-Tree는 특성상 어떤 리프 페이지든 접근하는데 거의 동일한 비용이 든다. B+-Tree를 사용하는데 가장 큰 비용이 드는 부분은 Key Range의 시작부터 끝까지 인덱스 리프 노드들을 따라 스캔하는 것과 이와 대응되는 테이블 데이터를 스캔하는 것이다.


CUBRID의 I/O는 페이지 단위로 이루어진다. 이것은 하나의 레코드에서 하나의 컬럼만 읽으려 해도 레코드가 속한 페이지 전체를 디스크로부터 읽어온다는 것을 뜻한다. 따라서, 질의 성능을 좌우하는 가장 중요한 성능 지표는 I/O를 수행하는 페이지 개수이며, 이는 옵티마이저의 판단에 가장 큰 영향을 미친다. 옵티마이저가 인덱스를 읽을지, 테이블을 읽을지 결정하는데 있어 가장 중요한 판단 기준은 읽어야 할 레코드가 아니라 읽어야 할 페이지 개수인 것이다.


디스크 I/O는 메모리 액세스에 비해서 비용이 아주 크다. 질의 수행에 필요한 모든 데이터 페이지와 인덱스 페이지를 DB 버퍼에 올려놓고 처리할 수 있다면 좋겠지만 그러기에는 한계가 있다. 결국 디스크 I/O를 최소화 하고 대부분의 연산을 DB 버퍼에서 처리할 수 있도록 질의 처리 과정에서 액세스하는 페이지 수를 최소화시키는 것이 튜닝의 핵심이다. 액세스하는 페이지 수가 적으면 자연스럽게 물리적으로 디스크에서 읽어야 할 페이지 수도 줄어들기 때문에 DB 버퍼 히트율(DB buffer hit ratio)이 높아져서 데이터베이스의 전체적인 성능이 높아지게 된다. 그럼 지금부터 인덱스 스캔 과정에서 액세스해야 할 페이지 수를 줄일 수 있는 기법들에 대해 알아보자.

 

최적화 기법 1. Key Filter 활용


앞서 설명한 바와 같이 Key Filter는 Key Range에는 포함될 수 없지만 인덱스 키로 처리 가능한 조건이다. 이러한 Key Filter가 WHERE 조건절에 포함되면 인덱스 스캔 중에 데이터 페이지에 접근하는 횟수를 줄일 수 있다. 데이터 페이지를 읽는 것은 랜덤 액세스 이기 때문에 인덱스 페이지를 스캔하는 것보다 많은 비용이 든다. 따라서 WHERE절에 Key Filter를 주는 것이 성능에 유리하다.  또한, Data Filter가 Key Filter로 적용될 수 있도록 인덱스에 컬럼을 추가하는 것도 방법이 될 수 있다. 예를 들어 user 테이블에 (groupid, name)으로 구성된 인덱스 idx_1이 있는 상태에서 아래 질의를 수행한다고 가정해 보자.

 

SELECT * FROM user WHERE groupid = 10 AND age > 40;


groupid=10인 조건을 만족하는 레코드가 100건이고 그 중 age>40인 레코드가 10건이라고 하면, 인덱스 스캔으로 100건의 OID를 가져온 후, 최악의 경우 데이터 페이지로 100회의 액세스를 수행할 것이다. 그러나, idx_1 인덱스에 age 컬럼을 추가하여 (groupid, name, age)로 만들면 age > 40 조건이 Key Filter 조건으로 처리되어 인덱스 스캔으로 10건의 OID만 추출할 수 있다.

 

최적화 기법 2. 커버링 인덱스


만약 사용되는 인덱스 내에서 SELECT 질의에 대한 결과를 모두 얻을 수 있는 상황이라면 데이터 페이지에 저장되어 있는 레코드를 읽어오지 않아도 인덱스 키의 값으로만 결과를 만들어 낼 수 있다. MS-SQL Server 에서는 이와 같이 인덱스가 하나의 질의를 모두 “커버”한 경우에 대해서 “커버링 인덱스”라고 한다. CUBRID 2008 R4.0에도 커버링 인덱스가 도입되었다.

 

SELECT a, b FROM tbl WHERE a > 1 AND a < 5 AND b < ‘K’ ORDER BY b;

 

위의 질의는 커버링 인덱스가 적용될 수 있다. 질의에 사용된 컬럼은 a, b 뿐이고 모두 인덱스 컬럼이기 때문이다. 그림 4를 통해 커버링 인덱스에 의해 질의가 처리되어 테이블 데이터 페이지를 액세스 하는 부분이 없는 것을 확인할 수 있다. 대신 인덱스 스캔 결과로 인덱스 키 값을 그대로 Key Buffer에 저장한 후 이 값을 읽어 최종 결과를 만들어 낸다.


pic4.jpg  
그림 4 커버링 인덱스를 활용한 질의 처리 과정

 

커버링 인덱스는 데이터 페이지를 읽지 않는다는 점, 그리고 해당 질의를 자주 사용하게 되면 인덱스가 DB 버퍼에 캐시되어 있을 가능성이 높다는 점에서 디스크 I/O를 줄이는데 큰 역할을 한다. 따라서 레코드 크기에 비해 인덱스 키의 크기가 작고, 커버링 인덱스를 이용하는 질의가 자주 수행되는 것이 확실하다면, 커버링 인덱스를 사용하여 SELECT 질의 성능을 크게 향상시킬 수 있다.

 

최적화 기법 3. Sort 연산 대체


인덱스 스캔을 통해 생성된 결과 집합은 인덱스 컬럼 순으로 정렬된 상태이므로 ORDER BY, GROUP BY절에 의한 정렬 연산을 생략하도록 질의를 작성할 수 있다. 이를 위해서는 인덱스 컬럼의 순서대로 ORDER BY나 GROUP BY 절에 컬럼이 지정되어야 한다. 단 인덱스 컬럼이 조건절에서 ‘=’ 연산자로 동등 비교되는 경우에는, 해당 컬럼이 ORDER BY나 GROUP BY 절에서 중간에 생략되어도 된다. 그림 5는 인덱스 스캔에 의해 GROUP BY 정렬이 생략되는 질의 처리 과정을 보여 준다.

 

SELECT COUNT(*) FROM tbl WHERE a > 1 AND a < 5 AND b < ‘K’ AND c > 10000 GROUP BY a;



 

pic5.jpg
그림 5 GROUP BY 정렬 최적화된 질의 처리 과정


앞에서 인덱스 스캔을 하기 위해서는 조건절에 인덱스 첫 번째 컬럼이 명시되어야 한다고 설명했다. 하지만 인덱스 컬럼에 NOT NULL 제약 조건이 설정되어 있다면 옵티마이저는 조건절에 인덱스 첫 번째 컬럼이 없더라도 최소 키값과 최대 키값으로 Key Range를 자동으로 추가하여 인덱스 스캔이 가능하도록 최적화한다. 즉, 인덱스 리프 노드의 처음부터 끝까지 스캔하게 되는데, 이를 오라클에서는 인덱스 전체 범위 스캔(Index Full Range Scan) 이라고 부른다.

 

SELECT * FROM tbl WHERE b < ‘K’ ORDER BY a;


이 질의는 옵티마이저에 의해 인덱스 전체 범위 스캔이 수행되는 예이다. CUBRID Manager라는 질의 실행 도구로 해당 질의문의 실행 계획을 확인하면, 그림 6에서처럼 Key Range가 자동으로 추가되어 ORDER BY 정렬 연산이 생략되는 것을 알 수 있다.

 

pic6.jpg
그림 6 옵티마이저에 의해 정렬 최적화된 질의의 실행 계획

 

최적화 기법 4. LIMIT 최적화


LIMIT 절은 질의의 최종 결과 개수를 제한한다. Data Filter가 없는 질의에 LIMIT 절이 있으면 Key Range에 해당하는 키 값 전부를 스캔할 필요 없이 LIMIT 절에 기술된 개수만큼의 결과를 확보하자 마자 스캔을 중단할 수 있다. 이는 Range의 끝까지 스캔하고 나서 결국은 버리게 되는 페이지를 액세스하지 않기 때문에 불필요한 I/O를 제거할 수 있다.

SELECT * FROM tbl WHERE a = 2 AND b < ‘K’ ORDER BY b LIMIT 3;
이 질의는 LIMIT 최적화에 의해 필요한 결과를 얻은 후 인덱스 스캔이 중단되는 예이다. 만약 a = 2인 인덱스 키가 10페이지에 걸쳐 저장되어 있더라도 LIMIT 절에 명시한 3개의 키 값만 스캔하므로 1개의 페이지만 읽게 된다.
 

pic7.jpg
그림 7 LIMIT 최적화된 질의 처리 과정

 

한편, IN 절을 사용한 질의에 대해서도 LIMIT 최적화를 적용할 수 있다. CUBRID는 인덱스 컬럼이 IN 절에 사용되면 Key Range를 IN에 사용된 개수만큼 생성하고, 각각에 대해 인덱스 스캔을 수행한다. 다만, 아래 질의처럼 LIMIT 절에 결과 개수가 명시된 경우, 3번의 인덱스 스캔에 대해 각각 3건의 결과만 획득하고 인덱스 스캔을 중단한다. 즉, 각각의 인덱스 스캔에 대해서 LIMIT 최적화가 적용되는 것이다.

 

SELECT * FROM tbl WHERE a IN (2, 4, 5) AND b < ‘K’ ORDER BY b LIMIT 3;


ORDER BY절은 전체 결과에 대한 정렬을 의미하기 때문에 Key Range가 여러 개이면 각각의 인덱스 스캔 결과를 모아서 다시 정렬을 해야 한다. 하지만 인덱스 스캔의 결과로 정렬을 대체할 수 있는 경우에는 스캔 과정에서 바로 병합(merge)할 수 있다.  CUBRID는 이 과정을 In-Place Sorting 이라고 부른다.
그림 8을 보면서 자세한 설명을 하면, 먼저 첫 번째 range(a = 2 AND b < ‘K’)에 대한 스캔을 통해 3건의 OID를 확보한다. 그 다음 두 번째 range(a = 4 AND b < ‘K’)에 대한 스캔을 시도하는데, 이 range의 첫 번째 키인 (4, ‘DAA’)는 첫 번째 range의 마지막 스캔 키인 (2, ‘CCC’) 보다 b 컬럼의 값이 크기 때문에 바로 스캔을 중단한다. 마찬가지로 다음 세 번째 range인 a = 5 AND b < ‘K’에 대한 스캔에서도 두 번째 키를 읽은 후 바로 스캔을 중단한다. 이처럼 In-Place Sorting 기법은 인덱스 스캔 범위를 더욱 축소하고, 최종 결과에 대한 별도의 정렬을 수행하지 않기 때문에 성능 향상에 많은 도움을 준다.

 

 

 pic8.jpg
그림 8 In-Place Sorting 기법에 의해 최적화된 질의 처리 과정

 

요약 정리


인덱스가 좋다고 해서 인덱스를 많이 만드는 것이 능사가 아니다. 오히려 인덱스 관리 비용이 증가하고 INSERT, UPDATE, DELETE 성능 저하의 원인이 될 수 있다.
DB 튜닝의 핵심은 적절한 수의 인덱스를 생성하고 질의가 이 인덱스들을 활용할 수 있도록 질의를 최적화하는 것이다. 이를 위해서는 DBMS에 구현된 인덱스 구조와 다양한 활용 기법들을 이해하고, 질의 패턴과 사용 빈도, I/O 비용, 저장 공간에 대한 비용을 전체적으로 고려하여야 한다.

 


  1. No Image

    CUBRID에서 Java SP를 사용해서 양방향 암호화 함수 사용하기

    CUBRID에서 Java SP를 사용해서 양방향 암호화 함수 사용하기 CUBRID DBMS(이하 'CUBRID')는 단방향(MD5, SHA1, SHA2) 암호화 함수만 지원하고, 양방향 암호화 함수는 지원하지 않고 있습니다. 비밀번호와 같이 암호화한 값을 복호화해서 사용하지 않는 경우에는 단방향 암호화 함수를 사용할 수 있지만 개인정보와 같이 암호화가 필수이고, 복호화해서 사용이 필요한 경우에는 양방향 암호화 함수를 사용해야 합니다. 현재는 데이터베이스가 데이터를 받을 때부터 암호화 솔루션 업체에서 제공하는 API 방식을 사용해서 암호화한 데이터를 받게 하거나 외부 라이브러리를 사용하는 Java Stored Function/Procedure(이하 'Java SP')를 구현해서 데이터베이스가 평문 데이터를 받아서 암호화 하게 하고 있습니다. CUBRID는 Java SP를 지원하고 있어서 Java로 구현할 수만 있으면 새로운 기능을 만들어서 추가할 수 있는 장점이 있습니다. 그래서 양방향 암호화 함수도 암호화 솔루션 업체에서 제공하는 것처럼 CUBRID의 기능으로 추가해서 사용할 수 있는 것입니다. 'Java 양방향 암호화 함수 구현'에 대해서 검색해보면 이미 많은 분들이 Java 기본 라...
    Date2019.12.30 Category제품 여행 By주영진 Views1691 Votes0
    Read More
  2. 논리모델/물리모델을 다루는 eXERD가 CUBRID를 지원합니다.

    DB모델링툴 엑스이알디(eXERD)가 오픈소스 DBMS인 ‘큐브리드(CUBRID)’를 지원합니다. eXERD는 논리모델/물리모델 등을 다룰 수 있으며, 이클립스 기반의 DB모델링 도구로 개발자의 설계역량을 높이는데 초점을 맞춘 국산 솔루션입니다. 월 평균 3,000건 이상의 다운로드가 발생하고 있으며, 전 산업군에 걸쳐 그 사용 범위가 확산되고 있습니다. 그럼, 지금부터 eXERD에 대해서 설명 드리도록 하겠습니다. eXERD 다운로드 방법은 아래 URL에 접속하여 평가판 설치파일을 다운로드 받으면 됩니다. http://tomatosystem.co.kr/solution eXERD에는 많은 기능이 있으며, 그 중에서 CUBRID가 운영 되고 있는 환경을 고려하였습니다. 운영 중인 CUBRID DB를 기준으로 ERD를 자동으로 그려주는 “리버스 엔지니어링” 기능을 소개하겠습니다. 메뉴선택 : eXERD > 리버스 엔지니어링 메뉴를 선택합니다. 리버스 엔지니어링 위저드가 실행됩니다. 파일이름과 프로젝트명을 입력합니다. 접속하고자 하는 DB의 버젼을 확인하고, 대상DBMS 선택에서 CUBRID 9.0~9.3 또는 CUBRID 10.1을 선택합니다. 데이타베이스 연결정보를 입력하고, [연결테스트] 버튼을 클릭하여 ...
    Date2019.12.30 Category제품 여행 By권호일 Views3376 Votes0
    Read More
  3. No Image

    CUBRID를 사용하면서 하지 말아야 할 것 10가지

    오프라인 교육 안 받고 매뉴얼 안 보고 사용 "R-DBMS가 거기서 거기지", "DB많이 써 봐서 난 다 알아" 같은 R-DBMS이더라도 벤더사에 따라 그 Spec이나 syntax에서 차이가 발생하며, 사용하고자 하는 기능의 차이로 여러 이슈가 발생할 가능성이 있습니다. 이를 간과하고 개발하는 경우가 종종 발생하고 있습니다. (주)큐브리드에서 분기마다 온라인 교육을 온라인( http://www.cubrid.com/education )으로 신청받고 있으며, 매뉴얼도 제공하고( http://www.cubrid.org/documentation/manuals/) 있습니다. 차이점을 우선 인지하시고 운용이 되어야겠습니다. 잘못된 데이터 타입 선택 ​테이블 생성 시, 테이터 타입을 정하는 것은 무척 쉬워 보이나 데이터가 누적된 후에는 문제점을 발견해도 변경하기가 곤란할 때가 많습니다. 잘못된 테이터 타입은 성능과도 연관있으며, 모든 DBMS에 연관이 있습니다. CHAR VS VARCHAR : 고정길이와 가변길이이 차이로 공간낭비가 발생하며 컬럼 시 trim()같은 특정함수를 사용 할 필요가 발생할 수 있습니다. CHAR,VARCHAR VS DATE : 데이터 정합성이 깨어질 수 있습니다. VARCHAR VS NUMBER : 잘못된 데이터가 입력될 가능성이 있습니다. ...
    Date2019.12.27 Category제품 여행 By큐브리드_김주현 Views4092 Votes0
    Read More
  4. 와탭(whatap)을 이용한 CUBRID 모니터링

    와탭과 큐브리드의 협력으로 출시된 Whatap for CUBRID를 통하여 모니터링 하기! 회원가입 후 데모 버전 사용이 가능하며, 큐브리드 설치가 되어있는 환경에서 에이전트와 연결하여 간략한 모니터링까지 해보겠습니다. 제가 사용한 큐브리드 버전은 9.3.6.0002 linux 버전 이고, 와탭 에이전트도 큐브리드를 설치한 OS에 같이 설치하였습니다. (자바설치 필수) 프로젝트 생성 와탭 홈페이지에서 데이터베이스 모니터링을 선택 후 해당 화면에서 프로젝트 생성 버튼을 클릭합니다. 큐브리드를 선택하고 원하는 프로젝트명과 서버 지역 등을 입력하고 저장합니다. 에이전트 추가생성된 프로젝트를 선택하여 에이전트를 추가해줍니다. 1.​ 라이선스 발급 버튼을 선택하여 라이선스 키를 생성해줍니다. 2. DB 에이전트 다운로드 보이는 주소를 통하여 wget 방식으로 에이전트를 tar파일을 다운받습니다. (저는 DB가 설치된 서버의 다른 계정에 다운받았습니다.) 다운받은 tar 파일을 풀면 whatap 디렉터리가 생성됩니다. 3. 모니터링용 계정 생성 모니터링을 하기 위해선 DBA 나 DBA 권한이 있는 계정이어야 합니다. 모니터링용 계정을 따로 생성하여 모니터링을 해보겠습니다. > c...
    Date2019.12.26 Category제품 여행 By황영진 Views778 Votes0
    Read More
  5. 리소스해커로 CUBRID 매니저 아이콘 변경하기

    언제 부터인가 CUBRID 매니저를 설치하면 바탕화면 및 시스템 트레이 아이콘이 이클립스 아이콘으로 나온다. 일단 큐브리드 매니저를 다운 받고 설치해 보자. https://www.cubrid.org/downloads/os-select/64-bit/tools/manager 다운을 받고 설치를 하고나면 바탕화면에 바로가기 아이콘이 생긴다. 사용자 최접점 인터페이스로 사용되는 툴이 이클립스 아이콘으로 나오는 것이 항상 신경이 쓰였다. 패치가 되기전에라도 아이콘을 정상 사용하고 싶은 사용자들에게 리소스 해커라는 툴을 소개하면서 아이콘 변경 방법도 공유하고자 한다. 좌측은 최초 설치 시의 모습이고 우측은 리소스 해커를 통해서 아이콘을 변경한 후의 모습니다. 이제 리소스 해커를 구해보도록하자. 구글 검색하면 나오는 아무 버전이나 수정 가능하다. 필자는 VenusGirl님의 블로그에서 한글 버전에 가장 최근에 수정된 버전으로 수정을 했다. 설치 없이 압축만 풀면 바로 수행이 가능해서 아래의 버전으로 선택 했다. 동일하게 진행하고자 하시는 분은 아래의 링크에서 받으시면 됩니다. 링크: Resource Hacker KR 버전 5.1.7 - 리소스 수정 다운 받은 파일을 풀고 ResourceHacker.exe 파일을 실행하면 ...
    Date2019.12.16 Category제품 여행 By성진 Views1730 Votes1
    Read More
  6. SQLGate for CUBRID로 데이터베이스를 다뤄보자

    2019년 7월 30일, SQLGate for CUBRID 버전이 출시되었습니다. 아래 SQLGate 홈페이지에서 출시내용을 자세히 확인할 수 있습니다. https://support.sqlgate.com/hc/ko/articles/360033815393?utm_source=cubrid_com&utm_medium=main_slider&utm_campaign=cubrid_launch 지금부터 SQLGate for CUBRID로 CUBRID DB를 다뤄보고 활용해보겠습니다. 1. 설치 https://www.sqlgate.com/product/download 에 접속하여 SQLGate for CUBRID를 다운로드하고 실행하면 설치가 완료됩니다. 2. SQLGate for CUBRID 라이선스 CUBRID 또는 SQLGate 홈페이지에서 SQLGate for CUBRID 사용에 대한 라이선스를 확인할 수 있습니다. 라이선스 종류는 다음과 같으며 필요한 라이선스를 구입하여 사용하시기 바랍니다. - 기업용 라이선스 보기(https://www.sqlgate.com/pricing/perpetual) - 인디개발자 라이선스 보기(https://www.sqlgate.com/pricing/indieLicense) - 구독 서비스 보기(https://www.sqlgate.com/pricing/subscription) ※무료 버전을 다운로드 받으시면 14일 동안 전체 기능을 경험해 볼 수 있습니다. 3. SQLGate 실행하기 - 가입한 이메일 주소로 로그인 한 뒤 확인을 클...
    Date2019.12.10 Category제품 여행 By정훈 Views2449 Votes0
    Read More
  7. CUBRID Network Diagram (CUBRID Version 9.3, 10.1)

    CUBRID Network Diagram 큐브리드를 사용하다 보면 네트워크 연결 구성에 대해 궁금할 수 있습니다. 이런 궁금증에 대해 간단한 이미지와 설명으로 큐브리드 네트워크 연결 구성에 쉽게 다가 올 수 있도록 기술 하였습니다. 들어가기에 앞서 큐브리드 네트워크 연결 구성에 대해 이해하기에 OS 환경 및 CUBRID 버전에 따른 약간의 차이점이 있습니다. 아래의 2가지 기능 차이에 대해서 숙지 하시면 큐브리드 네트워크 다이어그램에 대해 쉽게 이해하실 수 있습니다. - Windows 큐브리드 버전에서는 SHARD Broker 기능과 HA 환경을 제공 하지 않습니다. (SINGLE 구성만 제공) - Linux 큐브리드 버전 9.3에서는 SHARD Broker기능을 제공 하지만 10.1버전에서는 SHARD Broker 기능을 제공 하지 않습니다. 큐브리드 네트워크 다이어그램 세부 정보 < Master / Slave / Replica Node > HA 환경의 데이터 베이스를 구성하는 서버 - cub_master : 실제 데이터 베이스 프로세스와 연결을 담당하는 프로세스 - cub_manger : CUBRID Manger 프로그램의 관리모드 사용을 위한 프로세스 < SINGLE > HA환경이 아닌 싱글로 운영 되는 데이터 베이스 서버 - cub_master : 실제 데이터 베이스 ...
    Date2019.11.02 Category제품 여행 By윤준수 Views1084 Votes1
    Read More
  8. Doxygen으로 소스코드 문서화 해보기

    오픈소스 프로젝트를 이용해서 개발을 해보신 분들은 소스코드를 문서화한 레퍼런스 문서(또는 개발자 매뉴얼)을 참고해서 개발해 본 경험이 있을 것 같습니다. 개발자를 위한 이러한 문서는 기본적으로 프로젝트 빌드 방법, 주요 아키텍쳐 설명 등의 내용들을 담기도 하고 소스코드에서 정의한 변수나 구조체와 함수 같은 것들이 소스 파일을 직접 열어서 찾아보지 않아도 보기 좋게 정리하거나 변수나 함수 간의 관계를 정리해서 보여주기도 합니다. 다음과 같은 프로젝트의 문서를 예시로 참고해 볼 수 있겠네요. CGAL : https://doc.cgal.org/4.2/CGAL.CGAL/html/index.html Eigen : http://eigen.tuxfamily.org/dox/ Xerces-C++ : http://xerces.apache.org/xerces-c/apiDocs-3/classes.html 공개 되어있는 코드를 한줄한줄 따라가보며 파악할 수도 있지만 프로젝트의 규모가 커지고, 코드의 복잡도가 증가할수록 개발자를 위한 문서는 중요해집니다. 왜냐하면 문서를 읽으면 소스코드를 훨씬 빠르게 파악할 수 있기 때문입니다. 이러한 문서 덕분에 다른 개발자가 조금 더 쉽게 내 프로젝트에 기여할 수 있게 된다면 내 프로젝트에 참여하고 기여해주는 사람들이 더 많아...
    Date2019.09.30 Category나머지... Byhgryoo Views11996 Votes0
    Read More
  9. No Image

    DB2, Informix, Sybase ASE, Postgres DBMS 데이터를 CUBRID로 이관하는 방안에 대하여...

    DBMS 보급과 관련하여 과거와는 달리 민간 및 공공기업에서 서비스 중요도 및 비용등을 고려하여 다양한 제품을 도입하여 사용하고 있다. 뿐만 아니라 시스템 사용연한 도래, 유지보수 비용절감, 클라우드 전환 및 차세대 시스템 도입을 통해서 기존 DBMS를 다른 DBMS로 변환하는 경우가 빈번하게 발생하고 있다. DBMS 변경으로 응용체계 전환 및 데이터 전환, 운영 및 사용자 기술전환등이 수행되는데 기술적 측면 및 비용적인 부분에서 예상보다 많은 리스크를 직면하게 되기도 한다. 성공과 실패는 면밀한 전환환경에 대한 분석 및 계획과 수행하는 기술자들의 자질에(기술 및 도전적 & 긍정적 마인드) 의해 결정된다. 이러한 여러 요소들 중에서 여기서 다루고자 하는 부분은 전환에 있어 기본이면서 중요한 데이터 전환에 대한 부분이다. 큐브리드는 국산을 제외한 외산 DBMS중에 민간 및 공공기간을 통틀어 점유율이 높다고 볼 수 있는 Oracle 및 MS-SQL, MySQL에 대해서 데이터 이관 툴을 제공하고 있다. 해당 제품명은 CMT(Cubrid Migration Toolkit)이며 Linux 및 Windows 버전을 기본으로 GUI 및 Terminal 방식을 지원하고 있다. 그 이외에도 비록 시장 점유율은...
    Date2019.07.15 Category제품 여행 By김창휘 Views1209 Votes0
    Read More
  10. CUBRID GRANT ALL TABLES

    CUBRID GRANT.... 큐브리드에서는 GRANT ... ON ALL TABLES 구문을 아쉽게도 제공 하지 않습니다. 현재는 수동으로 GRANT 구문을 작성하여, 사용하여야 합니다. "이러한 불편함을 자동으로 작성해주면 어떨까" 라는 생각으로 스크립트를 작성하였습니다. HOW to do GRANT ... ON ALL TABLES .....? $ sh cub_grant.sh -------------------------------------------------------------------------------------------------------- CUBRID DBMS, auto-generator for grant all tables usage : sh cub_grant.sh <dbname> <grantee user> <grantor user> <grantor user password> <option> <option> -view : grantee user all grant view -dml : default SELECT, DELETE, UPDATE, INSERT -ddl : default ALTER, INDEX, EXECUTE -all : ALL PRIVILEGES(dml+ddl) <file creation info> default path : . -dml : ./GRANT_DML.sql -ddl : ./GRANT_DDL.sql -all : ./GRANT_ALL.sql -------------------------------------------------------------------------------------------------------- 1. Linux 환경에서만 사용 가능합니다. 2. bash 스크립트로 작성 되었습니다. 3. CUBRID 엔...
    Date2019.06.25 Category제품 여행 By윤준수 Views1816 Votes0
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 16 Next
/ 16

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales