Background Image

FORUM

ysh
조회 수 577 추천 수 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 4443
3407 큐브리드 설치 이후 FATAL ERROR 1 김둥둥 2021.04.16 956
3406 CUBRID. 데이터 시각화 툴 호환 가능 여부 2 mqnic 2021.04.15 141
3405 큐브리드 시작시 오류 문의 드립니다. 6 file jisu5689 2021.04.15 366
3404 큐브리드 9.3 버전 Result Set Caching 설정 관련 질문 4 imwondol 2021.04.12 290
3403 리눅스에 큐브리드 설치 관련 질문 입니다. 1 file 하인츠링게 2021.04.09 231
3402 An internal error occurred during: "Fetching children of <DB명>". java.lang.NullPointerException 에러 4 ysh 2021.04.06 480
3401 아카이브 삭제 명령어 문의 드립니다. 1 Philip Park 2021.04.06 258
3400 데이터 삭제 후 인써써트시 한번은 정상 동작 두번째에서 아래의 오류가 발생합니다 1 htoh 2021.04.06 209
3399 큐브리드 관련 질문입니다. 1 슈웁 2021.04.01 143
3398 trigger 에서 오라클 처럼 Exception 처리가 가능한가요? 2 ymshim 2021.03.29 402
3397 큐브리드 MERGE INTO USING ( SELECT DB_ROOT ) 관련 질문 드립니다. 1 MSG 2021.03.25 389
3396 FOREIGN KEY 오류관련해서 문의 드립니다. 1 미샤클로렌 2021.03.23 424
3395 컬럼상 콤마 삭제 질문드립니다. 5 테스형2 2021.03.19 244
3394 큐브리드 9.3) 터미널을 이용하여 큐브리드 DB ubloaddb시 object 파일 깨짐 현상 3 file 솨솨솨 2021.03.18 296
» 간단한 조회 쿼리가 BUSY 상태로 남아있는 문제 9 file ysh 2021.03.17 577
3392 기존 디스크 용량 부족으로 새 디스크 만든다음에 큐브리드 DB이전시 작동안하는 문제 2 file ysh 2021.03.16 211
3391 큐브리드 포트포워딩 문의 3 쪼아 2021.03.16 318
3390 HA 구성 Master Server csql 에서 insert 시 Slave Server apply 안되는 현상 1 DBS 2021.03.12 182
3389 unloaddb / loaddb 실행할 때 clob파일을 유지할 수 있는 방법 있을까요? 2 file 김동현 2021.03.12 300
3388 데이터베이스 구성(테이블)을 복제하고 싶습니다. 1 file 김동현 2021.03.12 207
Board Pagination Prev 1 ... 25 26 27 28 29 30 31 32 33 34 ... 200 Next
/ 200

Contact Cubrid

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