2012-08-16 5 views
0

간단한 질문이지만 몇 가지 명확한 해결책이있는 데 며칠을 낭비했습니다.교착 상태를 해결하는 가장 좋은 방법

저는 spring jdbc 템플릿을 DAO 레이어 mssql sever 2005로 사용하고 있습니다. 데이터베이스에는 주문 입력 시스템이 있습니다. 이제 시스템에 5 명 이상의 사용자가있을 때 많은 데드락 시나리오가 발생합니다. 다른 사람들이 기존 주문을 업데이트하는 동안 사람들이 새로운 주문을 만들려고 할 때 자물쇠가 생기는 것 같습니다. 동일한 테이블에 대한 INSERT 및 UPDATE 문 사이에 충돌이있는 것 같습니다.

이 문제를 해결하기 위해 몇 가지 작업을 수행했지만 그 중 일부는 작동하지 않았습니다. 그래서 java.util.semaphore 또는 Lock을 도입하고 스레드의 동시 액세스를 제어하려고합니다. 아니면 동기화 된 메소드 나 블록을 사용할 수 있습니다.

당신은 어떻게 생각합니까? 데이터베이스 서버에서이를 처리하는 더 좋은 방법이 있습니까?

감사합니다.

답변

0

sp_getApplock을 사용하여 데이터베이스 측에서 동일한 세마포어 솔루션을 구현할 수 있습니다. 그러나 대부분의 시간은 필요하지 않습니다. 교착 상태의 종류에 따라 다른 종류의 치료가 필요합니다. 일반적인 교착 상태 패턴을 수정하는 방법을 보려면 아래 링크의 게시물을보십시오. 추적 플래그 1222와 특정 교착 상태를 캡처하고 여기에 추적 정보를 게시 할 경우 http://sqlindian.com/2012/07/06/sql-server-deadlocks-and-live-lockscommon-patterns/

, 우리는 더 당신을 도울 수있을 것입니다.