首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL锁进程如何理解、如何避免以及预防

2012-10-18 
SQL锁进程怎么理解、如何处理以及预防最近数据库(SQL Server 2000 sp4)出现锁问题(阻塞,正在阻塞)。问题发现

SQL锁进程怎么理解、如何处理以及预防
最近数据库(SQL Server 2000 sp4)出现锁问题(阻塞,正在阻塞)。

问题发现是在软件登录后,做某些查询没有返回结果。

通过“企业管理器”连接后,在“管理”->“当前活动”->“锁/进程”下看到有:
  spid 53  
  spid 54 (阻塞)
  spid 55 (阻塞)
  spid 56
  spid 57 (正在阻塞)


再查看各spid节点下,列出一些sql操作,有些是查询语句、有些是插入语句

由于一时不知道如何处理,只好简单地“取消进程”


“取消进程”会导致部分语句没有执行,导致数据不完整。



现在有以下问题:
1)出现“阻塞”情况后,并不是所有的SQL语句都被禁止执行,不知道是按什么规则来决定

2)什么原因为导致“阻塞”

3)“阻塞”如何处理比较好?能否把阻塞的spid节点下的sql语句手工执行一遍?

4)如何预防?




[解决办法]
现在有以下问题:
1)出现“阻塞”情况后,并不是所有的SQL语句都被禁止执行,不知道是按什么规则来决定
堵塞状图就是处于等待别的事务释放锁的状态
如:A事务对资源持有排他锁 B对字段申请的任何锁都要等待A事务锁释放后才能持有申请的锁
2)什么原因为导致“阻塞”
堵塞是正常
3)“阻塞”如何处理比较好?能否把阻塞的spid节点下的sql语句手工执行一遍?
尽量让事务持有锁的时间减少-->涉及的问题比较多 如隔离级别 语句是否优化 是否按照顺序访问等等
4)如何预防?
堵塞是正常的 只能尽量减少锁持有时间
如果你查询能接受脏数据 可以再查询表指定 nolock 不申请共享锁
[解决办法]
优化数据库,允许脏读。
[解决办法]
参考 http://www.cnblogs.com/WizardWu/archive/2010/08/13/1798645.html

热点排行