Background Image

FORUM

조회 수 524 추천 수 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
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4440
3845 큐브리드 매니저 접속 이 안됩니다. 확인 요청 드립니다. 1 뿡이 2023.04.28 127
3844 Fk값 가져오기 2 file 네오랜덤 2023.04.24 165
3843 서버 메모리 교체 및 ha 상 데이터 삭제 절차 1 레피엘 2023.04.20 112
3842 java stored procedure 에 loadjava 로 jar 파일 로드 시 java.lang.ClassNotFoundException 에러 문의 3 개미가불쌍해 2023.04.18 146
3841 Cubrid stored procedure 스케쥴 등록 형식 2 Roy 2023.04.17 112
3840 암호화 함수 MDB_ENC 질문입니다 1 BE-DEV 2023.04.17 82
3839 auto_increment 추가 방법 문의 1 부패방지운영팀 2023.04.14 262
3838 CUBRID 사용자 계정 생성 관련 문의 1 몽키스패너 2023.04.14 128
3837 order by 이후 rownum이 의도와 다르게 찍힙니다. 2 바보똥개 2023.04.14 142
3836 백업 및 복구 시 cubrid 버전 간 호환 문의 1 플레이어블 2023.04.13 71
3835 centos8에서 쉘스크립트 실행시 csql: command not found 오류 발생 6 kjn4345 2023.04.13 177
3834 큐브리드 timestamp 오류 문의 5 jjun7204 2023.04.12 151
3833 Cubrid DB 서버 swap memory 사용률 관련 질의 1 오라클민 2023.04.12 221
3832 Mac OS 큐브리드 매니저 실행이 안 됩니다. 2 아데산야라이트훅 2023.04.07 146
3831 blob select 1 네오랜덤 2023.04.05 137
3830 dba권한 상속 1 네오랜덤 2023.04.05 84
3829 mac os m1 실행시 무응답 실행안됩니다. 6 시나몬빵 2023.04.04 152
3828 함수/프로시져 구동시 필요한 java버젼 1 네오랜덤 2023.03.31 120
3827 큐브리드 설치 도중 취소한 후, 재설치가 불가능합니다. 5 복괴 2023.03.28 154
3826 where in () 서브쿼리 관련 문의입니다 1 제리리 2023.03.27 114
Board Pagination Prev 1 ... 3 4 5 6 7 8 9 10 11 12 ... 200 Next
/ 200

Contact Cubrid

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