우리는 잠시 동안 낙관적 잠금 예외를받는 시스템을 가지고 있습니다. 우리는 코드에서이 문제를 해결했지만 JPA 2를 살펴본 후이를 처리하기 위해 주석 (@Version)이 있음을 확인했습니다.
우리는 테이블에 대해 둘 이상의 트랜잭션이 작동하고 있으며 전체 테이블 잠금을 사용하면 변경 사항이 동일한 레코드에 적용되지 않았더라도 낙관적 인 잠금 예외가 발생합니다.낙관적 잠금 및 전체 테이블 잠금
우리는 JBoss 4.2 서버에서 최대 절전 모드를 사용하고 있으며 데이터베이스는 MySQL 또는 SQL Server 일 수 있습니다.
대신 @Version을 사용하도록 변경하면 두 데이터베이스에서 행 잠금이 적용됩니까? 아니면 전체 테이블 잠금으로 인해 낙관적 인 잠금 예외가 발생할 수 있습니까?
편집 : 우리가 실제로 참조하는 것은 낙관적 잠금 오류가 아니라 교착 상태
:
SQLServerException : 트랜잭션 와 잠금 리소스를 다른 프로세스를 교착 및 교착 상태로 선택되었습니다 희생자. 트랜잭션을 재실행하십시오.
코드에서이 문제를 처리하지만 @Version이이 경우 도움이 될지 궁금합니다.
적어도 하나의 경우에이 교착 상태는 두 개의 클라이언트가 자신의 데이터로 작업하는 테이블 잠금에 의해 발생합니다.
이 질문은 낙관적 동시성 제어 (일명 낙관적 잠금) 및 테이블 및 행에 대한 데이터베이스 잠금의 개념을 혼합합니다. –