우리의 애플리케이션에서는 C# 코드의 트랜잭션에서 15 개의 테이블에 레코드를 삽입합니다. 이를 위해 각 테이블에 대해 하나의 insert 문을 만들고 하나의 쿼리에 모두 추가하고 'ExecuteNonQuery'를 사용하여 테이블에 레코드를 삽입합니다. 삽입을 모든 테이블에서 수행하고 일치하지 않는 데이터는 원하지 않기 때문에 트랜잭션에서 사용합니다.테이블에 데이터를 삽입하는 동안 테이블 잠금을 피하는 방법
이 기능은 서비스로 작성되며 서비스 (동일한 서비스, 다른 설치)가이 작업 (테이블에 데이터 삽입)을 동시에 수행합니다. 이 서비스는 테이블에 전혀 다른 행을 삽입하며 어떤 방식으로도 종속되지 않습니다.
그러나 이러한 서비스를 실행하면 삽입 문에 교착 상태가 발생합니다.
코드는 다음과 같다 :
- 열기 DB 연결
- 트랜잭션을 커밋
- 테이블에 거래를
- 삽입 데이터를 시작합니다.
모든 서비스는 동일한 15 개의 테이블에있는 서로 다른 데이터 집합에서이 단계를 수행합니다.
SQL 프로파일 러 추적은 삽입 중에 이러한 테이블에 배타적 잠금이 있음을 나타냅니다.
테이블에 삽입 명령문을 실행하고 교착 상태로 끝내는 동안 테이블 수준 잠금이 필요한 이유를 제안하십시오. 그리고 그것을 막을 수있는 최선의 방법은 무엇입니까?
다음을 참조하십시오. http://www.sql-server-performance.com/2006/deadlocks/ – hungryMind
트랜잭션을 사용하지 않을 때 여전히 잠금을 유지합니까? –
SQL Server 트랜잭션 또는 .net? .net 인 경우 코드를 표시하십시오 – gbn