QueryTimeout 구성
지정된 시간(초) 이전에 실행이 완료되지 못하면 SQL(Structured Query Language)문이 인터럽트되도록 애플리케이션의 데이터 소스에 조회 제한시간을 구성할 수 있습니다.
시작하기 전에
java.sql.Statement.setQueryTimeout
을 제공하여
명령문이 실행될 때까지 JDBC 드라이버가 대기하는 시간(초)을 제한합니다. 애플리케이션이 이 시간을 사용하여 요청이 인터럽트되기 전에
SQL문이 완료될 때까지 애플리케이션이 대기하는 최대 시간을
제어합니다. WebSphere® Application Server 데이터 소스에 쿼리 시간 초과를 설정할 수 있으므로 애플리케이션을 호출하기 위해 애플리케이션을 변경할 필요가 없습니다.java.sql.Statement.setQueryTimeout
곧장. 모든 명령문에서 java.sql.Statement.setQueryTimeout
인터페이스를 호출하여 애플리케이션에서 SQL 조회 제한시간을 여전히 프로그래밍 방식으로
설정할 수 있습니다.이 태스크 정보
webSphereDefaultQueryTimeout
은 제한시간이 초과하기 전에 SQL문이 실행할 수 있는 시간(초)인 기본 조회 제한시간을 설정합니다. 이 기본값은 JTA(Java™ Transaction API) 트랜잭션 중에 대체됩니다.syncQueryTimeoutWithTransactionTimeout
사용자 정의 속성이 활성화되었습니다.syncQueryTimeoutWithTransactionTimeout
은 SQL문의 기본 조회 제한시간으로 JTA 트랜잭션에 남아 있는(있는 경우) 시간을 사용합니다.
- TM(Transaction Manager) 제한시간 설정을 기반으로 현재 JTA 트랜잭션에 남아 있는
시간 -
syncQueryTimeoutWithTransactionTimeout
- 구성에 지정된 절대 시간(초) -
webSphereDefaultQueryTimeout
프로시저
- 관리 콘솔을 여십시오.
- 딸깍 하는 소리
- 딸깍 하는 소리 사용자 정의 속성 추가 속성에서.
- 새로 작성을 클릭하십시오.
- 입력하다
webSphereDefaultQueryTimeout
에서 이름 필드. - 기본 쿼리 시간 초과에 사용할 시간(초)을 입력합니다. 값 필드.제한시간 값은 초 단위입니다. 값 0은 제한시간이 없음을 표시합니다.
- 확인을 클릭하십시오.
- 새로 작성을 클릭하십시오.
- 입력하다
syncQueryTimeoutWithTransactionTimeout
에서 이름 필드. - 입력하다true 또는false 에서 값 필드.값이 true이면 JTA 트랜잭션에 남아 있는 시간을 기본 조회 제한시간으로 사용합니다.
- 확인을 클릭하십시오.
- 변경사항을 저장하십시오.서버가 다시 시작된 후에는 업데이트 사항이 적용됩니다.
결과
예
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
인터페이스를 호출하여 언제든 명령문의 조회 제한시간을
대체할 수 있습니다.