잠금 에스컬레이션

잠금 에스컬레이션은 행과 같은 많은 미세 잠금을 테이블과 같은 더 적은 성긴 잠금으로 변환하는 프로세스입니다. 잠금 에스컬레이션을 사용하면 시스템 오버헤드가 줄어듭니다.

트랜잭션이 에스컬레이션 임계값을 초과하면 Microsoft SQL Server Compact 4.0에서 자동으로 행 잠금 및 페이지 잠금을 테이블 잠금으로 에스컬레이션합니다. SQL Server Compact 4.0에서는 행에서 테이블로 또는 페이지에서 테이블로 잠금 에스컬레이션이 발생할 수 있지만 행에서 페이지로는 잠금 에스컬레이션이 발생할 수 없습니다. 즉, 에스컬레이션이 테이블 수준에서 발생할 경우 테이블보다 낮은 잠금에 대한 요청은 생성할 수 없습니다.

예를 들어 트랜잭션이 테이블의 행에서 발생하는 경우 SQL Server Compact 4.0에서는 영향을 받는 행을 자동으로 잠그며 이러한 행이 포함된 페이지 및 테이블에 보다 높은 수준의 의도 잠금을 설정합니다. 관련된 인덱스 페이지도 모두 잠깁니다. 트랜잭션에서 설정한 잠금 수가 임계값을 초과하는 경우 SQL Server Compact 4.0에서는 테이블의 의도 잠금을 더 강력한 잠금으로 변경합니다. 예를 들어 IX(고의 배타) 잠금을 X(배타) 잠금으로 변경할 수 있습니다. 더 강력한 잠금을 얻은 후 테이블에서 트랜잭션이 보유한 모든 페이지 수준 및 행 수준 잠금이 해제됩니다.

잠금 요청으로 인해 특정 잠금 에스컬레이션 임계값을 초과할 경우 잠금 에스컬레이션은 테이블별로 발생합니다. 형식에 상관없이 테이블보다 낮은 수준의 잠금은 모두 임계값으로 계산됩니다. 내부 작업에 필요한 모든 잠금이 이 임계값으로 계산되기 때문에 에스컬레이션 임계값은 대략적인 값으로만 고려해야 합니다. 에스컬레이션이 예상보다 일찍 발생할 수 있습니다.

잠금 충돌로 인해 에스컬레이션이 불가능한 경우 트랜잭션은 계속되며 나중에 에스컬레이션을 다시 시도할 수 있습니다.

참고 참고

임시 테이블 잠금을 제외하고 의도 잠금, 행 잠금 및 페이지 잠금이 모두 에스컬레이션 개수로 계산됩니다. 특정 테이블에서 의도 잠금, 행 잠금 및 페이지 잠금의 합계가 에스컬레이션 임계값을 초과할 경우 에스컬레이션이 발생합니다.

다음 코드 예와 같이 잠금 에스컬레이션 임계값을 설정하여 세션당 잠금 에스컬레이션을 제어할 수 있습니다.

SET LOCK_ESCALATION 1000;

이 설정은 데이터베이스의 모든 테이블에 영향을 미칩니다. 기본값은 100입니다.

표시: