• 맑음동두천 12.8℃
  • 구름많음강릉 15.8℃
  • 맑음서울 15.9℃
  • 구름많음대전 16.0℃
  • 흐림대구 17.5℃
  • 흐림울산 15.6℃
  • 흐림광주 16.2℃
  • 흐림부산 16.3℃
  • 구름많음고창 14.9℃
  • 흐림제주 17.7℃
  • 맑음강화 13.2℃
  • 구름많음보은 13.6℃
  • 구름많음금산 14.3℃
  • 흐림강진군 15.4℃
  • 흐림경주시 16.4℃
  • 흐림거제 16.0℃
기상청 제공

CUBRID에서 제약조건(PK,FK,UNIQUE),index 설정 시 주의 사항

출처 : http://blog.naver.com/cubebridge?Redirect=Log&logNo=20096666579


변별력이 떨어지는 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를 설정하는 것을 지양하고 우회안이나 차선책을 찾는 것이 필요합니다