2011-10-31 5 views
1

SQL Server (2008)에서 에스컬레이션을 잠그고 잠그는 것에 대해 누군가 설명 할 수 있는지 또는 좋은 기사를 알려주고 있는지 궁금합니다.SQL Server 행/페이지/테이블 잠금, 언제 발생합니까?

(행/페이지/테이블) 잠금이 발생할 가능성이 있거나 시나리오의 SQL Server가 잠금을 확대하기로 결정할 때 더 잘 이해하고 싶습니다.

예를 들어, 지정된 트랜잭션이없는 delete 문은 많은 행이 삭제되거나 명시 적 트랜잭션을 사용할 때만 잠금이 발생하면 테이블 잠금이 발생합니까?

이 질문은 잠재적으로 큰 질문이지만 모든 의견을 환영합니다.

더크

+2

은 풍부한 정보가

SELECT RESOURCE_TYPE, resource_associated_entity_id, request_status, request_mode, request_session_id는 sys.dm_tran_locks FROM resource_description 를 잠금 정보를 반환합니다 온라인 사용 가능 : SQL Server 온라인 설명서 검색 (BOL) –

답변

2

질문 : SQL Server 행/페이지/테이블 잠금, 언제 발생합니까?

응답 : 잠금 에스컬레이션을 언급하고 있습니다. 하나의 tsql 문이 하나의 파티션에서 적어도 5000 개의 잠금을 획득 할 때 하나의 파티션되지 않은 테이블 또는 인덱스 (2)에서 최소 5000 개의 잠금을 획득하면 잠금 에스컬레이션 (행/페이지/테이블)이 발생 함 (1) 분할 된 테이블 (3) 인스턴스의 잠금 수가 메모리 또는 구성 임계 값을 초과하는 경우. (4) 잠금 충돌로 인해 에스컬레이션이 방지되는 경우 SQL Server는 1,250 개의 새 잠금이 필요할 때마다 잠금 에스컬레이션을 트리거합니다.

문이 하나의 인덱스에서 3,000 개의 잠금을 가져오고 동일한 테이블의 다른 인덱스에서 3,000 개의 잠금을 획득하면 잠금 에스컬레이션이 트리거되지 않습니다. 마 y 가지로, 명령.에 테이블에 대한 자체 조인이 있고 테이블에 대한 각 참조가 테이블에서 3,000 개의 잠금 만 획득하는 경우 잠금 에스 C 레이션이 트리거되지 않습니다.

잠금 에스컬레이션은 에스컬레이션이 트리거 될 때 액세스 된 테이블에서만 발생합니다.

잠금 수가 잠금 에스컬레이션의 메모리 임계 값보다 커질 때마다 데이터베이스 엔진이 잠금 에스컬레이션을 트리거합니다. 메모리 임계 값은 잠금 구성 옵션 설정에 따라 다릅니다.

잠금 옵션이 기본 설정 인 0으로 설정된 경우 잠금 개체가 사용하는 메모리가 메모리의 24 % 인 경우 잠금 수준 올리기 임계 값에 도달합니다 AWE 메모리를 제외하고 데이터베이스 엔진에서 사용됩니다. 잠금을 표시하는 데 사용되는 데이터 구조는 약 100 바이트 길이입니다. 데이터베이스 엔진이 다양한 작업 부하에 맞게 메모리를 동적으로 가져 와서 해제하므로이 임계 값은 동적입니다.

locks 옵션이 0이 아닌 값인 경우 잠금 옵션 값의 잠금 에스컬레이션 임계 값은 40 % (또는 메모리 부족시 더 적음)입니다.

다음은 데이터베이스 인스턴스에 대한 resource_database_id는 =

관련 문제