안녕하세요 망설이다가 문의 드립니다.
첨부파일에 나타난 SQL server의 Lock모니터에서 149번 세션의 select구문에의해 DB가 lock걸려
일시적 장애가 발생했다고 합니다. (DBA왈)
저 나름 해석한 부분이 맞는지 확인 부탁드려봅니다.
첨부파일의 이미지상 149번 세션은 1번 row의 select후 (해당 procedure는 132ms로 엄청 빠르며, 정말 단순 select이며 plan은 PK인덱스 스켄)
바로 Update구문을 수행하면서 Lock을 걸었을것이고 이에 다른 세션들(125,188...)이 대기하지 않았나 판단합니다.
맞나요? ㅠㅠ
도움이 절실한 상태입니다. (SQL Server는 좀 낮설어서요 ㅠㅠ)
안녕하세요
회신 감사드리며, select에는 nolock 힌트가 없습니다. 해당 프로시저는 아래와 같습니다. 제가 해석한 부분이 맞나요?
USE [DBORG]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
-- **************************************************************************
ALTER PROCEDURE [dbo].[flx_spOperationStepXmlSelectByPK]
(
@ID int,
@Active bit,
@__SupportBLOB__ int
)
AS
SELECT
[ID] AS [ID],
[FUID] AS [FUID],
[Properties] AS [Properties],
[ReferenceID] AS [ReferenceID],
[LastUpdateOn] AS [LastUpdateOn],
[LastUpdatedBy] AS [LastUpdatedBy],
[CreatedOn] AS [CreatedOn],
[CreatedBy] AS [CreatedBy],
[Active] AS [Active],
[LastDeleteOn] AS [LastDeleteOn],
[LastDeletedBy] AS [LastDeletedBy],
[LastReactivateOn] AS [LastReactivateOn],
[LastReactivatedBy] AS [LastReactivatedBy],
[ArchiveID] AS [ArchiveID],
[LastArchiveOn] AS [LastArchiveOn],
[LastArchivedBy] AS [LastArchivedBy],
[LastRestoreOn] AS [LastRestoreOn],
[LastRestoredBy] AS [LastRestoredBy],
[RowVersionStamp] AS [RowVersionStamp]
FROM
[OPERATION_STEP]
WHERE
(
([OPERATION_STEP].[ID] = @ID)
)
AND
([OPERATION_STEP].[Active] = @Active)
축구쟁이님 확인 감사드립니다.
select(149)와 update(125)간에 deadlock이 발생된 것으로 말씀하셨는데.
149번 세션의 select는 123ms이며, 125번 세션은 3초이상 대기로 나타나는데요.
저는 왜 이해가 안될까요?
아~~그리고 125번 세션의 sql구문입니다.
UPDATE DI_CO_MI_SERIAL
SET TransactionStatus = 'Y'
WHERE Facility = @Facility
AND WorkCenter = @WorkCenter
AND SerialNo = @SerialNo
AND Status = @Status