QueryTimeout 구성

지정된 시간(초) 이전에 실행이 완료되지 못하면 SQL(Structured Query Language)문이 인터럽트되도록 애플리케이션의 데이터 소스에 조회 제한시간을 구성할 수 있습니다.

시작하기 전에

JDBC(Java Database Connectivity) API는 표준 인터페이스 java.sql.Statement.setQueryTimeout을 제공하여 명령문이 실행될 때까지 JDBC 드라이버가 대기하는 시간(초)을 제한합니다. 애플리케이션이 이 시간을 사용하여 요청이 인터럽트되기 전에 SQL문이 완료될 때까지 애플리케이션이 대기하는 최대 시간을 제어합니다. WebSphere® Application Server 데이터 소스에 쿼리 시간 초과를 설정할 수 있으므로 애플리케이션을 호출하기 위해 애플리케이션을 변경할 필요가 없습니다.java.sql.Statement.setQueryTimeout 곧장. 모든 명령문에서 java.sql.Statement.setQueryTimeout 인터페이스를 호출하여 애플리케이션에서 SQL 조회 제한시간을 여전히 프로그래밍 방식으로 설정할 수 있습니다.

이 태스크 정보

다음 사용자 정의 특성 중 하나를 사용하여 이 조회 제한시간을 구성할 수 있습니다.
  1. webSphereDefaultQueryTimeout은 제한시간이 초과하기 전에 SQL문이 실행할 수 있는 시간(초)인 기본 조회 제한시간을 설정합니다. 이 기본값은 JTA(Java™ Transaction API) 트랜잭션 중에 대체됩니다.syncQueryTimeoutWithTransactionTimeout 사용자 정의 속성이 활성화되었습니다.
  2. syncQueryTimeoutWithTransactionTimeout은 SQL문의 기본 조회 제한시간으로 JTA 트랜잭션에 남아 있는(있는 경우) 시간을 사용합니다.
기본적으로 조회 제한시간은 사용 불가능합니다. 두 개의 데이터 소스 사용자 정의 특성이 있는지 여부 및 해당 값에 따라 제한시간 값은 다음으로 산출됩니다.
  • TM(Transaction Manager) 제한시간 설정을 기반으로 현재 JTA 트랜잭션에 남아 있는 시간 - syncQueryTimeoutWithTransactionTimeout
  • 구성에 지정된 절대 시간(초) - webSphereDefaultQueryTimeout
그런 다음 산출된 제한시간은 구성된 데이터 소스를 사용하여 애플리케이션이 실행한 각 SQL문에서 조회 제한시간 값을 설정하는 데 사용됩니다.

프로시저

  1. 관리 콘솔을 여십시오.
  2. 딸깍 하는 소리 자원 >JDBC > 데이터 소스 > 데이터_소스
  3. 딸깍 하는 소리 사용자 정의 속성 추가 속성에서.
  4. 새로 작성을 클릭하십시오.
  5. 입력하다webSphereDefaultQueryTimeout 에서 이름 필드.
  6. 기본 쿼리 시간 초과에 사용할 시간(초)을 입력합니다. 필드.
    제한시간 값은 초 단위입니다. 값 0은 제한시간이 없음을 표시합니다.
  7. 확인을 클릭하십시오.
  8. 새로 작성을 클릭하십시오.
  9. 입력하다syncQueryTimeoutWithTransactionTimeout 에서 이름 필드.
  10. 입력하다true 또는false 에서 필드.
    값이 true이면 JTA 트랜잭션에 남아 있는 시간을 기본 조회 제한시간으로 사용합니다.
  11. 확인을 클릭하십시오.
  12. 변경사항을 저장하십시오.
    서버가 다시 시작된 후에는 업데이트 사항이 적용됩니다.

결과

애플리케이션의 데이터 소스에서 조회 제한시간을 구성했습니다.

다음 예에서는 데이터 소스 사용자 정의 속성 설정의 영향을 보여줍니다.webSphereDefaultQueryTimeout = 20 그리고syncQueryTimeoutWithTransactionTimeout = true . 두 특성을 모두 설정했으므로 (transaction.begin()transaction.commit()에 대한 호출로 경계가 구분된) JTA 트랜잭션 외부에서 실행된 SQL문은 webSphereDefaultQueryTimeout에 의해 설정된 기본 제한시간 값을 사용합니다. JTA 트랜잭션 내의 항목은 트랜잭션 제한시간이 만료되기 전에 남아 있는 시간을 사용합니다.
statement = connection.createStatement();
statement.executeUpdate(sqlcommand1); // query timeout of 20 seconds is used
statement.executeUpdate(sqlcommand2); // query timeout of 20 seconds is used
transaction.setTransactionTimeout(30);
transaction.begin();
try
{
    statement.executeUpdate(sqlcommand3); // query timeout of 30 seconds is used
    // assume the preceding operation took 5 seconds, remaining time = 30 - 5 seconds
    statement.executeUpdate(sqlcommand4); // query timeout of 25 seconds is used
    // assume the preceding operation took 10 seconds, , remaining time = 25 - 10 seconds
    statement.executeUpdate(sqlcommand5); // query timeout of 15 seconds is used
}
finally
{
    transaction.commit();
}
statement.executeUpdate(sqlcommand6); // query timeout of 20 seconds is used
다음 예에서는 데이터 소스 사용자 정의 속성 설정의 영향을 보여줍니다.webSphereDefaultQueryTimeout = 20 그리고syncQueryTimeoutWithTransactionTimeout = false . webSphereDefaultQueryTimeout만 설정한 경우, JTA 트랜잭션 내에서 실행되는지 여부에 관계 없이 모든 명령문에 기본 제한시간 값이 사용됩니다.
statement = connection.createStatement();
statement.executeUpdate(sqlcommand1); // query timeout of 20 seconds is used
statement.executeUpdate(sqlcommand2); // query timeout of 20 seconds is used
transaction.setTransactionTimeout(30);
transaction.begin();
try
{
    statement.executeUpdate(sqlcommand3); // query timeout of 20 seconds is used
    // assume the preceding operation took 5 seconds
    statement.executeUpdate(sqlcommand4); // query timeout of 20 seconds is used
    // assume the preceding operation took 10 seconds
    statement.executeUpdate(sqlcommand5); // query timeout of 20 seconds is used
}
finally
{
    transaction.commit();
}
statement.executeUpdate(sqlcommand6); // query timeout of 20 seconds is used
애플리케이션 코드에서 java.sql.Statement.setQueryTimeout 인터페이스를 호출하여 언제든 명령문의 조회 제한시간을 대체할 수 있습니다.