.net - Commit 期间 MySQL 超时

标签 .net mysql commit

我们的 MySQL 遇到了神秘的网络问题。简单的更新查询(使用索引更新单行)通常会立即运行,然后有时(假设 1000 次中有 1 次)因超时而失败。与简单的插入查询相同。数据库没有过载。 我们怀疑网络问题并正在寻找解决方案,所以如果有人遇到此类问题,我肯定会去解决。

现在进入重点。更糟糕的是,插入查询在事务提交期间失败(我们几乎没有类似的查询,但即使在最简单的查询中也会发生这种情况 - 仅向单个表中插入一次,没有锁,什么都没有)。当它发生时,transaction.Commit 抛出异常。我们捕获它并假设事务已回滚并再次尝试插入数据。

结果是表中有相同数据的两行。如果 Commit 失败,有哪些可能的假设?是否插入了行?这是 MySql Connector/Net 中的行为错误还是设计使然。有什么建议(除了手动检查数据是否在表中)?

提前致谢。 布兰科

附注 我在 MySQL .NET 连接器论坛上发布了同样的消息。如果这打扰了任何人,我深表歉意,但我越来越绝望了。哦:-)

最佳答案

如果提交因网络错误而失败,则无法进行任何假设。我知道很难针对它进行编程,但确实如此 ;) 增加命令超时可能会有所帮助。但同样,如果在数据库中持久化事务更改后连接丢失,但客户端未收到来自服务器的确认,则事务状态未定义。

关于.net - Commit 期间 MySQL 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041631/

相关文章:

php - 在 Codeigniter 上创建权限而不检查 URI 段

c# - 如何在控制台应用程序中将列表打印为表格?

asp.net - ADFS 2.0超时以及Freshness Value,TokenLifetime和WebSSOLifetime参数之间的关系

wcf - WCF 的 RESTful 框架替代品

php - 如何制作收件箱,向发送和接收消息的人显示聊天历史记录

python - 带有python : where is data stored before commit?的sqlite3

c# - 防止无效的文本框输入绑定(bind)到业务对象属性?

java - 合并来自不同表的两个结果集

svn - 颠覆 : Can I commit several checked-out folders at once?

SVN:如何在不输入密码的情况下提交?