请问什么情况会造成所有客户端停止不前没有响应?

时间:2022-10-30 20:54:54
阻塞、死锁?如果有阻塞、死锁的话sqlserver能自动处理,杀掉其中的一个进程吗?还是程序一直处于等待状态?

18 个解决方案

#1


阻塞一般不会被自动处理,死锁通常sqlserver会处理,不过不是所有死锁都会

#2


你要分析哪个才是源头,乱kill危险更大

#4


update 表 set bz=1 where id in(''234','2343','333','45')
多个客户同时操作上面语句会阻塞吗?id都不相同,并且id为主键,表中数据100万条。

#5


100万数据,如果索引不高效,会阻塞,因为可能会锁住一片的数据,不仅仅锁住自己那部分,然后刚好第二个客户要update这部分的数据时,就出现阻塞了。这个可能原因很多,不能简单说会还是不会,只能说“可能”

#6


那么这种阻塞会持续很长时间吗?1分钟2分钟还是5分钟?是不是过一会就全都通过了?

#7


引用 6 楼 up369 的回复:
那么这种阻塞会持续很长时间吗?1分钟2分钟还是5分钟?是不是过一会就全都通过了?
没有标准,比如平时可能阻塞1分钟,但是由于没有对索引维护,导致碎片很多,那么会越来越慢,我给你的联接里面你看看能不能用于侦测你的问题

#8


令外我的数据库中id是数值型的,我的update语句中是用单引号的,有没有影响?

#9


有,类型不等会出现隐式转换,使得索引无效,然后每次查询都是全表扫描,也大大地增大了阻塞的可能性。

#10


阻塞会一直等待,死锁有一个会被当作牺牲品Kill掉。

#11


引用 4 楼 up369 的回复:
update 表 set bz=1 where id in(''234','2343','333','45')
多个客户同时操作上面语句会阻塞吗?id都不相同,并且id为主键,表中数据100万条。


这几条记录可能位于同一页面或几个页面
会在这个页面都申请意向排他锁

#12


如果阻塞的话,其它客户向这个表插入数据,可以么?

#13


引用 12 楼 up369 的回复:
如果阻塞的话,其它客户向这个表插入数据,可以么?

也有可能堵塞
1)插入到其它事务已经获取锁的页面时候会堵塞
2)其它事务使用了序列化的隔离级别,不允许幻读

#14


SET LOCK_TIMEOUT
把这个语句放到应用程序里是否可行,当有阻塞超时就自动关闭。

#15


我建议你找到问题的根源,而不是用一些手段去暴力处理

#16


谢谢!
还有我想问一下版主
update 表 set 列1='a',列2='sdf',列3='sdfsdf' where 列4=1 and 列5=’sdf‘ and列6 =234 and 列7=1
这个语句如果wher子句条件太多是不是比1个条件的要锁更多的行?

#17


谢谢!
还有我想问一下版主
update biao set lie1=1,lie2='24234' where lie4=1 and lie5='asf' and lie6=234 and lie7='ss'
这种如果where子句条件太多是不是比where子句只有一个条件的,会锁更多的行?

#18


谢谢!
还有我想问一下版主
update biao set lie1=1,lie2='24234' where lie4=1 and lie5='asf' and lie6=234 and lie7='ss'
这种如果where子句条件太多是不是比where子句只有一个条件的,会锁更多的行?

#1


阻塞一般不会被自动处理,死锁通常sqlserver会处理,不过不是所有死锁都会

#2


你要分析哪个才是源头,乱kill危险更大

#3


#4


update 表 set bz=1 where id in(''234','2343','333','45')
多个客户同时操作上面语句会阻塞吗?id都不相同,并且id为主键,表中数据100万条。

#5


100万数据,如果索引不高效,会阻塞,因为可能会锁住一片的数据,不仅仅锁住自己那部分,然后刚好第二个客户要update这部分的数据时,就出现阻塞了。这个可能原因很多,不能简单说会还是不会,只能说“可能”

#6


那么这种阻塞会持续很长时间吗?1分钟2分钟还是5分钟?是不是过一会就全都通过了?

#7


引用 6 楼 up369 的回复:
那么这种阻塞会持续很长时间吗?1分钟2分钟还是5分钟?是不是过一会就全都通过了?
没有标准,比如平时可能阻塞1分钟,但是由于没有对索引维护,导致碎片很多,那么会越来越慢,我给你的联接里面你看看能不能用于侦测你的问题

#8


令外我的数据库中id是数值型的,我的update语句中是用单引号的,有没有影响?

#9


有,类型不等会出现隐式转换,使得索引无效,然后每次查询都是全表扫描,也大大地增大了阻塞的可能性。

#10


阻塞会一直等待,死锁有一个会被当作牺牲品Kill掉。

#11


引用 4 楼 up369 的回复:
update 表 set bz=1 where id in(''234','2343','333','45')
多个客户同时操作上面语句会阻塞吗?id都不相同,并且id为主键,表中数据100万条。


这几条记录可能位于同一页面或几个页面
会在这个页面都申请意向排他锁

#12


如果阻塞的话,其它客户向这个表插入数据,可以么?

#13


引用 12 楼 up369 的回复:
如果阻塞的话,其它客户向这个表插入数据,可以么?

也有可能堵塞
1)插入到其它事务已经获取锁的页面时候会堵塞
2)其它事务使用了序列化的隔离级别,不允许幻读

#14


SET LOCK_TIMEOUT
把这个语句放到应用程序里是否可行,当有阻塞超时就自动关闭。

#15


我建议你找到问题的根源,而不是用一些手段去暴力处理

#16


谢谢!
还有我想问一下版主
update 表 set 列1='a',列2='sdf',列3='sdfsdf' where 列4=1 and 列5=’sdf‘ and列6 =234 and 列7=1
这个语句如果wher子句条件太多是不是比1个条件的要锁更多的行?

#17


谢谢!
还有我想问一下版主
update biao set lie1=1,lie2='24234' where lie4=1 and lie5='asf' and lie6=234 and lie7='ss'
这种如果where子句条件太多是不是比where子句只有一个条件的,会锁更多的行?

#18


谢谢!
还有我想问一下版主
update biao set lie1=1,lie2='24234' where lie4=1 and lie5='asf' and lie6=234 and lie7='ss'
这种如果where子句条件太多是不是比where子句只有一个条件的,会锁更多的行?