在论坛上看到:分布式死锁..人为干预事务。。 无法由SQL Server自动检测到。问题:
1:SQL Server自动检测到的死锁,就会自动[/b]把其中一个事务[b]kill吗?
2:无法由SQL Server自动检测到的死锁,数据库管理员怎么去识别它和kill它?
3:在一个数据库上,假如很多个连接,每个连接上'一个事务,事务中只有一条sql,如update  or delete'
会导致死锁吗?
  假设会导致死锁的话,是什么原因?会自动把其中一或几个连接kill吗?

解决方案 »

  1.   

    1:SQL Server自动检测到的死锁,就会自动把其中一个事务kill吗?
      

  2.   

    1 处理死锁和设置死锁优先级 死锁就是多个用户申请不同封锁,由于申请者均拥有一部分封锁权而又等待其他用户拥有的部分封锁而引起的无休止的等待 可以使用SET DEADLOCK_PRIORITY控制在发生死锁情况时会话的反应方式。如果两个进程都锁定数据,并且直到其它进程释放自己的锁时,每个进程才能释放自己的锁,即发生死锁情况。 2 处理超时和设置锁超时持续时间。 @@LOCK_TIMEOUT 返回当前会话的当前锁超时设置,单位为毫秒 SET LOCK_TIMEOUT 设置允许应用程序设置语句等待阻塞资源的最长时间。当语句等待的时间大于 LOCK_TIMEOUT 设置时,系统将自动取消阻塞的语句,并给应用程序返回"已超过了锁请求超时时段"的 1222 号错误信息 示例 
    下例将锁超时期限设置为 1,800 毫秒。
    SET LOCK_TIMEOUT 1800 3) 设置事务隔离级别。 4 ) 对 SELECT、INSERT、UPDATE 和 DELETE 语句使用表级锁定提示。 5) 配置索引的锁定粒度
    可以使用 sp_indexoption 系统存储过程来设置用于索引的锁定粒度 六 查看锁的信息 1 执行 EXEC SP_LOCK 报告有关锁的信息
    2 查询分析器中按Ctrl+2可以看到锁的信息 七 使用注意事项 如何避免死锁
    1 使用事务时,尽量缩短事务的逻辑处理过程,及早提交或回滚事务;
    2 设置死锁超时参数为合理范围,如:3分钟-10分种;超过时间,自动放弃本次操作,避免进程悬挂;
    3 优化程序,检查并避免死锁现象出现;
    4 .对所有的脚本和SP都要仔细测试,在正是版本之前。
    5 所有的SP都要有错误处理(通过@error)
    6 一般不要修改SQL SERVER事务的默认级别。不推荐强行加锁 解决问题 如何对行 表 数据库加锁 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2009/09/21/4574867.aspx
      

  3.   

    死锁
    增设table2(D,E)
    D E
    d1 e1
    d2 e2
    在第一个连接中执行以下语句
    begin tran
    update table1
    set A='aa'
    where B='b2' 
    waitfor delay '00:00:30'
    update table2
    set D='d5'
    where E='e1' 
    commit tran在第二个连接中执行以下语句
    begin tran
    update table2
    set D='d5'
    where E='e1' 
    waitfor delay '00:00:10'
    update table1
    set A='aa'
    where B='b2' 
    commit tran 同时执行,系统会检测出死锁,并中止进程 
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2009/09/21/4574867.aspx