2009-10-06 1 views
0

DB2에서 테이블이 잠겨 있는지 여부를 감지 할 수 있습니까? 실제로 Select 문을 사용할 때마다 해당 테이블이 잠긴 경우 (삽입 또는 삭제 실행으로 인한 것일 수 있음) 테이블 잠금이 해제 될 때까지 기다려야합니다.DB2 또는 모든 데이터베이스에서 테이블이 잠겨 있는지 여부를 감지 할 수 있습니까?

우리의 경우 때때로 2-3 분 정도 걸립니다. 내가 생각하기에, 만약 내가 잠긴 테이블을 감지 할 수있는 메커니즘을 가질 수 있다면, 나는 레코드를 가져 오려고하지 않을 것이고, 대신에 메시지를 띄울 것이다.

DB2뿐만 아니라 모든 데이터베이스에서이를 감지 할 수 있습니다.

답변

2

내가 DB2를 사용한 적이 있지만, documentation에 따라 당신이 쿼리가 잠금을 기다릴 수 있도록 다음을 사용할 수 있습니다 같다 : 당신은 잠금 시간 초과 값을 설정할 수 있습니다, 또는

SET CURRENT LOCK TIMEOUT NOT WAIT 

~

SET CURRENT LOCK TIMEOUT 0 

두 문장 모두 동일한 효과가 있습니다.

일단이 기능을 사용하면 테이블에서 선택하여 오류를 잡을 수 있습니다.

+0

와우 .. 나는 이것을 위해 +5를주고 싶습니다. D. –

1

NO WAIT에 대해서는 권장하지 않으며 오히려 낮은 LOCK TIMEOUT (10-30 초)을 지정하십시오. 목표 테이블이 잠긴 경우 (작은 업데이트, 1 초), 두 번째 앱은 즉시 시간 초과됩니다. 10 초의 시간 제한이있는 경우 두 번째 앱은 첫 번째 앱이 COMMIT 또는 ROLLBACK (1 초)을 기다렸다가 앞으로 나아갈 것입니다.

잠금을 넘겨 줘야 할 때 "선착순"정책이 적용됩니다. 두 번째 앱이 "포기"하면 세 번째 앱에 들어가서 두 번째 앱에 필요한 잠금 장치를 가져올 수 있습니다. . 두 번째 앱은 기아를 계속 견뎌 낼 수 있기 때문에 기아를 막을 수 있습니다.

동시 진행 문제가 계속 발생하면 데이터베이스를 액세스하는 방법에 대한 핸들을 얻기 위해 잠금 모니터링을 고려하십시오. 매개 변수 및 응용 프로그램 동작을 조정하는 데 도움이되는 유용한 통계 (예 : 평균 잠금 대기 시간 등)가 많이 있습니다.

DB2 V9.7 Infocenter - Database Monitoring