SQL Server 2008 Enterprise를 사용하고 있습니다. 같은 시간에 여러 스레드에 의해 실행되는 경우 왜이 저장 프로 시저의 단일 삭제 문이 교착 상태를 일으키는 지 궁금합니다.단일 SQL 삭제 명령문으로 인해 교착 상태가 발생하는 이유는 무엇입니까?
Delete 문에서 Param1은 FooTable 테이블의 열이고 Param1은 다른 테이블의 외부 키입니다 (다른 테이블의 다른 기본 키 클러스터형 인덱스 열을 참조 함). 테이블 FooTable에 대한 Param1 자체에는 색인이 없습니다. FooTable에는 클러스터 된 기본 키로 사용되지만 Param1 열로는 사용되지 않는 다른 열이 있습니다. 사전에
create PROCEDURE [dbo].[FooProc]
(
@Param1 int
,@Param2 int
,@Param3 int
)
AS
DELETE FooTable WHERE Param1 = @Param1
INSERT INTO FooTable
(
Param1
,Param2
,Param3
)
VALUES
(
@Param1
,@Param2
,@Param3
)
DECLARE @ID bigint
SET @ID = ISNULL(@@Identity,-1)
IF @ID > 0
BEGIN
SELECT IdentityStr FROM FooTable WHERE ID = @ID
END
덕분에, 조지
교착 상태 그래프를 캡처하여 게시물에 추가하십시오. 그때까지는 우리 모두가 추측하고 있습니다. 교착 상태 그래프를 포착하는 방법은 http://msdn.microsoft.com/en-us/library/ms190465.aspx를 참조하십시오. –
안녕하세요 Remus, 교착 상태를 시작하는 방법? 스트레스 테스트를 수행하는 도구 또는 샘플 코드 – George2
프로 시저를 살펴보면 Param1을 기반으로 모든 행을 삭제 한 다음 단 하나의 행만 삽입한다는 것을 알았습니다. UPDATE 문을 사용할 수 없습니까? – ZippyV