2010-01-29 5 views
4

데이터베이스 교착 상태가 발생하는 클러스터 된 응용 프로그램이 있습니다.데이터베이스 교착 상태를 방지하는 방법

JPA 및 최대 절전 모드를 사용하는 j2ee 응용 프로그램입니다. Z/OS의 DB2 8.1은 페이지 잠금으로 설정되어 있습니다 (이것은 회사의 요구 사항입니다).

문제는 기본 키가 시퀀스로 생성되며 시스템에 큰로드가있을 경우 레코드를 삽입하는 동안 종종 교착 상태가 발생한다는 것입니다.

교착 상태가 발생할 가능성을 줄이기위한 "모범 사례"가 있습니까?

+0

후속 조치 : 난수 제안을 구현 한 후 교착 상태가 급격히 감소했습니다. 도움을 주신 모든 분들께 감사드립니다. – Jesse

답변

6

"교착 상태 가능성을 줄이기위한"모범 사례 "가 있습니까?

교착 상태는 2 개 (또는 그 이상)의 프로세스, 2 개 이상의 리소스 및 액세스를위한 두 개의 별개의 주문을 의미합니다.

공정 (1) A 및 B

2 공정 B를 얻을 및

모든 공정은 제 얻을한다면 A.

기다리고 갖고 얻어야 데드락의 발생이 감소된다.

전체 페이지에서 교착 상태에 빠졌으므로 모든 사람이 거래를 시작하기 위해 동일한 페이지를 가져 오는 것은 어렵습니다.

행이 페이지간에 널리 혼동되지 않도록하여 충돌을 줄일 수 있습니다.

효율적으로 단일 스레드 응용 프로그램을 구현하는 "You Must Get This First"행을 도입하여 충돌을 줄일 수 있습니다.

+0

행을 분산시킬 수있는 방법이 있습니까? 데이터베이스가 행을 고정 할 페이지를 결정하는 방법을 잘 모르겠습니다 (키를 기반으로한다고 가정합니다). 임의의 숫자 (또는 UUID) 인 키에 다른 필드를 추가하면 행을 분산하는 데 도움이됩니까? – Jesse

+0

@Jesse : UUID는 아마도 랜덤 일 것입니다. 꽤 무작위 인 난수 생성기가 있습니다. 또한 충돌을 일으키는 속성과 다른 속성을 사용하여 색인을 생성 할 수 있습니다. 우편 번호 예를 들면. –

관련 문제