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