Background Image

FORUM

조회 수 531 추천 수 0 댓글 13
?

단축키

Prev이전 문서

Next다음 문서

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


* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.

OS
Window Server 2012 R2 64bit
CUBRID Ver.
11.2
CUBRID TOOL Ver.
CUBRID Manager 10.2.0.0001  (64bit)
응용 환경(API)
jdbc 11.1.0.0027


* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.

 

에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------

 

오라클 DB를 마이그레이션 했는데 동일한 쿼리가 오라클에 비해 10배 이상 느립니다.

CUBRID 설치시 특별한 설정을 한것은 없습니다.

 

  • ?
    박세훈 2022.08.03 15:18
    질의와 실행계획을 첨부해주셔야 도움을 드릴 수 있겠습니다.
    https://www.cubrid.org/manual/ko/11.2/sql/tuning.html#viewing-query-plan
  • ?

    관련 부분 첨부해 드립니다.

     

    화면 캡처 2022-08-03 144030.png

     

    오라클에서 실행결과입니다.

    화면 캡처 2022-08-03 144817.png

     

     

     

  • ?
    박세훈 2022.08.03 17:07
    첨부해주신 실행계획을 확인해보면 20만 건 테이블의 조인 질의로 보입니다. 일반적인 상황보다는 수행시간이 오래 걸리는 것으로 판단됩니다.
    우선 통계정보를 갱신하고 실행계획이 동일한지 확인해보세요. 두 테이블의 데이터 수가 20만 건이 맞는지 확인해주세요.
    그리고 trace 정보를 첨부해주세요.
    https://www.cubrid.org/manual/ko/11.2/sql/tuning.html#query-profiling
  • ?
    tree1891 2022.08.03 19:11

    두 테이블 데이터는 동일합니다.

    trace 정보 첨부해 드립니다.

     

    Trace Statistics:
      SELECT (time: 5854, fetch: 678929, ioread: 0)
        SCAN (table: dba.tb_wd_docperson), (heap time: 2257, fetch: 231704, ioread: 0, readrows: 224676, rows: 223612)
          SCAN (index: dba.tb_wm_docperson.pk_tb_wm_docperson_hnn_info_bs_sn), (btree time: 2764, fetch: 447224, ioread: 0, readkeys: 223610, filteredkeys: 0, rows: 223610, covered: true)

  • ?
    박세훈 2022.08.04 15:54

    첨부해주신 trace 정보를 보면 실행계획 문제는 아닌 것으로 보입니다.
    CUBRID가 설치된 서버의 속도를 확인해보시는 게 좋을 것 같습니다. CPU 사용률 혹은 리눅스 dd 명령어를 통해 disk 속도를 확인해보세요.

     

    CUBRID 메모리 관련 시스템 파라미터를 변경하고 재시작해 보세요. data_buffer_size는 일반적으로 가용 메모리의 1/3을 권고드립니다.
    https://www.cubrid.org/manual/ko/11.2/admin/config.html#memory-parameters

  • ?
    tree1891 2022.08.04 17:54

    오라클과 동일 서버를 사용하고 있습니다.

  • ?
    tree1891 2022.08.10 13:04
    메모리 설정 변경했는데 개선이 없습니다.
  • ?
    오명환 2022.08.10 15:58
    설정값을 변경하신 후 DB 서버를 재 시작하셔야 설정값이 반영됩니다.

    질의와 실행계획을 확인해보니, outer table (tb_wd_docperson)를 filter 조건들이 NVL() 함수를 사용하고 있어 조건 컬럼들의 index가 생성되어 있어도 index scan이 아닌 full scan이 됩니다. 조건절을 index scan 할 수 있게 수정해보세요. (예를 들어 조건 컬럼에 NULL이 안들어가게 default 값을 'N'으로 설정하면 NVL()를 제거할 수 있습니다.)
  • ?
    tree1891 2022.08.10 16:21

    where 절에 있는 필드는 enum 형(Y, N)인데 인덱싱하는 의의가 있을까요?

    where 절을 삭제해도 5s 정도 걸립니다.

  • ?
    오명환 2022.08.11 09:06
    질의 수행시 4개의 조건 컬럼이 'N' 인경우의 데이터량에 따라 다릅니다.
    전체 데이터량의 1/2만 되어도 index scan이 full scan 보다 좋을 것 같네요. 특히 많은 사용자가 동시에 해당 질의를 자주 사용하는 경우에는 고려해보는 것이 좋습니다.
    (자주 사용하지 않는 질의면 굳이 index를 생성하지 않아도 될 듯 합니다.)

    조건 컬럼들이 enum type으로 'Y'와 'N' 값만 있다면 검색 속도를 높이기 위해 index 생성시 중복도가 높아져서 DML 성능 저하가 발생할 수 있습니다. 마지막 컬럼에 중복도를 낮출 수 있는 pk 컬럼과 같은 unique 컬럼 또는 중복도가 낳은 컬럼을 함께 넣어주세요.
    create index idx1 on tb_wd_docperson (dup_yn, cover_yn, doc_yn, err_yn, pk-column);

    참고로 조건 검색시 != 'Y' 보다는 = 'N' 로 직관적으로 표현하는 것이 낫을 듯 합니다.
    where dpd.dup_yn = 'N'
    and dpd.cover_yn = 'N'
    and dpd.doc_yn = 'N'
    and dpd.err_yn = 'N'
  • ?

    알려주신대로 인덱스 수정해 보았는데 개선이 없습니다.
    where절이 없어도 4s 정도 걸리는것은 어떻게 설명할수 있을까요?
    큐브리드 자체의 문제가 아니라 쿼리 튜닝으로 해결될수 있는 문제인지요...

    화면 캡처 2022-08-12 162829.png

     

  • ?
    오명환 2022.08.16 11:32
    index 생성 후 질의와 실행계획을 첨부해주시고, 해당 count(*) 질의 결과 값도 알려주세요.
    CUBRID의 join 방법은 기본적으로 NL (nested loop)을 지원하게 되어 있고, merge join은 hint를 통해 수행할 수 있게 되어 있습니다.
    plan과 count의 결과를 보고 추가적인 가이드를 해 드리도록 하겠습니다.

    질의와 관련 스키마와 인덱스 정보를 첨부해주실 수 있으면 가이드 드리는데 도움이 됩니다.
  • ?
    tree1891 2022.08.18 20:56
    where 절이 없는 경우에도 시간이 걸리는 문제를 설명해 주셨으면 합니다.
    join에 사용된 필드는 인덱스 처리가 되어 있습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 110
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4473
3820 테이블스페이스 1 ozro 2022.06.22 295
3819 테이블생성 494 실행오류 문의 1 뺀돌스 2019.03.25 1277
3818 테이블별 row 개수를 조회하는 쿼리 6 cncn 2023.10.18 111
3817 테이블목록과 필드목록을 조회하는 방법 1 박경채 2016.11.21 22092
3816 테이블명을 한글로 할 수는 없나요? 3 유니콘 2010.02.22 13834
3815 테이블명 대문자 문의드립니다. 1 jechoi 2019.07.09 621
3814 테이블당 컬럼 수 조회하는 SQL문 ? 1 ohgeumjin 2020.05.27 1224
3813 테이블단위로 이관 3 secret 이호영 2016.01.29 14
3812 테이블간 relationship 구현 어떻게하나요? 1 thiago 2012.10.11 5779
3811 테이블/컬럼명 자동완성 설정문의 5 file dfdfdd 2023.02.10 205
3810 테이블 한글명, 컬럼 한글명을 입력해주는 신텍스는 없나요?? 2 덴드로비움 2017.08.16 1065
3809 테이블 필드명이 value 일경우 어떻게 처리해야하나요 1 건빵 2010.10.08 7295
3808 테이블 필드 추가 후 위치변경 하기 2 건빵 2010.11.29 10222
3807 테이블 파티션나눈후 조회시 에러가 발생합니다. 2 연습용 2021.11.25 186
3806 테이블 파티션 추가 문의 1 초보 2010.04.09 10470
3805 테이블 파티션 문의 4 초보 2010.04.09 10186
3804 테이블 파티션 관련 문의 1 전산 2013.04.30 7594
3803 테이블 파티션 -> 일반 테이블 변경 문의 4 초보 2010.04.09 10623
3802 테이블 파티셔닝은 1 홍서기 2009.03.07 15037
3801 테이블 특정문자 검색 SQL문 1 ohgeumjin 2020.06.03 245
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 200 Next
/ 200

Contact Cubrid

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