Background Image

FORUM

ysh
조회 수 575 추천 수 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 Views4280
    read more
  2. 브로커(CAS)수 질문드립니다!

    Date2023.06.05 By요시니 Views149
    Read More
  3. 데이터 이관 문의입니다.

    Date2023.05.30 Bykipo0821 Views125
    Read More
  4. 8.4.4 charset. Collation 확인 방법

    Date2023.05.24 By네오랜덤 Views176
    Read More
  5. 8.4.4버젼 charset 확인

    Date2023.05.23 By네오랜덤 Views182
    Read More
  6. 쿼리 속도 차이 질문

    Date2023.05.18 By하얀미스 Views140
    Read More
  7. spring boot 에서 HikariPool-1 - Driver does not support get/set network timeout for connections. (java.lang.UnsupportedOperationException) 질문 드립니다.

    Date2023.05.18 Bykjaminam Views732
    Read More
  8. cci 프로그래밍에서 DB LINK 관련 문의

    Date2023.05.18 Byjjune1206 Views123
    Read More
  9. 큐브리드 매니저 실행이 오류

    Date2023.05.18 By청주시청 Views98
    Read More
  10. ddl 추출

    Date2023.05.17 By네오랜덤 Views95
    Read More
  11. 하나의 쿼리에서 복수 테이블 업데이트 방법 문의

    Date2023.05.17 By도담도담 Views123
    Read More
  12. cubrid driver 설치 문의

    Date2023.05.08 By고구망구망 Views425
    Read More
  13. 큐브리드 매니저 접속 이 안됩니다. 확인 요청 드립니다.

    Date2023.04.28 By뿡이 Views127
    Read More
  14. Fk값 가져오기

    Date2023.04.24 By네오랜덤 Views160
    Read More
  15. 서버 메모리 교체 및 ha 상 데이터 삭제 절차

    Date2023.04.20 By레피엘 Views109
    Read More
  16. java stored procedure 에 loadjava 로 jar 파일 로드 시 java.lang.ClassNotFoundException 에러 문의

    Date2023.04.18 By개미가불쌍해 Views138
    Read More
  17. Cubrid stored procedure 스케쥴 등록 형식

    Date2023.04.17 ByRoy Views105
    Read More
  18. 암호화 함수 MDB_ENC 질문입니다

    Date2023.04.17 ByBE-DEV Views79
    Read More
  19. auto_increment 추가 방법 문의

    Date2023.04.14 By부패방지운영팀 Views242
    Read More
  20. CUBRID 사용자 계정 생성 관련 문의

    Date2023.04.14 By몽키스패너 Views127
    Read More
  21. order by 이후 rownum이 의도와 다르게 찍힙니다.

    Date2023.04.14 By바보똥개 Views134
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 ... 199 Next
/ 199

Contact Cubrid

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