紧急求救:事务死锁问题。

szjarvis 2013-10-16 09:16:36
提示:事各(进程 ID 72)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲器。请重新运行该事务。

这是一个考试系统,四十个人一起考试,进入正式考试时出现这错误;

进入正式考试时会随机生成试卷并保存至数据库中,一个学生的试卷约有650条记录(不是学校的那种考试),分三级三个表(试卷总表,题目表,题目明细表)存放。
往数据库中插入数据时会使用事务。

四十个人一起考,约有十来个人会出现以上错误,请高手帮忙分析分析,该如何解决。
在单机上产生试卷并保存所耗的时间约为一秒。
...全文
337 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-10-17
  • 打赏
  • 举报
回复
http://www.cnblogs.com/happyhippy/archive/2008/11/14/1333922.html http://hi.baidu.com/qiandeqiande/item/2ec5d69e4446ec1a934f4157 http://database.51cto.com/art/201001/179089.htm
机器人 2013-10-17
  • 打赏
  • 举报
回复
从需求上看也没有资源竞争,怎么能弄出死锁
rtdb 2013-10-17
  • 打赏
  • 举报
回复
引用 3 楼 szjarvis 的回复:
其次,能不能让这些人的出题时间错开一点? 这点是通过程序控制还是叫考试不要同一时间进入? 如果程序控制,那么多学生,后面的不是一直在等待,那不会超时吗? 忘了说了,我开发的是B/S程序,每个人每次进去时试卷都是不一样的,所以,在内存中生成副本这种不行吧。
B/S的话在WEB SERVER对生成试卷的动作加锁,保证一次只有一个人在生成试卷
szjarvis 2013-10-16
  • 打赏
  • 举报
回复
其次,能不能让这些人的出题时间错开一点? 这点是通过程序控制还是叫考试不要同一时间进入? 如果程序控制,那么多学生,后面的不是一直在等待,那不会超时吗? 忘了说了,我开发的是B/S程序,每个人每次进去时试卷都是不一样的,所以,在内存中生成副本这种不行吧。
  • 打赏
  • 举报
回复
可能许多人都是那种所谓的c/s程序——弄一个数据库客户端驱动在前端程序里。 这个我就只能望洋兴叹了。实用的高性能网络程序,需要你自己学会开发服务器程序,才能支持好成百上千个客户端。而不是仅仅会做前端小程序。
  • 打赏
  • 举报
回复
谁知道你是如何编写程序的?只能胡乱瞎猜。 随便说。首先,你应该不要纠结在技术上。 其次,能不能让这些人的出题时间错开一点?至少在同一秒(或者5秒钟内)出题人数不要超过5个人,例如你可以先给5个人出题,然后等着5个人全都出完题目,才给另外5个人出题......。 注意,程序设计可不是什么关系数据库,而是“程序”设计。关系数据库只不过是个程序运行过程的存储而已,应该以不影响程序运行效率为原则。那些满脑子只有数据库表的人还没有长大。 再次,你也可以在出题之前先复制到内存里,然后给每一个人出题时都是在内存副本上出题(而不读写什么数据库表)。出完题之后才把很简练的结果非常轻快地写到数据库。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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