首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

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

2012-01-06 
请教C/S信息管理系统如何避免死锁? 200分送上,请大家讨论讨论。c/s,sql server 2005,30多个表。访问最频繁的

请教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 这个最简单的,自己写的时候注意数据的顺序
------解决方案--------------------


表太大,可不可以把表按类别或其它什么分隔下,这样每个表的数据就小了,是不是会快点呢,
[解决办法]
使用事务处理!
[解决办法]
1.使用with nolock

2.看看索引

3.分一下表

4.看你说的是更新语句引起的,是不是有触发器,调用了其它的逻辑!
[解决办法]
首先要确保程序逻辑没问题,数据库侧可以SQL里加诸如with(updlock)语句
[解决办法]

探讨
SQL Server能自动探测和处理死锁,频繁死锁说明你的程序有严重的设计问题...

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

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

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

随意地对数据库操作加锁只会让情况更加恶化,你的问题出在业务逻辑上...分析业务逻辑从用户操作流程和数据处理流程上找到死锁的原因并加以解决才是根本...

[解决办法]
发生死锁的代码发出来吧

[解决办法]
用了N多程序同时(for 10000 next)update 同一记录或同一表都不会发生死锁,why?

[解决办法]
我也遇到过类似的问题,大多数时候,是程序设计造成,比如:执行的过程中事务,包括的代码太多。

我觉得,你最好是,先优化,相关的sql,在提出能否在硬件上投入。最后决定,是否修改代码。


[解决办法]
顶。
[解决办法]
来学习一下
[解决办法]
每个select 任务表都加上with(nolock)
[解决办法]
添加锁机制 MFC里面有好多类有这样的功能
[解决办法]
探讨
感谢大家关注。

在现有的架构下做修改真是太难了,何况系统一直还是在使用中,根本不可能做什么大动作。

我又仔细的跟踪了一下SQL的运行情况,发现死锁的情况99%都出现在  update 任务表  set 任务状态=xxxxx where 任务编号=xxxxx 这个语句上。
因为所有的用户对任务进行操作后都需要更新对应的任务状态,所以这条语句执行得非常频繁。另外,由于设计的原因,系统统计大部分常用数据也必须涉及任务表,而这些统计操作也是十分频繁的,我想这些就是“死锁”的症结所在。

这两天尝试了一些办法,但都收效甚微。

明天我打算尝试使用缓存,牺牲一些实时性,所有对任务表的查询都先从缓存里读数,然后10分钟刷新一次缓存。请教有经验的同志们,这样是否可行?如可行应该注意什么?


[解决办法]
探讨
引用:
用了N多程序同时(for 10000 next)update 同一记录或同一表都不会发生死锁,why?



如果您的程序能达到您说的效果,再如果您乐意说说如何做的让我辈涨涨见识,请您指点一二。

[解决办法]
学习了
[解决办法]
探讨
感谢大家关注。

在现有的架构下做修改真是太难了,何况系统一直还是在使用中,根本不可能做什么大动作。

我又仔细的跟踪了一下SQL的运行情况,发现死锁的情况99%都出现在  update 任务表  set 任务状态=xxxxx where 任务编号=xxxxx 这个语句上。
因为所有的用户对任务进行操作后都需要更新对应的任务状态,所以这条语句执行得非常频繁。另外,由于设计的原因,系统统计大部分常用数据也必须涉及任务表,而这些统计操作也是十分频繁的,我想这些就是“死锁”的症结所在。

这两天尝试了一些办法,但都收效甚微。

明天我打算尝试使用缓存,牺牲一些实时性,所有对任务表的查询都先从缓存里读数,然后10分钟刷新一次缓存。请教有经验的同志们,这样是否可行?如可行应该注意什么?


[解决办法]
学习下
[解决办法]
学习了,受益。
[解决办法]
探讨
引用:
我也遇到过类似的问题,大多数时候,是程序设计造成,比如:执行的过程中事务,包括的代码太多。

我觉得,你最好是,先优化,相关的sql,在提出能否在硬件上投入。最后决定,是否修改代码。




谢谢你的建议。

我们现在是普通PC当服务器 =。=|| 

看来确实不换不行了。

------解决方案--------------------


学习了。。。
[解决办法]
MK
[解决办法]
VB中如何配缓存啊?
[解决办法]
支持~~~
[解决办法]
ding
[解决办法]
up
[解决办法]
加锁 事务处理吧
跟踪一下死锁 然后事shi事务回滚
[解决办法]
学习了。
[解决办法]
版本控制
[解决办法]
新建作业,每1分钟执行一次.
作业内容:
1.查找死锁进程
2.杀死死锁进程
[解决办法]
学习
[解决办法]
不要锁表,用时间戳
[解决办法]
都是高手
[解决办法]
学习
[解决办法]
学习了
[解决办法]
重新开发一个
[解决办法]
重新做一个啊
[解决办法]
半年前,我公司的打卡系统也出现了死锁情况,因为是全国的打卡数据都插入同一表,所以有时会全国几个地区同时insert同一个表,因主键自增长的问题导致表死锁.表死锁后,任何对这表的操作都无效,而且刚好这个表是核心数据表,导致系统完全崩溃。后来的解决办法也超简单,加了个临时表,是无主键的。数据都插入临时表,再由服务器上的定时程序统一插入实际表,轻松搞定。
[解决办法]
如果只是百万的数据,2005还是可以的,可以从下面几个方面去优化
1,优化索引(Update)
2,切表
3,数据快照(Select)
4,旧数据搬移
[解决办法]
/..\
[解决办法]
受益匪浅,期待更精彩的回答
[解决办法]

[解决办法]
up~~~~~~~~~
[解决办法]
学习了
[解决办法]
学习了,谢谢各位大侠!
[解决办法]
rt
[解决办法]
学习

热点排行