+ -
当前位置:首页 → 问答吧 → [求助]最近小弟在开发一个程序但出现数据库死锁问题

[求助]最近小弟在开发一个程序但出现数据库死锁问题

时间:2011-10-29

来源:互联网

一个后台程序有20多种算法 从其它表中取得数据经业务处理后 插入同一个表中
因为怕顺序写下来执行速度太慢 所以每个算法都是一个线程 到时候每天定时开启所有的算法
本机运行没问题 但在服务器上跑就死锁
不知道应该如何处理
希望处理过这方面问题的朋友介绍下经验!谢谢!

作者: dunerunner   发布时间: 2011-10-29

建议 20个算法 不要插入同一张表,
20个算法把数据插入按20张表中,
一张表可能会造成数据太大 查询数据会很慢

20个线程同时往一张表中插入数据的时候很可能会造成事务之间的死锁 等待

作者: kiss601459202   发布时间: 2011-10-29

20张表 读取的时候可以用20条线程同时读取 提高查询数据的效率

作者: kiss601459202   发布时间: 2011-10-29

引用 1 楼 kiss601459202 的回复:
建议 20个算法 不要插入同一张表,
20个算法把数据插入按20张表中,
一张表可能会造成数据太大 查询数据会很慢

20个线程同时往一张表中插入数据的时候很可能会造成事务之间的死锁 等待

设计不可能改变 与其将一张表分成20张表 我还不如不使用多线程改为顺序执行程序 也不会造成死锁
难道没有更高明的解决办法了吗

作者: dunerunner   发布时间: 2011-10-29

那可以不要写到一个事务里。
不然,一个线程在操作这个表,这个表就被上锁了,其它表又不能操作。然后锁表的那个线程可能又要等其它线程的结果。这样就死锁了。

或者优化下算法。一个线程的结果先插入进去,然后放弃锁。给其它线程用。反正就是线程间调度好。

作者: brightyq   发布时间: 2011-10-29

优化算法吧,对表的存储操作建议弄成互斥的,或者考虑一下哪个地方容易出现死锁,找到问题就好解决了。本机可能不支持多线程所以没发现问题,服务器一般都支持多线程所以可能死锁

作者: coolbamboo2008   发布时间: 2011-10-29

引用 3 楼 dunerunner 的回复:

引用 1 楼 kiss601459202 的回复:
建议 20个算法 不要插入同一张表,
20个算法把数据插入按20张表中,
一张表可能会造成数据太大 查询数据会很慢

20个线程同时往一张表中插入数据的时候很可能会造成事务之间的死锁 等待

设计不可能改变 与其将一张表分成20张表 我还不如不使用多线程改为顺序执行程序 也不会造成死锁
难道没有更高明的解决办法了吗

设计是需要建立在实际应用上

作者: kiss601459202   发布时间: 2011-10-29