Background Image

FORUM

ysh
조회 수 119 추천 수 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
    긴 시간 사려 깊은 답변에 감사드립니다! 말씀하셨던 내용을 참고하여 수정해보겠습니다!

  1. SQLGate for CUBRID 영구 무료 라이선스 제공

    Date2020.04.09 Byadmin Views1158
    read more
  2. FOREIGN KEY 오류관련해서 문의 드립니다.

    Date2021.03.23 By미샤클로렌 Views65
    Read More
  3. 컬럼상 콤마 삭제 질문드립니다.

    Date2021.03.19 By테스형2 Views73
    Read More
  4. 큐브리드 9.3) 터미널을 이용하여 큐브리드 DB ubloaddb시 object 파일 깨짐 현상

    Date2021.03.18 By솨솨솨 Views78
    Read More
  5. 간단한 조회 쿼리가 BUSY 상태로 남아있는 문제

    Date2021.03.17 Byysh Views119
    Read More
  6. 기존 디스크 용량 부족으로 새 디스크 만든다음에 큐브리드 DB이전시 작동안하는 문제

    Date2021.03.16 Byysh Views68
    Read More
  7. 큐브리드 포트포워딩 문의

    Date2021.03.16 By쪼아 Views71
    Read More
  8. HA 구성 Master Server csql 에서 insert 시 Slave Server apply 안되는 현상

    Date2021.03.12 ByDBS Views63
    Read More
  9. unloaddb / loaddb 실행할 때 clob파일을 유지할 수 있는 방법 있을까요?

    Date2021.03.12 By김동현 Views62
    Read More
  10. 데이터베이스 구성(테이블)을 복제하고 싶습니다.

    Date2021.03.12 By김동현 Views63
    Read More
  11. 쿼리 조회오류인가요??

    Date2021.03.11 By다음 Views70
    Read More
  12. chr(0)과 공백문자 관련 문의입니다.

    Date2021.03.10 ByRaven Views68
    Read More
  13. loaddb 시 에러 문의

    Date2021.03.10 ByWWWW Views58
    Read More
  14. cub_manager 관련 질문

    Date2021.03.08 By파인 Views71
    Read More
  15. exists 문이 너무 느립니다

    Date2021.03.08 ByRaven Views70
    Read More
  16. 리눅스에서 내보내기 시 파이프라인 구분자를 통한 출력 문의

    Date2021.03.08 ByJB Views57
    Read More
  17. .net db목록 관련 질문 드립니다.

    Date2021.03.05 By파인 Views66
    Read More
  18. 윈도우 2007

    Date2021.03.04 By김둥둥 Views57
    Read More
  19. sql문에 대해 문의 드립니다!

    Date2021.03.03 Bysql초보 Views67
    Read More
  20. backupdb 실행 문의

    Date2021.03.02 ByJB Views73
    Read More
  21. unloaddb internal system failure 문의

    Date2021.02.26 Bybchlim Views48
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 171 Next
/ 171

Contact Cubrid

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