ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL Server的Error 1229

SQL Server的Error 1229

原创 Linux操作系统 作者:andyxu 时间:2009-07-09 16:06:17 0 删除 编辑

今天管理的SQL Server遇到了Error 1229错误:
Error 1229:Process ID 102:51 owns resources that are blocking processes on scheduler 1.

一秒钟产生大量的application event,一段时间后会导致无法登入。重启几分钟后故障依然发生。

起初怀疑是发布订阅的job导致,后disable这些job(甚至关闭了sqlagent),仍然发生。

经过查询微软网站得知可能是由于process阻塞导致问题发生.

SQL Server 7.0
 Error 1223:Process ID %d:%d cannot acquire lock "%s" on resource %s because a potential deadlock exists on Scheduler %d for the resource.Process ID %d:%d holds a lock "%h" on this resource.

 SQL Server 2000
Error 1229:Process ID %d:%d owns resources that are blocking processes on scheduler %d.

新的错误信息包括以下几种。

扩展的锁定检测: 1223, 1229
调度程序挂起检测:17881, 17883
所有调度程序挂起检测: 17882, 17884

扩展的锁定检测

SQL Server 7.0
Error 1223:Process ID %d:%d cannot acquire lock "%s" on resource %s because a potential deadlock exists on Scheduler %d for the resource.Process ID %d:% d holds a lock "%h" on this resource.

参数描述:

等待的 SPID
等待的 ECID(子进程执行 ID)
锁定模式名
资源名
逻辑
UMS 调度程序 ID
拥有的 SPID
拥有的 ECID
拥有的资源名

SQL Server 2000
Error 1229:Process ID %d:%d owns resources that are blocking processes on scheduler %d.

参数描述:

拥有的 SPID
拥有的 ECID(子进程执行 ID)
拥有的逻辑 UMS 调度程序 ID

UMS
为了更好地理解一些附加的运行状况诊断,您必须首先理解 SQL Server 是如何使用 User Mode Scheduling (UMS) Ums.dll 帮助文件的。
SQL Server 7.0 和 Microsoft SQL Server 2000 都使用逻辑调度程序。这些调度程序可帮助确保 SQL Server 能最大限度地利用与关键数据库操作路径相关的操作系统资源。UMS 层可确保 SQL Server 正确使用 Win32 事件,严格控制线程和纤程(或两者)调度对操作系统的可见性。通过严格控制可以运行的线程或纤程,当涉及数据库基元(如锁定)时,SQL Server 可以最大限度地使用 CPU。
例如,逻辑调度允许锁定等待线程休眠(Win32 事件上的 WaitForSingleObject),直到锁定所有者解除锁定并发出信号 (SetEvent) 将其唤醒。

示例情形

客户机 1 连接到 SQL Server 上。

客户机 1 运行 Transact-SQL 命令,该命令启动一个事务并执行数据修改。

例如:

begin tran update authors set au_lname = 'test'

客户机 1 变为 IDLE,显示为休眠状态,并等待 sysprocesses 系统表中带有打开事务的命令。

客户机 2 到 255:大约 254 多台客户机登录到 SQL Server,并从authors 表发布 SELECT 命令。这些客户机在初始更新时将全部阻塞。

客户机 1 试图提交事务,但是由于客户机 2 到 255 占用了所有工作线程,因此客户机 1 只能排队。

 

最后,通过修改SQL Server端口,禁止应用登陆,运行一段时间都正常,后修改回原端口,监控client端登陆,怀疑有程序存在并行事务,设置max degree of parallelism为1强制禁止并行事务并通知开发修改应用。

参考: 中文http://support.microsoft.com/kb/319892/zh-cn

              英文http://support.microsoft.com/default.aspx?scid=kb;en-us;319892

建议还是看英文版的好...

另外可以参看tolywang的文章:http://space.itpub.net/trackback.php?code=NArf3QAjhhe5xXyUlrdUlC4DA8kEU1QN%2FkYIlGSAxg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/110321/viewspace-608760/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-26

  • 博文量
    167
  • 访问量
    291938