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 4438
3624 Program 'spacedb' (pid 5835) was connected from the host 'localhost.localdomain' 3 file 도우너19 2022.05.16 158
3623 cubrid tool 문의 1 amostella 2022.05.13 67
3622 큐브리드 ha 구성 중에 master DB가 올라오지 않습니다. 11 samsam 2022.05.12 305
3621 안녕하세요 큐브리드 재설치 후 '가져오기' 및 INSERT된 데이터 오류 문의드립니다. 3 큐브짱 2022.05.12 139
3620 날짜 형식 변환 2 밍아 2022.05.11 82
3619 terminate called after throwing an instance of 'std::bad_alloc' 8 영웅찬 2022.05.11 273
3618 hb_thread_check_disk_failure 오류 문의 드립니다. 1 큐브짱 2022.05.11 186
3617 c# cubrid -> mssql BLOB type 데이타 전환 1 알고싶다! 2022.05.09 216
3616 큐브리드 SYSDATETIME 문의 드립니다. 1 file 큐브리드궁금 2022.05.06 97
3615 [Cubrid HA] restoreslave 사용할 경우 Master/Slave 경로를 반드시 동일하게 맞춰야하나요? 1 큐브짱 2022.05.06 71
3614 Error Number: -17 Internal error: fetching deallocated pageid 16777216 of volume 오류 1 나라디 2022.05.04 573
3613 nodejs와 cubrid 서버와 연동 (localhost 아닙니다) 7 hiDev 2022.05.02 144
3612 Cubrid HA 구성서버 중, Slave에서 restoreslave 동작시 오류 관련하여 문의드립니다. 1 큐브짱 2022.05.02 133
3611 cubrid acl reload 에러 1 hiDev 2022.04.29 63
3610 php 7.4 접속 에러 16 file jslee 2022.04.27 171
3609 php cubrid_driver 설치 에러 1 jslee 2022.04.23 299
3608 당혹스럽습니다. 쿼리문으로 만들어진 테이블이 있는데 삭제도 안됩니다. 7 file 눈물색 2022.04.21 423
3607 Windows 10 php 5.6 Call to undefined function cubrid_connect() 에러 문의 8 file devlsy 2022.04.21 122
3606 자바 배치 쉘 수행시 큐브리드 이중화 설정 1 jeinhe 2022.04.18 79
3605 큐브리드 (java - 전자정부프레임워크 - 마이바티스) 연동 에러 1 file 백수인 2022.04.15 387
Board Pagination Prev 1 ... 14 15 16 17 18 19 20 21 22 23 ... 200 Next
/ 200

Contact Cubrid

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