Background Image

FORUM

조회 수 334 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

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


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

OS
CentOS 64bit
CUBRID Ver.
CUBRID 10.2 (10.2.7.8896-cebe4e9) (64bit release build for Linux) (Jan 26 2022 11:35:52)
CUBRID TOOL Ver.
SQLGate 9.9.8.0
응용 환경(API)
JAVA


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

 

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


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

OS: CentOS

[cubuser@localhost ~]$ cubrid_rel

CUBRID 10.2 (10.2.7.8896-cebe4e9) (64bit release build for Linux) (Jan 26 2022 11:35:52)

응용환경: JAVA

JDBC-10.2-latest-cubrid

 

JDBC PreparedStatement를 사용하여 특정 SQL 문을 실행시키면 다음 오류가 발생합니다.

 

cubrid.jdbc.driver.CUBRIDException: Cannot communicate with the broker[CAS INFO-192.168.0.203:30000,2,16669],[SESSION-4],[URL-jdbc:cubrid:192.168.0.203:30000:free:dba:********:?charset=utf-8].
        at cubrid.jdbc.jci.UTimedDataInputStream.read(UTimedDataInputStream.java:154)
        at cubrid.jdbc.jci.UInputBuffer.<init>(UInputBuffer.java:131)
        at cubrid.jdbc.jci.UConnection.send_recv_msg(UConnection.java:1859)
        at cubrid.jdbc.jci.UConnection.send_recv_msg(UConnection.java:1871)
        at cubrid.jdbc.jci.UStatement.executeInternal(UStatement.java:825)
        at cubrid.jdbc.jci.UStatement.execute(UStatement.java:894)
        at cubrid.jdbc.driver.CUBRIDStatement.executeCoreInternal(CUBRIDStatement.java:906)
        at cubrid.jdbc.driver.CUBRIDStatement.executeCore(CUBRIDStatement.java:871)
        at cubrid.jdbc.driver.CUBRIDPreparedStatement.execute(CUBRIDPreparedStatement.java:497)
        at itc.dbtx.DBTXManager.execStatement(DBTXManager.java:906)
        at itc.dbtx.DBTXManager.doUpdate(DBTXManager.java:745)
        at peoplecar.bsonex.S3Export.loadCharge(S3Export.java:527)
        at peoplecar.bsonex.S3Export.upload(S3Export.java:127)
        at peoplecar.bsonex.S3Export.main(S3Export.java:646)

 

SQL 문:

 

update reserve_trans r
                      inner join
                      (
                        select c.rsv_id, sum(if(c.paid_status = 1, c.paid_amt, 0)) as pay_charge
                                     , max(c.charged) as charged, max(ifnull(p.charged, to_date('1970-01-01'))) as charged_unpaid
                          from charge_trans c
                          left outer join 
                        charge_trans p
                            on p.job_id = ?
                           and c.rsv_id = p.rsv_id
                           and c.charged = p.charged
                           and p.charge_type = 1
                           and p.paid_status != 1
                         where c.job_id = ?
                             group by c.rsv_id
                      ) c
                         on r.job_id = ? and c.rsv_id = r.id
                        set r.pay_charge = c.pay_charge
                          , r.pay_yn = if(c.charged = c.charged_unpaid, 'N', 'Y')

 

Table Script:

 

CREATE TABLE [DBA].[reserve_trans] (
       [job_id] INTEGER NOT NULL,
       [id] CHARACTER VARYING(32) NOT NULL,
       [product_name] CHARACTER VARYING(64) NOT NULL,
       [reserver_id] CHARACTER VARYING(40) NOT NULL,
       [reserver_name] CHARACTER VARYING(64) NOT NULL,
       [age] INTEGER NOT NULL,
       [sex] INTEGER NOT NULL,
       [status] CHARACTER VARYING(10) NOT NULL,
       [reserve_type] CHARACTER VARYING(10) NOT NULL,
       [trip_type] CHARACTER VARYING(20) NOT NULL,
       [car_number] CHARACTER VARYING(20) NOT NULL,
       [model] CHARACTER VARYING(40) NOT NULL,
       [owner] CHARACTER VARYING(40) NOT NULL,
       [origin_area] INTEGER NOT NULL,
       [origin_spot] CHARACTER VARYING(50) NOT NULL,
       [dest_area] INTEGER NOT NULL,
       [dest_spot] CHARACTER VARYING(50) NOT NULL,
       [reserve_start] DATETIME NOT NULL,
       [reserve_end]   DATETIME NOT NULL,
       [use_start]     DATETIME,
       [use_end]       DATETIME,
       [engine_off]    DATETIME,
       [run_dist]      INTEGER NOT NULL,
       [deposit]       BIGINT NOT NULL,
       [exclude]       BIGINT NOT NULL,
       [deposit_yn] CHARACTER(1) NOT NULL,
       [pickup_charge] BIGINT NOT NULL,
       [pickup_charge_yn] CHARACTER(1) NOT NULL,
       [pickup_excharge] BIGINT NOT NULL,
       [pickup_excharge_yn] CHARACTER(1) NOT NULL,
       [ride_charge] BIGINT NOT NULL,
       [ride_charge_yn] CHARACTER(1) NOT NULL,
       [etc_charge] BIGINT NOT NULL,
       [etc_charge_yn] CHARACTER(1) NOT NULL,
       [use_charge] BIGINT NOT NULL,
       [use_charge_yn] CHARACTER(1) NOT NULL,
       [use_point] BIGINT NOT NULL,
       [use_coupon] CHARACTER VARYING(64) NOT NULL,
       [coupon_discount] BIGINT NOT NULL,
       [pay_charge]      BIGINT NOT NULL,
       [pay_yn] CHARACTER(1) NOT NULL,
       CONSTRAINT [pk_reserve_trans_job_id_id]
              PRIMARY KEY ([job_id], [id]),
              INDEX [ref109] ([job_id]),
              INDEX [ix_reserve_trans1] ([job_id], [reserver_id]),
       CONSTRAINT [fk_reserve_trans_job_id] FOREIGN KEY ([job_id])
              REFERENCES [job] ([id]) ON DELETE CASCADE ON UPDATE RESTRICT
)
COLLATE utf8_bin

 

CREATE TABLE [DBA].[charge_trans] (
       [job_id] INTEGER NOT NULL,
       [id] CHARACTER VARYING(32) NOT NULL,
       [bill_id] CHARACTER VARYING(32) NOT NULL,
       [rsv_id] CHARACTER VARYING(32) NOT NULL,
       [product_id] CHARACTER VARYING(16) NOT NULL,
       [product_name] CHARACTER VARYING(64) NOT NULL,
       [paid_amt_reward] BIGINT NOT NULL,
       [paid_vat_reward] BIGINT NOT NULL,
       [discount_amt]    BIGINT NOT NULL,
       [discount_vat]    BIGINT NOT NULL,
       [amt]             BIGINT NOT NULL,
       [vat]             BIGINT NOT NULL,
       [paid_amt]        BIGINT NOT NULL,
       [paid_vat]        BIGINT NOT NULL,
       [cancel_amt]      BIGINT NOT NULL,
       [cancel_vat]      BIGINT NOT NULL,
       [use_coupon] CHARACTER VARYING(64) NOT NULL,
       [charge_type] INTEGER NOT NULL,
       [status]      INTEGER NOT NULL,
       [paid_status] INTEGER NOT NULL,
       [charged]     DATETIME NOT NULL,
       [paid]        DATETIME,
       CONSTRAINT [pk_charge_trans_job_id_id]
              PRIMARY KEY ([job_id], [id]),
              INDEX [ix_charge_trans1] ([job_id], [bill_id]),
              INDEX [ix_charge_trans2] ([job_id], [rsv_id]),
       CONSTRAINT [fk_charge_trans_job_id] FOREIGN KEY ([job_id])
              REFERENCES [job] ([id]) ON DELETE CASCADE ON UPDATE RESTRICT
)
COLLATE utf8_bin

 

charge_transe의 데이타 건수: 137769

 

Exception 이 발생한 JAVA source:

 

            boolean hasResult = stmt.execute();
 

 

  • ?
    steve 2022.07.18 16:22
    queryTimeout을 변경하고 나니 Exception이 달라집니다. 1800 -> 300

    cubrid.jdbc.driver.CUBRIDException: Has been interrupted.[CAS INFO-192.168.0.203:30000,1,23319],[SESSION-17],[URL-jdbc:cubrid:192.168.0.203:30000:free:dba:********:?charset=utf-8].
    at cubrid.jdbc.jci.UConnection.createJciException(UConnection.java:2333)
    at cubrid.jdbc.jci.UInputBuffer.<init>(UInputBuffer.java:171)
    at cubrid.jdbc.jci.UConnection.send_recv_msg(UConnection.java:1859)
    at cubrid.jdbc.jci.UConnection.send_recv_msg(UConnection.java:1871)
    at cubrid.jdbc.jci.UStatement.executeInternal(UStatement.java:825)
    at cubrid.jdbc.jci.UStatement.execute(UStatement.java:894)
    at cubrid.jdbc.driver.CUBRIDStatement.executeCoreInternal(CUBRIDStatement.java:906)
    at cubrid.jdbc.driver.CUBRIDStatement.executeCore(CUBRIDStatement.java:871)
    at cubrid.jdbc.driver.CUBRIDPreparedStatement.execute(CUBRIDPreparedStatement.java:497)
    at itc.dbtx.DBTXManager.execStatement(DBTXManager.java:906)
    at itc.dbtx.DBTXManager.doUpdate(DBTXManager.java:745)
    at peoplecar.bsonex.S3Export.loadCharge(S3Export.java:527)
    at peoplecar.bsonex.S3Export.upload(S3Export.java:127)
    at peoplecar.bsonex.S3Export.main(S3Export.java:646)

    그렇다면 일단 SQL 문이 실행되는 시간이 너무 길어서 session timeout이 걸렸다는 것이 되는데 해당 SQL 문은 SQLGate에서 실행하면 수 초 안에 실행됩니다.
    무엇이 원인인지 추측이 되지 않습니다.
  • ?
    steve 2022.07.18 16:51
    SQLGate 에서 해당 SQL을 데이타가 있는 상태로 실행하니 5분 이상이 걸림을 확인하였습니다.

    update reserve_trans r
    inner join
    (
    select c.rsv_id, sum(if(c.paid_status = 1, c.paid_amt, 0)) as pay_charge
    , max(c.charged) as charged, MAX(IFNULL(p.charged, TO_DATE('1970-01-01'))) as charged_unpaid
    from charge_trans c
    left outer join
    charge_trans p
    on p.job_id = 327
    and c.rsv_id = p.rsv_id
    and c.charged = p.charged
    and p.charge_type = 1
    and p.paid_status != 1
    where c.job_id = 327
    group by c.rsv_id

    ) c
    on r.job_id = 327 and c.rsv_id = r.id
    set r.pay_charge = c.pay_charge
    , r.pay_yn = if(c.charged = c.charged_unpaid, 'N', 'Y')

    update 문에서 시간이 오래 걸리는 원인은 무엇인가요?
  • ?
    오명환 2022.07.18 17:28
    데이터가 없는 상태에서 update가 느린 상황에 대해 가이드 드리기가 힘드네요.
    우선, update 질의를 select 질의로 변경해서 어느 정도의 수행시간이 걸리는지 와 select 된 결과 수 및 수행된 plan 정보를 확인해보시는 것이 중요할 것 같습니다.
    select 질의가 느린 경우에는 튜닝이 필요하오니 plan 정보를 보고 튜닝을 진행해야 합니다.

    가이드를 위해 확인된 내용을 댓글로 부탁드립니다.
    (1) update 구문을 select 로 변경 후 수행한 시간
    (2) select 수행시 플랜 정보
    (3) select 된 결과 수

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4283
3816 /home/jenkins/workspace/cubrid_release_10.1/src/transaction/boot_cl.c, line 1138 CODE = -971 Tran = -1, EID = 1Program 'tranlist' (pid ) connected to database server 'test' on the host 'localhost' 4 jmkim 2023.03.13 188
3815 macOS CUBRID 다운로드 질문 1 bk9395 2023.03.13 184
3814 CUBRID 11.2 & CUBRID Aadmin 11.1 오류 문의 2 file 붉은구름 2023.03.08 133
3813 도커에서 설치시 접속 문의드립니다. 1 핫산 2023.03.07 362
3812 특수문자 포함 LIKE검색 1 SEO 2023.03.06 143
3811 cubrid admin 질문 드립니다. 3 file 초코초코초 2023.03.06 116
3810 plugin방식 호출 1 file 네오랜덤 2023.03.04 127
3809 서브쿼리시 질문드립니다. 2 dev123123 2023.02.28 146
3808 Cubrid DB 의 sqoop 사용시 옵션 문의 1 망고라떼 2023.02.28 95
3807 큐브리드 통계정보 관련 문의드립니다. 1 초코초코초 2023.02.26 111
3806 cubrid 매니저 패스워드 공용으로 사용하는건가요?? 2 학아 2023.02.24 166
3805 list 합수의 결과를 varchar 컬럼에 insert 시 오류 문의 1 file 플레이어블 2023.02.24 120
3804 LOG 설정 관련 질문입니다. 1 jemin 2023.02.23 85
3803 큐브리드 unload 문의드립니다. 5 초코초코초 2023.02.22 204
3802 Mac OS 에서 Cubrid Manager 실행이 안됩니다. 1 file 엘L 2023.02.20 282
3801 쿼리 플랜 cardinality, cost 이상 1 parknnna 2023.02.16 180
3800 조건절 in 에 들어가는 순서대로 뽑고 싶습니다. 1 구르마도리 2023.02.15 89
3799 Cubrid 11.2 접속 문제. 1 엘L 2023.02.15 131
3798 cubrid 매니저 백업 자동화 추가 비활성 1 제리리 2023.02.15 121
3797 Mac OS 큐브리드 매니저 설치 문제 6 file DJ 2023.02.13 286
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 ... 199 Next
/ 199

Contact Cubrid

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