Background Image

FORUM

조회 수 296 추천 수 0 댓글 9
?

단축키

Prev이전 문서

Next다음 문서

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


58302A2A-C87C-4A17-8639-5E599F8937C2.jpeg* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
Window7 32bit, Linux 64bit 등
CUBRID Ver.
[cubrid_rel] 수행 결과 9.3.9.1502
CUBRID TOOL Ver.
[도움말]-[버전정보] 확인
응용 환경(API)
java, php, odbc 등 입력

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축

-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------첨부한 사진을 보면 NX_LOCK이 발생하고 있는데요. 실행 계획을 보면 영 엉뚱한 인덱스를 타고 있습니다. 해당 쿼리를 보면모두 DOCID = ? 컬럼을 pk 컬럼을 조건절로 사용하는데 3개 쿼리가 동일하게 DOCID가 없는 인덱스를 엑세스 패스로 잡고 있습니다. 힌트로 고정을 해야 하는 것인지, 통계수집을 다시 해야 하는 것인지 문의 드립니다. 총계수집이 필요하면 명령어도 부탁 드립니다.

  • ?
    Philip Park 2020.11.26 11:00
    어떤 상황에서 이 같은 현상이 발생할수 있는지 답변 부탁드립니다. 3개 테이블은 저희 시스템에서 데이터량이 제일 받은 테이블이고 수정/삭제도 많이 일어나는 테이블입니다. 그래서 현제 매일 락이 발생하고 있습니다.
  • ?
    정훈 2020.11.26 13:43
    NX_LOCK 과 테이블의 인덱스를 타는 거랑은 별개 입니다.

    NX_LOCK은 다음 경우에 인덱스 키에 잠금을 획득합니다.
    고유 키가 존재하는 행에 대해 UPDATE, DELETE 작업을 수행할 때 해당 작업이 영향을 주는 범위를 보호하기 위해 해당 범위 이전 키와 다음 키에 잠금을 획득한다.

    문제의 요인이 쿼리가 인덱스를 잘못타는 것 때문인지, NX_LOCK으로 인한 LOCK_TIMEOUT이 빈번히 발생하는 것이 문제인지 확인해보세요.
  • ?
    Philip Park 2020.11.26 14:08
    그 확인 방법을 어떻게 해야 하나요? 잘뭇된 인덱스를 스캔함으로써 락타입 시간이 길어지고 있어서 발생하는 것으로 보이는데 정상적인 인덱스를 타게 할려면 어떻게 해야 하나요? Pk컬럼을 찍어서 조회를 하는데 엉뚱한 인덱스를 타는게 정상은 아닌거 같은데요?
  • ?
    정훈 2020.11.26 14:13
    엉뚱한 인덱스를 보시는 해당 테이블의 스키마 정보와 수행하신 쿼리를 첨부해주세요.
    에러 로그에 보시면 lock time out으로 트랜잭션이 실패한 로그도 기록 됩니다.
  • ?
    Philip Park 2020.11.26 14:37
    테이블 하나의 스키마 올려 드립니다. 쿼리는 먼저 올려드린 첨부파일에서 확인 가능 하십니다.
  • ?
    허서진 2020.11.26 14:59

    올려주신 테이블 스키마와 lock 정보를 보면, ix_tlk_doc_path02,06 인덱스의 중복도가 높아 다수의 row에 lock이 발생하는 것으로 추정됩니다.
    인덱스 중복도를 낮추기 위해 해당 인덱스에 pk컬럼을 추가하여 중복도를 낮춰 보실 것을 권고드립니다.
    예시 : ix_tlk_doc_path02(objtype,reportdt,docid,pathorder)

    더 정확한 설명이 필요하신 경우에는 $CUBRID/log/server/db명_가장최신날짜.event 파일에 나와 있는 lock_timeout 에러로그 첨부 부탁드립니다.
    위에서 설명한 것과 같이 lock정보와 실행계획은 별개입니다.
    자세한 내용은 매뉴얼 참고 부탁드립니다.
    감사합니다.

  • ?
    Philip Park 2020.11.30 09:52
    02번 인덱스를 타면 안된다고 하니 그 인덱스에 pk컬럼을 추가하라는게 맞나요?? delete 절에는 docid만 들어왔는데 docid가 선행 컬럼인 pk, 05, 08 인덱스 중에 탔다면 어느 정도 이해가 가겠지만 docid 컬럼이 없는 02번 인덱스를 타는 상황이라 인덱스나 해당 테이블의 통계정보 수집할때 사용하는 명령어 좀 알려 주세요.
  • ?
    Philip Park 2020.11.30 11:16
    event 파일 일부 올려 드립니다. lock_timeout 많이 보이는데 전체 파일 없어도 확인 가능 한가요? 인터넷이 안되어서 휴대폰으로 올립니다.
  • ?
    주영진 2020.11.30 12:30
    안녕하세요.

    0C77BC6A-0317-48E7-B103-927A292A32D4.jpeg 파일에서 lock 항목에 index=ix_tlk_doc_path_02 라고 나오는 부분은
    delete 쿼리 실행 시 where 조건에 해당하는 row를 찾기 위해 ix_tlk_doc_path_02 인덱스를 사용했다는 내용이 아닙니다.
    그렇기 때문에 where 조건에 해당하는 row를 찾기 위해 docid가 선행 컬럼인 인덱스를 사용하는 것과 무관합니다.
    그리고 통계정보를 다시 수집하는 것과도 무관합니다.

    이 현상은 delete 쿼리 실행 후 commit 하기 전까지
    ix_tlk_doc_path_02 인덱스에서 영향을 받는 page들에 lock을 잡는데
    이 lock을 기다리다가 lock timeout으로 에러가 발생하는 현상입니다.

    --------------------------------------------------------------------------------
    CUBRID 9.x 버전에서는 인덱스 사용 또는 수정 시 lock을 잡고 있습니다.
    CUBRID 10.x 버전에서는 인덱스 사용 또는 수정 시 lock을 잡지 않도록 개선됐습니다.
    --------------------------------------------------------------------------------

    첨부해주신 event 로그를 보고 추가 설명드립니다.

    tlk_doc_appr_recb 테이블에 delete 쿼리를 포함하고 있는 트랜잭션이 실행 중일 때
    where 조건에 해당하는 row가 변경되므로 인해 영향을 받는 ix_tlk_doc_path_02 인덱스의 page들에 lock을 잡습니다.
    * 참고1: ix_tlk_doc_path_02 인덱스 외에 다른 인덱스들도 lock을 잡습니다.
    * 참고2: delete 쿼리가 다른 쿼리들과 트랜잭션으로 묶여 있다면, delete 쿼리 실행이 종료되더라도 트랜잭션 전체가 종료될 때까지 ix_tlk_doc_path_02 인덱스에 잡은 lock을 풀어주지 않습니다.

    ix_tlk_doc_path_02 인덱스는 objtype, reportdt 컬럼으로 구성하고 있어서
    docid가 다르더라도 같은 objtype, reportdt 컬럼값을 가지는 row들은
    영향을 받는 인덱스 페이지에 포함되기 때문에 ix_tlk_doc_path_02 인덱스에 잡은 lock을 풀어주기 전까지 변경이 불가능합니다.

    이후에 tlk_doc_appr_recb 테이블에 update 쿼리가 실행됐는데
    앞서 delete 했던 row와 docid는 다르지만 같은 objtype, reportdt 컬럼값을 가지는 row들을 변경하려고 하면서
    해당하는 ix_tlk_doc_path_02 인덱스 페이지들에 lock을 잡기 위해 기다리다가 lock timeout으로 에러가 발생한 것으로 보입니다.

    이 현상을 개선하기 위해서는 두 가지 방법이 있습니다.

    1. delete 쿼리가 다른 쿼리들과 트랜잭션으로 묶여 있다면, 트랜잭션을 분리해서 delete 쿼리 실행 후 바로 commit 하도록 하는 방법
    * 트랜잭션이 끝날 때까지 기다리면, delete 쿼리 실행이 종료되더라도 트랜잭션 전체가 종료될 때까지 인덱스에 잡은 lock을 풀어주지 않기 때문에 게시글과 같은 현상이 발생합니다.

    2. 앞선 comment에서 언급하고 있는 ix_tlk_doc_path_02 인덱스의 중복도를 낮추는 방법
    * ix_tlk_doc_path_02 인덱스에 중복도가 낮은 컬럼(docid)을 추가하면 인덱스 전체의 중복도를 낮출 수 있습니다.
    * 이렇게 하면 delete 쿼리가 ix_tlk_doc_path_02 인덱스에 lock을 잡는 page가 줄어듭니다.
    * ix_tlk_doc_path_02 인덱스에 docid 컬럼을 추가한 경우 objtype, reportdt, docid 등 3개 컬럼 값이 같은 page들만 lock을 잡기 때문에
    * delete 했던 row와 docid가 다른 row들을 변경하는 update 쿼리를 실행하면 lock을 잡는 page가 겹지치기 않기 때문에 lock timeout 에러가 발생하지 않습니다.

    대부분의 설명은 앞선 comment에서 다 해주신 것 같으나 내용 정리가 필요할 것 같아서 추가 comment를 작성했습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4246
3976 schema 파일 loaddb - 스키마 정보 중복오류 문의 4 daay 2024.03.21 53
3975 object to string 4 네오랜덤 2024.03.20 44
3974 mysql로 DB연동 문의 2 연동테스트용 2024.03.20 39
3973 특정DB만 접근 시간이 현저하게 오래 걸리는 문제 1 file 그로구 2024.03.20 33
3972 jdbc 연동시의 charset 강제 변경 방법 1 file gwak 2024.03.14 34
3971 도커로 HA환경 구성 테스트중 hb start.. 1 wodud0170 2024.03.12 43
3970 이중화 관련 문의드립니다. 1 adqwdqwd123412 2024.03.12 42
3969 큐브리드 마스터 복제 관련 문의 드립니다. 2 이지혜 2024.03.11 40
3968 큐브리드 다운로드 에러 1 file 나래아빠 2024.03.08 63
3967 CUBRID Migration Toolkit "orai18n.jar" 추가 방법 1 가을이아빠 2024.03.07 43
3966 CUBRID 에러 로그 관련 확인 요청 2 jnj570244 2024.03.07 76
3965 DB링크로 조회시 문자타입이 조회되지 않고 있습니다. 2 file 원샷 2024.03.06 68
3964 다른 사용자 계정에서 csql로 localhost 접근 문제 4 가을이아빠 2024.03.05 67
3963 [성능이슈] 큐브리드 함수 사용으로 인한 성능이슈 3 레고 2024.03.04 94
3962 CUBRID 11.2 rpm 설치시 cubrid 계정 패스워드 2 가을이아빠 2024.03.04 46
3961 Cubrid JDBC 버전에 따라 출력되는 결과가 다릅니다. 1 엘L 2024.02.28 73
3960 select 질의문 문의 2 태리 2024.02.26 102
3959 cubrid statdump 기술 문의드립니다. 5 secret 이건우 2024.02.19 11
3958 날짜 형식 변환에 대해서 궁금해서 올립니다. 1 김용용 2024.02.14 46
3957 컬럼의 Enum DataType 가져오는것 문의 3 엘L 2024.01.30 65
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 199 Next
/ 199

Contact Cubrid

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