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

sqlserver表打不开是死锁吗?解决方法

2013-08-01 
sqlserver表打不开是死锁吗?请教一下,数据库中有一个表无法执行查询了,这是死锁吗?那个表的数据量不多,也

sqlserver表打不开是死锁吗?
请教一下,数据库中有一个表无法执行查询了,这是死锁吗?那个表的数据量不多,也就1千行左右,执行select语句时,一直显示正在查询,然后把数据库分离后,再附加,就能查询了。其他的表能查询。这是死锁吗?
现在正是服务器大概一星期出现一两次,测试服务器从没出现过这情况。每天晚上会从另一个系统的数据库中查一些数据过来并插入到本系统的数据中来,但是正式服务器却偶尔出现这情况,测试服务器从没出现过。请大侠指教!谢谢
[解决办法]

--检索死锁进程
select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name  
from sys.sysprocesses  
where spid in
( select blocked from sys.sysprocesses where blocked <> 0 ) or (blocked <>0)

--为了防止死锁,在可接受范围内,试试with (nolock)选项
select * from dbo.t with (nolock)

[解决办法]
估计是执行了begin tran后,执行update操作,结果是没有成功,也没有rollback tran
导致死锁。

你认真检验一下代码,有没有错误处理,判断错误处理为if @@Error<>0
[解决办法]
引用:
估计是执行了begin tran后,执行update操作,结果是没有成功,也没有rollback tran
导致死锁。

你认真检验一下代码,有没有错误处理,判断错误处理为if @@Error<>0


我就这样整,每次做delete时候,先begin tran,模仿oracle的手动提交,以免出错
[解决办法]
100%不是死锁,但有可能是阻塞。
[解决办法]
死锁不是这个样子的,是阻塞。sp_who看看是否有BLOCK
[解决办法]
查询加上Nolock
如select *from 表(nolock)
这样不用等其他的事务提交就可以读了。
[解决办法]
阻塞只能尽量减少,可以修改地隔离级别比如NOLOCK,使用索引,可以读写分离,减小事物,使用乐观隔离级别(SNAPSHOT)等等。 
[解决办法]
看一下又等待吗?可能是等待资源
[解决办法]
引用:
刚又出现这情况了,我用sp_who看了,没有block,而是suspended,这是阻塞吗?

你用sp_who看到suspended就表面有可能发生了阻塞,
这个时候你再运行一下 sp_lock ,看看status有没有wait的?
------解决方案--------------------


锁我也感觉不会,阻塞不知道会不会,但是不知道是不是权限问题就不知道了。比如你刚开始用admin登陆进去能看。你现在用xinle这个帐号登陆进去他根本没有DBDATA这个文件夹权限。或用SQLSERVER的帐号权限问题!
[解决办法]
死锁和阻塞是两码事,绝大部分情况下是不会出现死锁的。但是阻塞的机会会比较大。

热点排行