专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VB Dotnet

请问C/S信息管理系统如何处理死锁? 200分送上,请大家讨论讨论

发布时间:2011-06-23 16:01:30 文章来源:www.iduyao.cn 采编人员:星星草
请教C/S信息管理系统如何避免死锁? 200分送上,请大家讨论讨论。
c/s,sql server 2005,30多个表。访问最频繁的任务表有50多个字段,40多万记录。

以前就偶尔出现死锁错误,近期由于用户增多,死锁更是频繁的出现。 =。=

我跟踪sql,发现死锁几乎都与上述的任务表有关(select、update)。

这个表是系统的核心,几乎所有的操作都会涉及到它,肯定是无法避免多人同时对它进行访问的。

请教这情况下如何避免死锁呢?撇开这套有设计缺陷的系统,设计逻辑复杂、数据量巨大的信息系统时应如何避免死锁呢?

------------------------------------悲哀的分界线-----------------------------------------
这个系统是我的前任的前任设计开发的,他离职的时候没有留下任何系统的文档资料。
我的前任接手后,对系统进行了一年左右一系列的修修补补,系统也基本满足了公司的需要。
到我接手的时候,前任已经离职一个月,系统已经接近崩溃边缘。我的一番大修补,系统终于苟延残喘到了现在。
最近死锁的问题让我没信心医好它了=。=












------解决方案--------------------
你问下允许脏读么?
应该转到SQL区去问问用什么锁能解决你的问题。
------解决方案--------------------
select ..
from datatableName(nolock)
where...
------解决方案--------------------
with nolock
------解决方案--------------------
通过SP_lock和SP_who监视进程之间的锁争用,但是,一旦出现死锁,一个事务回退,一个事务继续。此时使用sp_lock已经看不到真正死锁的资源信息(或许能够看许多X类型的锁信息),因为所涉及资源的锁已经释放。
SQL SERVER 提供了几个跟踪标志,可以监视出现的死锁。可以用DBCC TRACEON命令打开跟踪标志,用DBCC TRACEOFF关闭跟踪标志
LZ看看这篇文章对你是否有所帮助http://www.searchdatabase.com.cn/showcontent_11201.htm
------解决方案--------------------
SqlTransaction trans = theConn.BeginTransaction(IsolationLevel.ReadCommitted);
添加锁机制
select * from t with (nolock)
http://topic.csdn.net/u/20091012/09/5fba87cb-6361-4748-ad26-53b9257f80ea.html
------解决方案--------------------
SQL Server能自动探测和处理死锁,频繁死锁说明你的程序有严重的设计问题...

1.从表中访问数据的顺序要一致,避免循环死锁...

2.减少使用holdlock或使用可重复读与可序列化锁隔离级的查询,避免转换死锁...

3.选择低事务隔离级别减少死锁...

随意地对数据库操作加锁只会让情况更加恶化,你的问题出在业务逻辑上...分析业务逻辑从用户操作流程和数据处理流程上找到死锁的原因并加以解决才是根本...
------解决方案--------------------
mark
------解决方案--------------------
1 使用事务时,尽量缩短事务的逻辑处理过程,及早提交或回滚事务; (细化处理逻辑,执行一段逻辑后便回滚或者提交,然后再执行其它逻辑,直到事物执行完毕提交)
2 设置死锁超时参数为合理范围,如:3分钟-10分种;超过时间,自动放弃本次操作,避免进程悬挂; 
3 优化程序,检查并避免死锁现象出现; 
4 .对所有的脚本和SP都要仔细测试,在正是版本之前。 
5 所有的SP都要有错误处理(通过@error) 
6 一般不要修改SQL SERVER事务的默认级别。不推荐强行加锁
------解决方案--------------------
mmark
------解决方案--------------------
mark
也认为是设计问题,不能靠强制手段处理。
------解决方案--------------------
哎,我们也遇到同样的问题了,只不过环境有一点差异,我们是c/s,sql server 2008。我也不懂如何优化。支持,帮顶!
------解决方案--------------------
说实话这个还真不太好搞
------解决方案--------------------
1.查询如果是那种非敏感数据用nolock

2.严格控制超时的处理

3.ADO中的IsolationLevel或直接SQL中控制事务的并发模式
------解决方案--------------------
重新开发一个
------解决方案--------------------
探讨
引用:
哎,我们也遇到同样的问题了,只不过环境有一点差异,我们是c/s,sql server 2008。我也不懂如何优化。支持,帮顶!


我现在只有在捕获"进程IDxx被死锁在xxx上,已被选做牺牲品"的异常后弹出对话框让用户重试或取消。。

最近我在调试所以没有屏蔽掉错误信息。。。公司使用系统的同事都跑来问我:“我啥老是被牺牲啊?!”   

我很焦灼!


------解决方案--------------------
with nolock 这个最简单的,自己写的时候注意数据的顺序
------解决方案--------------------
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: