인덱스 잠금 사용자 지정

Microsoft SQL Server 데이터베이스 엔진 은 대부분의 경우 쿼리에 가장 적합한 잠금 세분성을 자동으로 선택하는 동적 잠금 전략을 사용합니다. 이해하기 쉽고 일관된 액세스 패턴의 경우 인덱스에 사용할 수 있는 잠금 수준을 제한하는 것이 좋습니다.

예를 들어 데이터베이스 응용 프로그램에서 일괄 처리를 통해 매주 새로 고쳐지는 조회 테이블을 사용할 수 있습니다. 가장 효율적인 잠금 전략은 페이지 및 행 잠금을 해제하여 모든 동시 읽기 트랜잭션이 해당 테이블에 대해 공유(S) 잠금을 얻도록 함으로써 오버헤드를 줄이는 것입니다. 주간 일괄 업데이트 중 업데이트 프로세스는 배타(X) 잠금을 얻은 다음 전체 테이블을 업데이트할 수 있습니다.

인덱스에 사용되는 잠금의 세분성은 CREATE INDEX 및 ALTER INDEX 문을 사용하여 설정할 수 있습니다. 또한 CREATE TABLE 및 ALTER TABLE 문을 사용하여 PRIMARY KEY 및 UNIQUE 제약 조건에 대한 잠금 세분성을 설정할 수도 있습니다. 이전 버전과의 호환성을 위해 sp_indexoption 시스템 저장 프로시저에서도 세분성을 설정할 수 있습니다. 특정 인덱스에 대한 현재 잠금 옵션을 표시하려면 INDEXPROPERTY 함수를 사용합니다. 페이지 수준 잠금, 행 수준 잠금 또는 페이지 수준 및 행 수준 잠금의 혼합 방법은 인덱스에 따라 허용되지 않을 수 있습니다.

허용되지 않는 잠금 허용되는 잠금

페이지 수준

행 수준 및 테이블 수준 잠금

행 수준

페이지 수준 및 테이블 수준 잠금

페이지 수준 및 행 수준

테이블 수준 잠금

예를 들어 테이블이 연결 지점으로 알려진 경우에는 페이지 수준 잠금을 금지하여 행 수준 잠금만 허용하는 것이 좋습니다. 또는 인덱스 또는 테이블에 액세스하는 데 항상 테이블 검색이 사용되면 페이지 수준 및 행 수준 잠금을 금지하고 테이블 수준 잠금만 허용하는 것이 좋습니다.

ms189076.note(ko-kr,SQL.90).gif중요:
데이터베이스 엔진 쿼리 최적화 프로그램은 대부분의 경우 적절한 잠금 세분성을 선택합니다. 따라서 쿼리 최적화 프로그램의 선택을 무시하지 않는 것이 좋습니다. 잠금 수준을 허용하지 않으면 테이블 또는 인덱스의 동시성에 역효과를 줄 수 있습니다. 예를 들어 여러 사용자가 자주 액세스하는 큰 테이블에 대해 테이블 수준의 잠금만 지정하면 성능에 상당한 영향을 줄 수 있습니다. 사용자가 테이블에 액세스하려면 테이블 수준의 잠금이 해제될 때까지 기다려야 합니다.

참고 항목

관련 자료

ALTER INDEX(Transact-SQL)
ALTER TABLE(Transact-SQL)
CREATE INDEX(Transact-SQL)
CREATE TABLE(Transact-SQL)
NDEXPROPERTY(Transact-SQL)
sp_indexoption(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기