완료하는 데 5 ~ 10 분 정도 걸리는 Select 프로세스가 있습니다.
현재 MS SQL 데이터베이스 엔진에 대한 힌트로 NOLOCK을 사용하지 않습니다.
동시에 동일한 데이터베이스 및 동일한 테이블에 업데이트 및 삽입을 수행하는 다른 프로세스가 있습니다.
첫 번째 프로세스가 시작되었으며 최근에 메시지와 함께 조기 종료됩니다.
SQLEXCEPTION : 트랜잭션이 다른 프로세스와 함께 잠금 리소스에서 교착 상태가되었고 교착 상태 희생자로 선택되었습니다.
이 첫 번째 프로세스는 동일한 조건으로 다른 사이트에서 실행되지만 데이터베이스가 더 작아서 문제의 select 문이 훨씬 더 짧은 시간 (약 30 초 정도)이 걸립니다. 이러한 다른 사이트에서는 이러한 다른 사이트에서 교착 상태 메시지가 표시되지 않습니다. 또한 처음에 문제가 발생한 사이트에서이 메시지를받지 못했지만 데이터베이스가 커짐에 따라 어느 정도 임계 값을 넘었을 것입니다. 내 질문은 다음과 같습니다.
- 트랜잭션을 실행하는 데 걸리는 시간으로 인해 관련 프로세스가 교착 상태로 표시 될 가능성이 높아질 수 있습니다.
- NOLOCK 힌트로 선택을 실행하면 문제가 제거됩니까?
- select 문에서 WHERE 절의 일부로 확인 된 datetime 필드로 인해 조회 시간이 느려진 것 같습니다. 이 필드를 기반으로 색인을 만들 수 있습니까? 권장됩니까?