Background Image

FORUM

조회 수 344 추천 수 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
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 31
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4456
3673 조건절서브쿼리오류 1 ozro 2022.08.12 140
3672 쿼리 오류 (컬럼 조회 순서에 따라 오류) 7 file ozro 2022.08.11 203
3671 11.2 path 방법 문의 4 리들러 2022.08.09 99
3670 다른 사용자에 생성된 함수 조회 1 ozro 2022.08.05 97
3669 사용자 권한 부여 2 file ozro 2022.08.04 183
3668 리눅스 ODBC 문의 4 내일은없다 2022.08.04 69
3667 큐브리드 마이그레이션 툴 이용중 계속 문제가 발생합니다 6 file wjdrmstn 2022.08.04 272
3666 CUBRID 11.2 쿼리 성능 이슈 13 tree1891 2022.08.02 525
3665 큐브리드 매니저 접속 문제(jdbc 드라이버) 3 file ozro 2022.08.01 224
3664 [mac os] cubrid manager 오류 문의 4 file 망고라떼 2022.08.01 215
3663 스케줄러 관련 질문 4 늅늅 2022.08.01 233
3662 JDBC Connection 끊어짐 1 steve 2022.07.21 451
3661 CUBRID 11.2 버전 데이터 이관 문의 2 리들러 2022.07.19 117
» JDBC PreparedStatement excute()에서 오류 발생 3 steve 2022.07.18 344
3659 Error : [-1302] dblink - [HY000][1406][Oracle][ODBC][Ora]ORA-01406 : fetched column value was truncated 15 리들러 2022.07.13 1864
3658 CUBRID-Windows-x64-11.2-latest, CUBRIDAdmin-11.0-latest-windows-x64 설치후 admin admin 로그인 에러, 로그인하게 해주세요? 4 file ITPROJECT 2022.07.11 131
3657 broker가 5개 이상 접속이 되지 않습니다. 2 file 꾸찐 2022.07.06 208
3656 Error : [-1302] dblink - Cannot communicate with server[CAS INFO-00.000.00.000:53000, 2, 27657], [CAS INFO-00.000.00.000:30000,7,28322], 4 리들러 2022.07.06 191
3655 textarea에서 cubrid 입력시 개행처리 문제 1 스타일보스 2022.07.06 77
3654 IBATIS 동적태그 사용 시 dblink - not supported type null(0) 10 Qubrid 2022.07.06 1437
Board Pagination Prev 1 ... 12 13 14 15 16 17 18 19 20 21 ... 200 Next
/ 200

Contact Cubrid

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