난 당신이 잠금을 에스컬레이션, https://technet.microsoft.com/en-us/library/ms184286(v=sql.105).aspx, 나쁜 선택과 색인 및 블로킹에 대한 몇 가지 가능성에 의한 테이블 스캔과 함께 생각하는 것 같아요.
클러스터되지 않은 색인에 대한 통계는 특정 값에 대해 테이블에서 리턴 된 행 수가 임계 값을 초과 함을 보여 주면, 옵티마이 저는 인덱스 스캔 대신 대응하는 행을 찾기 위해 테이블 스캔을 사용하도록 선택합니다 수량이 느리기 때문에 해당 북마크 조회가 필요합니다.
나는 일반적으로 사람들에게 그 비율을 5 % 이하로 원하지만, 때로는 여전히 10 % 정도까지 색인을 찾습니다. 80 %에서 확실히 테이블 스캔으로 이동합니다.
또한 쿼리가 테이블 스캔을 수행 중이므로 쿼리는 테이블의 모든 단일 행에서 일종의 잠금을 획득 할 수 있어야합니다. 업데이트 수행을 실행하는 다른 쿼리가 있거나 단일 행에서도 잠금을 얻지 못하는 경우 쿼리를 기다려야합니다.
잠금 에스컬레이션의 경우 백분율은 아니지만 특정 마법 번호는 5,000입니다. 일반적으로 쿼리는 행 잠금을 사용하여 행 읽기를 시작합니다. 단일 쿼리가 5,000 개 이상의 행을 읽으면 행 및/또는 페이지 잠금에서 전체 테이블 잠금까지 테이블에 대해 사용중인 잠금을 확대합니다.
다른 쿼리가 동일한 작업을 수행하려고 시도 할 수 있기 때문에 교착 상태가 발생하는 경우입니다.
이러한 잠금은 삽입/업데이트와 관련이 없습니다.
이것은 실제 것입니다. 아니오, NOLOCK을 사용해야한다는 의미는 아닙니다. 교착 상태에 문제가있는 경우 READPAST, TABLOCK 또는 TABLOCKX, https://msdn.microsoft.com/en-us/library/ms187373.aspx을 보는 것이 훨씬 좋습니다.
그냥 습관적으로 벗어나지 말고 실제로 문제가있는 트랜잭션 테이블이 많은 특정 인스턴스를 조사하십시오.
[SQL Server의 가능한 복제본 - "with (nolock)"을 사용해야하는 경우] (http://stackoverflow.com/questions/686724/sql-server-when-should-you-use-with-nolock) – Igor
허용 된 대답을 가능한 복제본으로 읽는 경우에만 매우 신중해야합니다. NOLOCK은 단순히 더티 읽기보다 더 사악해질 수 있습니다. 언젠가 전체 데이터 페이지를 놓칠 수 있습니다. 또는 여러 번 페이지를 읽을 수 있습니다. 이 기사에서는 NOLOCK에서 발생할 수있는 여러 가지 나쁜 점에 대해 다룹니다. http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ 좀 더 깊이있는 기사를 읽으려면 오해의 여지가있는 쿼리 힌트에 대해 깊이 들어가야합니다. –
다음은 SQL Server 동시성에 대한 몇 가지 정보를 제공하는 [무료 PDF] (http://www.sqlservercentral.com/articles/books/93946/)입니다. – BJones