在底层的mysql连接丢失后,有没有办法恢复(长)事务?

时间:2012-03-10 11:28:29

标签: c# .net mysql transactions database-connection

我有一个长时间运行的事务,在数据库上执行大量删除查询;问题是mysql连接(到同一台机器上的服务器)将不时被删除。

目前,我的重试逻辑将检测断开连接,重新连接并从头开始重新启动整个事务,如果连接的“丢弃频率”过高,则可能永远不会成功。

是否有可能重新打开丢失的连接以继续交易?

我正在使用MySQL Connector for .NET。

2 个答案:

答案 0 :(得分:1)

您所询问的内容无法进行交易。事务是确保在DataBase上执行的每个操作都已完成或者是None。

如果您的连接丢弃频率太高而且您无法控制修复它,那么您应该做的是在没有事务的情况下进行简单查询或更好地使事务中的操作数量减少并发送批处理交易而不是单一大交易。

并且还添加了一些数据验证检查代码,以确保每个项目都是正确的。

答案 1 :(得分:1)

从理论上讲,你可以完全按照XA事务做到你所需要的......但是mysql的局限性相当大,并且让mysql上的XA事务成为一个笑话:老实说:恢复和放大加入开始和结束时挂起都不起作用(自2006年首次发布以来)。所以回答你的问题不!没有机会用mysql,算了吧!尝试增加超时(在客户端和服务器上),内存池,优化查询等... mysql在这里不会帮助你。