Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > 总结 SQL Server 中死锁产生的原因及解决办法
【标  题】:总结 SQL Server 中死锁产生的原因及解决办法
【关键字】:SQL,Server,解决办法,SQL Server,Serv,SQL,Server
【来  源】:网络

总结 SQL Server 中死锁产生的原因及解决办法

Your Ad Here 其实所有的死锁最深层的原因就是一个:资源竞争
表现一:
一个用户A 访问表A(锁住了表A),然后又访问表B
另一个用户B 访问表B(锁住了表B),然后企图访问表A
这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了
同样用户B要等用户A释放表A才能继续这就死锁了
解决方法:
这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法
仔细分析你程序的逻辑,
1:尽量避免同时锁定两个资源
2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源.

表现二:
用户A读一条纪录,然后修改该条纪录
这是用户B修改该条纪录
这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释
放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。
这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。
解决方法:
让用户A的事务(即先读后写类型的操作),在select 时就是用Update lock
语法如下:
select * from table1 with(updlock) where ....

一个检测一个字符串在另一个字符串当中出现几次的函数:【上一篇】
ADO使用SELECT语法二:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 用getopt()处理命令行多参数
  • Linux 编程之GPU计算
  • Dreamweaver MX 2004 入门教程之界面详解(1)
  • 鼠标看图
  • Web服务搜索与执行引擎三——系统设计方案
  • 无刷新网页[数据岛技术应用]
  • 游戏开发技巧四
  • 用 PHP 开发健壮的代码
  • The Choice of the Web Framework
  • SQL*Loader使用指南
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.