Background Image

FORUM

ysh
조회 수 216 추천 수 0 댓글 9
?

단축키

Prev이전 문서

Next다음 문서

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


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

OS
Window7 32bit, Linux 64bit 등
CUBRID Ver.
[cubrid_rel] 수행 결과
CUBRID TOOL Ver.
[도움말]-[버전정보] 확인
응용 환경(API)
java, php, odbc 등 입력


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

 

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


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

 

데이터가 한두개 밖에 들어있지 않는 테이블의 조회 쿼리가 계속 BUSY 상태로 남아 있어 CPU에 과부하가 걸리는 문제에 대한 해결방법이 궁금합니다

 

파일 첨부에서 BUSY로 표시되어있는 부분을 확인 해보았을때, 간단한 쿼리들이었습니다

 

BUSY 상태를 현재는 killtran명령어를 통해 수동으로 종료시켰는데, 앞으로 수동으로 종료시키지 않고, 간단한 쿼리에 BUSY가 걸리는 문제를 어떻게 해결할수 있는지 여쭤보고 싶습니다

 

+ 그리고 추가적으로, BUSY 상태 하나를 끄면 CLOSE_WAIT 상태인 것들 중에 하나가 또 BUSY 상태로 바뀌고, 이게 계속 반복되는데 BUSY 상태인 것만 일괄적으로 끌 수 있는 명령어가 있는지와 이렇게 되는 원인도 궁금합니다

 

+ index 사용해서 cubrid killtran -i 31,32,33,34,35,36,37,38,39,40,41,42,43,44,45 <DB명> 이런식으로 다 꺼봤는데, 다끄고 나서도 자꾸 큐브리드 매니저에서 BUSY 상태인게 확인됩니다...어떻게 해야하나요?

  • ?
    정훈 2021.03.17 13:40
    보내주신 첨부파일에 보면, CAS 상태가 Close_wait로 보입니다.
    해당 상태는 driver와 연결을 맺은 상태이며, connection을 종료하기를 기다리는 상태입니다.
    DBCP 사용 시 위 상태로 유지되므로 정상이라고 보셔도 됩니다.

    사진에는 BUSY 상태가 2개로 보입니다.
    문제되는 시점에 BUSY가 많고, CPU 점유율이 높다면, 다음과 같이 전체적인 DB서버 점검이 필요해보입니다.
    DB서버에서 접속하여 확인해보세요.

    1. DB space 사용량
    $>cubrid spacedb [db_name]
    temp volume, temp temp volume 사용량이 증가하는 지 확인.

    2. 해당 시간의 Slow query 발췌
    $>cd $CUBRID/log/broker/sql_log
    $>broker_log_top -F "시작시간" -T "종료시간" broker_name_*.sql.*

    3. CPU 점유 프로세스 확인
    4. 메모리 확인(swap)
    5. Disk I/O 부하 확인
  • ?

    1. DB space 사용량

    cubrid spacedb [db_name] 를 해보았을때 사용량이 높은건 안보이는듯 한데... 초보 개발자라 제대로 확인한건지는 모르겠습니다 ㅠㅠ

    spacedb1.jpg

     

    2. 해당 시간의 Slow query 발췌

    암호화폐 거래소에서 실시간으로 데이터를 받아와서 테이블에 insert하고, 그 테이블을 select하는 쿼리가 말씀하신 명령어를 쳐보니 로그들 속에 있던데 그러면 이게 Slow query 인건가요...?

    sql_log1.jpg

     

    sql_log2.jpg

     

    3. CPU 점유 프로세스 확인

    파일에 첨부하였는데, cub_server가 혼자 압도적으로 높은 점유율을 갖고 있습니다

    cpu.jpg

     

    4. 메모리 확인(swap)

    메모리.jpg

     

    스왑.jpg

     

    네이버 클라우드 모니터링 화면입니다

     

    5. Disk I/O 부하 확인

     

    디스크.jpg

     

    * CPU 사용량 (참고사항)

    CPU사용량 참고드립니다 ㅠㅠ

     

    CPU.png

     

     

  • ?
    오명환 2021.03.17 13:48
    올려주신 질의의 질의 실행 계획을 봐야 좀 더 정확한데,
    테이블의 heap size가 매우 큰 상태에서 해당 질의가 테이블 full scan을 하는 질의이여서 heap 다 읽는 것 같습니다.
    해당 질의 의 질의 실행 계획 정보를 올려주시면 좋겠네요.

    위와 같은 경우라면 index(PK index 포함) scan 형태로 질의를 변경하거나 compactdb를 통해 heap size를 줄여야 할 것 같습니다.
  • ?
    ysh 2021.03.17 15:36

    질의 실행계획 입니다. 윗 댓글에서 broker_log_top -F "시작시간" -T "종료시간" broker_name_*.sql.*의 시작시간과 종료시간을 CPU점유율이 급등한 시점으로 설정해서 가져온 쿼리의 질의실행계획입니다. (큐브리드 매니저에서 이 질의를 실행하면 거의 즉각적으로 결과가 나옵니다...)

    Join graph segments (f indicates final):
    seg[0]: [0]
    seg[1]: market[0] (f)
    seg[2]: trade_amount[0] (f)
    seg[3]: trade_datetime[0] (f)
    seg[4]: exchange[0]
    seg[5]: ask_bid[0]
    Join graph nodes:
    node[0]: trade_volume trade_volume(254609/1909) (sargs 0 1 2 3) (loc 0)
    Join graph terms:
    term[0]: to_datetime(trade_volume.trade_datetime)>= cast( to_char( SYS_DATETIME , 'YYYY-MM-DD')|| cast(' 00:00:00' as varchar) as datetime) (sel 0.1) (rank 5) (sarg term) (not-join eligible) (loc 0)
    term[1]: trade_volume.exchange='코인원' (sel 0.001) (sarg term) (not-join eligible) (loc 0)
    term[2]: trade_volume.ask_bid='BID' (sel 0.001) (sarg term) (not-join eligible) (loc 0)
    term[3]: trade_volume.market='orc' (sel 0.001) (sarg term) (not-join eligible) (loc 0)

    Query plan:

    temp(distinct)
    subplan: temp(group by)
    subplan: sscan
    class: trade_volume node[0]
    sargs: term[0] AND term[1] AND term[2] AND term[3]
    cost: 2546 card 1
    sort: 1 asc
    cost: 2552 card 1
    cost: 2558 card 1

    Query stmt:

    (select distinct trade_volume.market, nvl(sum( cast(trade_volume.trade_amount as double)), 0), trade_volume.trade_datetime from trade_volume trade_volume where to_datetime(trade_volume.trade_datetime)>= cast( to_char( SYS_DATETIME , 'YYYY-MM-DD')|| cast(' 00:00:00' as varchar) as datetime) and trade_volume.market= ?:0 and trade_volume.exchange= ?:1 and trade_volume.ask_bid= ?:2 group by trade_volume.market)

    Join graph segments (f indicates final):
    seg[0]: [0]
    seg[1]: market[0] (f)
    seg[2]: trade_amount[0] (f)
    seg[3]: trade_datetime[0] (f)
    seg[4]: exchange[0]
    seg[5]: ask_bid[0]
    Join graph nodes:
    node[0]: trade_volume trade_volume(254609/1909) (sargs 0 1 2 3) (loc 0)
    Join graph terms:
    term[0]: to_datetime(trade_volume.trade_datetime)>= cast( to_char( SYS_DATETIME , 'YYYY-MM-DD')|| cast(' 00:00:00' as varchar) as datetime) (sel 0.1) (rank 5) (sarg term) (not-join eligible) (loc 0)
    term[1]: trade_volume.exchange='코인원' (sel 0.001) (sarg term) (not-join eligible) (loc 0)
    term[2]: trade_volume.ask_bid='ASK' (sel 0.001) (sarg term) (not-join eligible) (loc 0)
    term[3]: trade_volume.market='orc' (sel 0.001) (sarg term) (not-join eligible) (loc 0)

    Query plan:

    temp(distinct)
    subplan: temp(group by)
    subplan: sscan
    class: trade_volume node[0]
    sargs: term[0] AND term[1] AND term[2] AND term[3]
    cost: 2546 card 1
    sort: 1 asc
    cost: 2552 card 1
    cost: 2558 card 1

    Query stmt:

    (select distinct trade_volume.market, nvl(sum( cast(trade_volume.trade_amount as double)), 0), trade_volume.trade_datetime from trade_volume trade_volume where to_datetime(trade_volume.trade_datetime)>= cast( to_char( SYS_DATETIME , 'YYYY-MM-DD')|| cast(' 00:00:00' as varchar) as datetime) and trade_volume.market= ?:3 and trade_volume.exchange= ?:4 and trade_volume.ask_bid= ?:5 group by trade_volume.market)

    Join graph segments (f indicates final):
    seg[0]: market[0] (f)
    seg[1]: trade_amount[0] (f)
    seg[2]: trade_datetime[0] (f)
    seg[3]: market[1]
    seg[4]: trade_amount[1] (f)
    seg[5]: trade_datetime[1] (f)
    Join graph nodes:
    node[0]: bid(0/1) (loc 0)
    node[1]: ask(0/1) (outer-dep-set 0) (loc 1)
    Join graph equivalence classes:
    eqclass[0]: market[0] market[1]
    Join graph edges:
    term[0]: bid.market=ask.market (sel 0.001) (join term) (mergeable) (left-join) (loc 1)

    Query plan:

    temp(group by)
    subplan: nl-join (left outer join)
    edge: term[0]
    outer: sscan
    class: bid node[0]
    cost: 1 card 0
    inner: sscan
    class: ask node[1]
    sargs: term[0]
    cost: 1 card 0
    cost: 2 card 0
    sort: 1 asc
    cost: 8 card 0

    Query stmt:

    select bid.market, case when nvl(ask.trade_amount, 0)=0 then cast(0 as double) else bid.trade_amount/ask.trade_amount* cast(100 as double) end, nvl(bid.trade_datetime, ask.trade_datetime) from (select distinct trade_volume.market, nvl(sum( cast(trade_volume.trade_amount as double)), 0) as [trade_amount], trade_volume.trade_datetime from trade_volume trade_volume where to_datetime(trade_volume.trade_datetime)>= cast( to_char( SYS_DATETIME , 'YYYY-MM-DD')|| cast(' 00:00:00' as varchar) as datetime) and trade_volume.market= ?:0 and trade_volume.exchange= ?:1 and trade_volume.ask_bid= ?:2 group by trade_volume.market) bid (market, trade_amount, trade_datetime) left outer join (select distinct trade_volume.market, nvl(sum( cast(trade_volume.trade_amount as double)), 0) as [trade_amount], trade_volume.trade_datetime from trade_volume trade_volume where to_datetime(trade_volume.trade_datetime)>= cast( to_char( SYS_DATETIME , 'YYYY-MM-DD')|| cast(' 00:00:00' as varchar) as datetime) and trade_volume.market= ?:3 and trade_volume.exchange= ?:4 and trade_volume.ask_bid= ?:5 group by trade_volume.market) ask (market, trade_amount, trade_datetime) on bid.market=ask.market group by bid.market

  • ?
    ysh 2021.03.17 15:38
    cubrid compactdb –v –i /home/table_list.txt DINGDONG
    명령어를 실행하면
    compactdb: Failed to connect to database server, '–v', on the following host(s): localhost.
    이렇게 나오는데 어떻게 해야하나요...?
  • ?
    정훈 2021.03.17 16:34
    현재 쿼리 플랜을 보니 풀스캔 하고 있는 것 같습니다. 추가로 정보 요청드립니다.

    1. 해당 테이블의 스키마 정보
    show create table trade_volume

    2. 쿼리 발췌한 내용 캡처 (log_top.res 파일)
    vi log_top.res
  • ?

    추가 정보입니다..!

     

    1. 해당 테이블의 스키마 정보
    CREATE TABLE [trade_volume] ([trade_datetime] CHARACTER VARYING(50), [market] CHARACTER VARYING(50), [trade_amount] CHARACTER VARYING(50), [ask_bid] CHARACTER VARYING(50), [exchange] CHARACTER VARYING(50), [price] CHARACTER VARYING(50), [coinone_id] CHARACTER VARYING(50)) REUSE_OID, COLLATE utf8_bin

     

    2. 쿼리 발췌한 내용 캡처 (log_top.res 파일)

    화면 캡처 2021-03-18 091623.jpg

     

  • ?
    오명환 2021.03.18 10:31
    올려주신 table 정보를 보면 설정된 인덱스가 하나도 없습니다. 적절한 index 설정과 함께 쿼리 튜닝이 필요한 상황인 것 같습니다.
    broker_log_top 수행한 결과 정보 내용이 없어, 더 정보를 확인하기 힘듭니다.

    전문적인 기술지원을 받아보시는 것을 권장드립니다.
  • ?
    ysh 2021.03.18 11:04
    긴 시간 사려 깊은 답변에 감사드립니다! 말씀하셨던 내용을 참고하여 수정해보겠습니다!

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 1439
3412 where 절 IN 구문에 잘못된 서브쿼리 사용 시의 비정상 동작 문의 1 Raven 2021.04.23 78
3411 _cubrid.InterfaceError: (-20002, 'ERROR: CCI, -20002, Invalid connection handle') 4 beatb 2021.04.22 108
3410 큐브리드 백업 4 먹고래 2021.04.21 117
3409 매일 1억건의 데이터를 지울수 있는 방법이 필요합니다 14 file ysh 2021.04.20 250
3408 안드로이드 개발 중, 큐브리드 접속 시 VerifyError가 출력되며 에뮬레이터가 종료되어버립니다. 2 롤롤 2021.04.19 82
3407 큐브리드 설치 이후 FATAL ERROR 1 김둥둥 2021.04.16 83
3406 CUBRID. 데이터 시각화 툴 호환 가능 여부 2 mqnic 2021.04.15 92
3405 큐브리드 시작시 오류 문의 드립니다. 6 file jisu5689 2021.04.15 115
3404 큐브리드 9.3 버전 Result Set Caching 설정 관련 질문 4 imwondol 2021.04.12 133
3403 리눅스에 큐브리드 설치 관련 질문 입니다. 1 file 하인츠링게 2021.04.09 87
3402 An internal error occurred during: "Fetching children of <DB명>". java.lang.NullPointerException 에러 4 ysh 2021.04.06 118
3401 아카이브 삭제 명령어 문의 드립니다. 1 Philip Park 2021.04.06 82
3400 데이터 삭제 후 인써써트시 한번은 정상 동작 두번째에서 아래의 오류가 발생합니다 1 htoh 2021.04.06 81
3399 큐브리드 관련 질문입니다. 1 슈웁 2021.04.01 82
3398 trigger 에서 오라클 처럼 Exception 처리가 가능한가요? 2 ymshim 2021.03.29 120
3397 큐브리드 MERGE INTO USING ( SELECT DB_ROOT ) 관련 질문 드립니다. 1 MSG 2021.03.25 130
3396 FOREIGN KEY 오류관련해서 문의 드립니다. 1 미샤클로렌 2021.03.23 136
3395 컬럼상 콤마 삭제 질문드립니다. 5 테스형2 2021.03.19 110
3394 큐브리드 9.3) 터미널을 이용하여 큐브리드 DB ubloaddb시 object 파일 깨짐 현상 3 file 솨솨솨 2021.03.18 129
» 간단한 조회 쿼리가 BUSY 상태로 남아있는 문제 9 file ysh 2021.03.17 216
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 175 Next
/ 175

Contact Cubrid

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