2014-10-10 8 views
0

DAO 레이어의 프레임 워크를 평가하기 위해 몇 가지 테스트를 수행하고 있습니다. 테스트 케이스 중 하나는 테이블 잠금을 복제하고 이러한 상황에서 프레임 워크가 작동하는 방식을 확인하는 것입니다. 이 테스트는 JPA 벤더로서 Hibernate와 EclipseLink를 사용하여 Java와 주로 JPA를 사용하여 수행되며, 우리는 Hibernate만을 사용하고 다른 ORM 프레임 워크에 대한 테스트를 쉽게하기 위해 프레임 워크의 다리 역할을하는 인터페이스 세트를 가지고 있습니다.Postgres 9.0의 잠금 대기 시간을 정의하는 방법은 무엇입니까?

우리의 MySQL 5.5.11 데이터베이스에 대해 테이블 ​​잠금 테스트 케이스를 성공적으로 생성했습니다. 테스트 케이스를 실행하는 응용 프로그램이 방금 50 초 동안 (MySQL의 잠금 대기 시간에 대한 기본값) 그리고 SQLException 관련 테이블 잠금 대기 시간 초과 예외가 로그에 나타났습니다. 그런 다음 테스트 구성을 Postgres 9.0에 연결하고 테스트를 다시 실행하여 테이블 잠금을 복제 할 수 있었지만 지금은 애플리케이션이 10 분 동결되어 아무런 예외도 발생하지 않아 테스트 실행을 중단해야합니다. .

나는이 시간을 Postgres 9.0으로 변경하는 방법을 찾고 있었고 Postgres 9.3의 결과는 Client Connection Defaultslock_timeout 아래에 있습니다. 그런 다음 9.0 용 설명서를 확인했는데 이러한 매개 변수를 사용할 수 없습니다. 데이터베이스에서 테이블 잠금 예외를 검사하기 위해 postgres 구성 또는 Java 클라이언트 애플리케이션 (JPA 또는 Hibernate 또는 EclipseLink 특정 구성)에서이를 어떻게 변경할 수 있습니까? 최악의 시나리오는 프로덕션 환경에서 테이블 잠금이 나타나고 응용 프로그램이 중지되지 않는 한 복구 할 수 없다는 것입니다 (이것이 우리가 프레임 워크와 함께 테스트하고있는 것입니다).

답변

2

Try statement_timeout - 연령대가 다가 왔습니다.

SET statement_timeout=1000; 
-- try to take lock, and get an exception 1000ms later 
+0

매우 비슷하지만 동일하지 않습니다. 잠금 테이블 예외가 발생하지는 않지만이 버전이 Postgres 버전에서 가장 가까운 것 같습니다. –

+0

시간 초과가 아니라 잠금 오류가 걱정되면 잠금 시도에'NOWAIT'을 추가 할 수 있습니다. –

+0

그래, 그게 9.0에 올거야. 업그레이드 시간. –