SQL Server 2005 睡眠 SPID 阻塞另一个 SPID

问题描述 投票:0回答:3

我发现我的 SQL Server 数据库有许多休眠进程,看起来这些休眠 SPID 之一正在阻塞另一个进程,并且该进程也被挂起...

有人可以解释一下吗...

1.) 睡眠进程如何阻塞另一个进程? 2.) 我看到很多睡眠进程...这正常吗?

谢谢

sql sql-server blocking
3个回答
5
投票

锁的持有时间不同,但最常见的阻塞锁(X 锁)会在事务的持续时间内持有。由于事务生命周期与批处理生命周期完全无关,因此有一个休眠 SPID 拥有锁是绝对正常的,它仅仅意味着客户端已经启动了一个事务并执行了一些更新。一旦客户端决定继续并向服务器发出命令来提交或回滚事务,阻塞就会消失。

其他频繁的锁定是数据库会话锁,它是使用数据库的连接持有的共享锁。维护连接的简单行为将持有锁,但通常这只与尝试获取数据库上的 X 锁的操作冲突,例如 ALTER DATABASE DDL。

还有更深奥的情况,例如恢复后持有的两阶段提交锁,但这些可能不是您的问题。您所看到的很可能是用户从 SSMS 运行某些内容并忘记提交的微不足道的情况之一,或者保存长事务的应用程序甚至可能正在泄漏它们。


3
投票

1.) 睡眠进程如何阻塞另一个进程?

一个睡眠进程正在等待工作。仔细检查是否真的有睡眠进程阻塞了某些东西,因为这真的不太可能。

2.)我看到很多睡眠进程...这正常吗?

许多睡眠过程是完全正常的。例如,单个 Web 服务器的连接池通常保持 10 个进程打开。这对于性能来说非常有用。

这里是进程状态列表

Status      Meaning
---------------------------------------------------------------------------------
Background  The SPID is running a background task, such as deadlock detection.
Sleeping    The SPID is not currently executing. This usually indicates that the 
            SPID is awaiting a command from the application.
Running     The SPID is currently running on a scheduler.
Runnable    The SPID is in the runnable queue of a scheduler and waiting to get 
            scheduler time.
Sos_scheduler_yield The SPID was running, but it has voluntarily yielded its 
            time slice on the scheduler to allow another SPID to acquire 
            scheduler time.
Suspended   The SPID is waiting for an event, such as a lock or a latch.
Rollback    The SPID is in rollback of a transaction.
Defwakeup   Indicates that the SPID is waiting for a resource that is in the 
            process of being freed. The waitresource field should indicate the 
            resource in question.

-1
投票

睡眠进程是否正在等待其他事件,例如网络请求?今天我们在一个网络应用程序中遇到了这个问题,该应用程序在完成请求后仍保持事务打开状态。然后,由于打开的事务,它只是坐在那里等待下一个请求,同时锁定数据库。

我们现在已经解决了这个问题,根据我们所犯的错误,我可以建议您检查以下两件事:

(1) 确保所有

BEGIN TRANSACTION
语句末尾都有相应的
COMMIT TRANSACTION
。否则,您的应用程序可能会在等待下一个用户请求时错误地保持事务打开。

(2) 检查

THROW
的所有使用,以查看是否有任何
THROW
语句位于事务内部。如果你想在事务期间抛出错误,你首先必须在
ROLLBACK TRANSACTION
之前先
THROW
,否则 SQL Server 将使事务保持打开状态并锁定数据库。

© www.soinside.com 2019 - 2024. All rights reserved.