조회 수 19760 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
변별력이 떨어지는 index는 insert의 성능을 크게 저하시킵니다.
변별력이 떨어지는 index란? index의 분포가 좋지 않은 것으로 칼럼의 값이 하나의 값으로 몰려있거나 적은 수의 값이 많은 량의 데이터를 차지하는 경우입니다.
 
테스트현황:
500만건의 데이터를 변별력이 없는 index가 설정되어 있는 경우와 변별이 있는 index가 설정되어 있는 경우로 나줘 TPS와 QPS를 비교한 결과를 바탕으로 설명합니다.
 
측정수단:
cubrid broker status -b로 TPS,QPS를 확인합니다.
 
테이블 상태:
1. 테이블에 index 3개가 설정되어 있습니다.
2. PK, UNIQUE, FK 키가 있으며, FK가 참조하고 있는 테이블은 단 하나의 값('0')을 가지고 있습니다.
3. insert문이 수행 될수록 FK칼럼에 값은 계속적으로 '0'이 입력되도록 되어있습니다.
 
변별력 없는 FK가 있는 상태로 진행(FK는 index이다.)
테스트 시작:
JDBC를 이용하여, insert문 데이터를 500만건이 입력되도록 설정합니다.
 
초기(REQ 319442)
NAME PID PORT AS JQ REQ TPS QPS LONG-T LONG-Q ERR-Q
=========================================================================
* broker1 13487 33000 50 0 319442 2004 4009 0/60.0 0/60.0 0
* broker1 13487 33000 50 0 321448 2005 3990 0/60.0 0/60.0 0
...
시작 후 중반(REQ 2438861)
NAME PID PORT AS JQ REQ TPS QPS LONG-T LONG-Q ERR-Q
=========================================================================
* broker1 13487 33000 49 0 2438861 619 1237 0/60.0 0/60.0 0
* broker1 13487 33000 49 0 2439473 612 1224 0/60.0 0/60.0 0
...
위의 결과에 따르면 200만건 데이터 입력으로 인하여 최초의 TPS,QPS가 약 1/3수준으로 감소됩니다.
 
FK제거 후 테스트 진행
초기(REQ 97981)
NAME PID PORT AS JQ REQ TPS QPS LONG-T LONG-Q ERR-Q
=========================================================================
* broker1 14106 33000 50 0 97981 1643 3301 0/60.0 0/60.0 0
* broker1 14106 33000 50 0 100001 2018 4046 0/60.0 0/60.0 0
...
 
시작 후 중반(REQ 2604250)
NAME PID PORT AS JQ REQ TPS QPS LONG-T LONG-Q ERR-Q
=========================================================================
* broker1 14106 33000 50 0 2604250 1539 3064 0/60.0 0/60.0 0
* broker1 14106 33000 50 0 2605882 1629 3292 0/60.0 0/60.0 0
...
 
변별력이 떨어지는 FK삭제 후 테스트 결과 TPS, QPS의 미미한 감소는 있으나 큰 차이가 없는 것으로 확인됩니다.
FK도 index로 등록이 되므로 변별력이 떨어지는 FK의 경우 insert성능에 상당한 영향을 주는 것으로 파악됩니다.
따라서, DB생성 시 FK에 해당 하는 값이 변별력이 높지 않다면, FK를 설정하는 것을 지양하고 우회안이나 차선책을 찾는 것이 필요합니다.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
36 응용개발 CUBRID에서 euc-kr의 한글 데이터를 utf-8의 한글 데이터로 변경 시 주의할 점 cubebridge 2010.04.01 23492
35 응용개발 패키지 형태로 생성된 JAVA class를 JAVA SP에서 사용하기 손승일 2010.02.26 19409
34 응용개발 CUBRID2008 Java Stored Procedure 등록 방법 cubebridge 2010.02.24 20686
33 응용개발 php에서 serialize/unserialize 사용 시 주의할 점 시난 2009.12.29 32879
32 응용개발 CUBRID AUTO_INCREMENT 컬럼 MySQL LAST_INSERT_ID() 대체 방법 손승일 2009.12.22 34326
31 응용개발 CUBRID의 날짜형 타입을 java의 날짜형 타입에 할당할 때의 값 비교. file seongjoon 2009.12.16 21280
30 응용개발 CUBRID에서 systimestamp, sysdatetime default값에 대한 정의 cubebridge 2009.12.16 29252
29 응용개발 JAVA SP를 통해 다른 데이터베이스 연결하는 경우 잊지 말자. 손승일 2009.12.16 18749
28 응용개발 CUBRID odbc 드라이버 설정방법. file seongjoon 2009.12.10 21272
27 응용개발 PHP에서 Prepared statement 사용시 NULL 값을 바인딩 하는 방법 1 Prototype 2009.11.27 20557
26 응용개발 용량이 큰 데이터를 질의로 저장하는 방법 남재우 2009.11.26 13058
25 응용개발 윈도우 환경에서 PHP 모듈 로드를 못 할 경우 해결법 3 Prototype 2009.11.26 26008
» 응용개발 CUBRID에서 제약조건(PK,FK,UNIQUE),index 설정 시 주의 사항 cubebridge 2009.11.26 19760
23 응용개발 MySQL의 Blob타입을 CUBRID로 변환하기 cubebridge 2009.11.18 19640
22 응용개발 CUBRID의 Statement pooling기능 cubebridge 2009.11.06 17828
21 응용개발 그루비로 큐브리드 함수(or 프로시저) 만들기 by 행복개발자(cyberuls) 시난 2009.07.14 19606
20 응용개발 JDBC 커넥션 스트링에 UTF-8 명시하는법 Prototype 2009.07.03 19933
19 응용개발 weblogic 8.1 에 CUBRID Connection Pool, DataSource 설정 방법 file 웁쓰 2009.07.01 67347
18 응용개발 JDBC 사용시 SQL 로깅 - p6spy 사용 1 웁쓰 2009.07.01 37203
17 응용개발 PHP 프로그램을 작성할때 주의할 점 Prototype 2009.07.01 14670
Board Pagination Prev 1 2 3 Next
/ 3

Contact Cubrid

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

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

나눔고딕 사이트로 가기

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5