Quando executo sp_whoisactive
em meu servidor, geralmente mostra instruções de criação sendo executadas para procedimentos armazenados, mas isso não faz sentido, pois o procedimento já existe.
Veja o seguinte exemplo:
dd hh:mm:ss.mss session_id sql_text
00 00:00:00.120 103 CREATE PROCEDURE [dbo].[TempGetStateItemExclusive3]
00 00:00:00.140 274 CREATE PROCEDURE [dbo].[TempGetStateItemExclusive3]
00 00:00:00.133 324 CREATE PROCEDURE [dbo].[TempGetStateItemExclusive3]
Isso é de uma execução sp_whoisactive
, parece que há três sessões criando o procedimento. Isso é algo que estou interpretando mal ou, se não, como posso descobrir de onde isso está vindo? Essas instruções de criação estão bloqueando as inserções reais.
estou executando
EXEC sp_WhoIsActive
@find_block_leaders = 1,
@sort_order = '[blocked_session_count] DESC',
@get_full_inner_text = 1
O lote que está sendo executado é (que é um procedimento armazenado do estado de sessão baseado no asp.net SQL Server, mas estou vendo exatamente a mesma coisa para outros procedimentos armazenados também)
CREATE PROCEDURE [dbo].[TempGetStateItemExclusive3]
@id tSessionId,
@itemShort tSessionItemShort OUTPUT,
@locked bit OUTPUT,
@lockAge int OUTPUT,
@lockCookie int OUTPUT,
@actionFlags int OUTPUT
AS
DECLARE @textptr AS tTextPtr
DECLARE @length AS int
DECLARE @now AS datetime
DECLARE @nowLocal AS datetime
SET @now = GETUTCDATE()
SET @nowLocal = GETDATE()
UPDATE dbo.ASPStateTempSessions
SET Expires = DATEADD(n, Timeout, @now),
LockDate = CASE Locked
WHEN 0 THEN @now
ELSE LockDate
END,
LockDateLocal = CASE Locked
WHEN 0 THEN @nowLocal
ELSE LockDateLocal
END,
@lockAge = CASE Locked
WHEN 0 THEN 0
ELSE DATEDIFF(second, LockDate, @now)
END,
@lockCookie = LockCookie = CASE Locked
WHEN 0 THEN LockCookie + 1
ELSE LockCookie
END,
@itemShort = CASE Locked
WHEN 0 THEN SessionItemShort
ELSE NULL
END,
@textptr = CASE Locked
WHEN 0 THEN TEXTPTR(SessionItemLong)
ELSE NULL
END,
@length = CASE Locked
WHEN 0 THEN DATALENGTH(SessionItemLong)
ELSE NULL
END,
@locked = Locked,
Locked = 1,
/* If the Uninitialized flag (0x1) if it is set,
remove it and return InitializeItem (0x1) in actionFlags */
Flags = CASE
WHEN (Flags & 1) <> 0 THEN (Flags & ~1)
ELSE Flags
END,
@actionFlags = CASE
WHEN (Flags & 1) <> 0 THEN 1
ELSE 0
END
WHERE SessionId = @id
IF @length IS NOT NULL BEGIN
READTEXT dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length
END
RETURN 0
Por favor, mostre-nos os parâmetros da execução de SP_whoIsActive. Lembro que havia um parâmetro alternado entre mostrar a instrução real ou o lote/procedimento que continha essa instrução.
Se não estou errado:
deve ser o único. Mude para 0 e veja se está mudando a forma como a saída é mostrada.