sqlserver表打不开是死锁吗?

暗夜雷丘 2013-07-10 01:37:53
请教一下,数据库中有一个表无法执行查询了,这是死锁吗?那个表的数据量不多,也就1千行左右,执行select语句时,一直显示正在查询,然后把数据库分离后,再附加,就能查询了。其他的表能查询。这是死锁吗?
现在正是服务器大概一星期出现一两次,测试服务器从没出现过这情况。每天晚上会从另一个系统的数据库中查一些数据过来并插入到本系统的数据中来,但是正式服务器却偶尔出现这情况,测试服务器从没出现过。请大侠指教!谢谢
...全文
460 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-07-15
  • 打赏
  • 举报
回复
死锁和阻塞是两码事,绝大部分情况下是不会出现死锁的。但是阻塞的机会会比较大。
xiaoxiangqing 2013-07-12
  • 打赏
  • 举报
回复
你用sp_who查看一下结果
KevinLiu 2013-07-11
  • 打赏
  • 举报
回复
阻塞只能尽量减少,可以修改地隔离级别比如NOLOCK,使用索引,可以读写分离,减小事物,使用乐观隔离级别(SNAPSHOT)等等。
暗夜雷丘 2013-07-11
  • 打赏
  • 举报
回复
学习了,原来这种现象叫阻塞!有高手知道在spring.net+NHibernate如何防止阻塞吗?求指教!
蝈蝈(GuoGuo) 2013-07-11
  • 打赏
  • 举报
回复
查询加上Nolock 如select *from 表(nolock) 这样不用等其他的事务提交就可以读了。
KevinLiu 2013-07-11
  • 打赏
  • 举报
回复
死锁不是这个样子的,是阻塞。sp_who看看是否有BLOCK
  • 打赏
  • 举报
回复
100%不是死锁,但有可能是阻塞。
大力水手 2013-07-11
  • 打赏
  • 举报
回复
锁我也感觉不会,阻塞不知道会不会,但是不知道是不是权限问题就不知道了。比如你刚开始用admin登陆进去能看。你现在用xinle这个帐号登陆进去他根本没有DBDATA这个文件夹权限。或用SQLSERVER的帐号权限问题!
暗夜雷丘 2013-07-11
  • 打赏
  • 举报
回复
好吧,下次出现时 我再用sp_lock看看,不过下次什么时候出现时个问题。我是数据库菜鸟。
  • 打赏
  • 举报
回复
引用 10 楼 zhu3151675 的回复:
刚又出现这情况了,我用sp_who看了,没有block,而是suspended,这是阻塞吗?
你用sp_who看到suspended就表面有可能发生了阻塞, 这个时候你再运行一下 sp_lock ,看看status有没有wait的?
暗夜雷丘 2013-07-11
  • 打赏
  • 举报
回复
额,我没有看是否等待,因为在正式环境上,所以立刻临时解决:直接分离数据库、再附加进来,要不然程序无法使用。要是测试环境也会出现的话 可以慢慢查看。 感谢各位的建议,希望继续给点建议,谢谢!这个问题愁死我了,每天开电脑,第一件事就是看看正式环境这个表能不能查,不能查的话 分离再附加,唉,好无语。
KevinLiu 2013-07-11
  • 打赏
  • 举报
回复
看一下又等待吗?可能是等待资源
暗夜雷丘 2013-07-11
  • 打赏
  • 举报
回复
刚又出现这情况了,我用sp_who看了,没有block,而是suspended,这是阻塞吗?
暗夜雷丘 2013-07-10
  • 打赏
  • 举报
回复
是这样的,我这里的项目是用spring.net+NHibernate技术,不是直接写sql语句。 在方法上面加上特性[Transaction],没有手写提交或回滚。
专注or全面 2013-07-10
  • 打赏
  • 举报
回复
引用 2 楼 hdhai9451 的回复:
估计是执行了begin tran后,执行update操作,结果是没有成功,也没有rollback tran 导致死锁。 你认真检验一下代码,有没有错误处理,判断错误处理为if @@Error<>0
我就这样整,每次做delete时候,先begin tran,模仿oracle的手动提交,以免出错
Andy__Huang 2013-07-10
  • 打赏
  • 举报
回复
估计是执行了begin tran后,执行update操作,结果是没有成功,也没有rollback tran 导致死锁。 你认真检验一下代码,有没有错误处理,判断错误处理为if @@Error<>0
专注or全面 2013-07-10
  • 打赏
  • 举报
回复
--检索死锁进程
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)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧