繁体   English   中英

C# Dapper & MySQL 随机错误,即致命错误/从流读取失败等

[英]C# Dapper & MySQL random error i.e. fatal error / reading from the stream has failed, etc

我正在将 .net 核心工作应用程序 (3.1) 与 MySQL 和 Dapper 一起使用。

这不是一个新问题,我已经经历了超过 1 年的时间,从来没有造成大问题,因为总是会重试任务。

但是现在我正在开发新功能,该功能必须在几秒钟内处理 > 300-600k 行,将数百次连接到数据库。

问题是我可以在日志中随机看到 MySQL.Data.MySqlClient.MySqlExceptions(通过 Dapper 获取记录或执行 SQL 命令)。

它们都是通用的,没有任何超出流失败和操作被取消的情况。

最奇怪的问题是它只发生在 Linux 环境中(客户端然后是 MySQL 实例的本地)。 当我在 Windows 上(通过 VS 或 Docker 映像)运行它时,它可以在大于 30 倍的测试负载下正常运行。

当我部署到 linux(使用来自微软的 3.1 aspnet 镜像的相同 docker 镜像)时,它失败了。

我已经测试了一下,直接发布到 ubuntu & dotnet run dll 并且工作正常,但我只尝试了大约 10 次。

所以不是一个很大的考验。

知道我应该去哪里看吗? 我试图确保 Dapper 查询 exec 将使用打开的连接,但事实并非如此。 也有重试,但有时在第一次尝试时效果很好,有时会重试 2 次,有时会连续 5 次失败 20 次。

无法查明这个问题,不确定这是否是 Dapper 或者 Microsoft 映像在 Linux 上运行不稳定....

Reading from the stream has failed是一个经常针对 Oracle 的 MySQL 连接器/NET 报告的错误:错误 75917错误 76597 有些人报告了这些错误报告的各种解决方法。

我建议切换到MySqlConnector ,这是一个用于 MySQL 的 OSS 替代 ADO.NET 库,它支持 .NET Core、真正的异步 I/O,并修复了许多连接器/NET 错误

好的,我找到了解决方案......

首先,谢谢大家帮我解决。

原因 ?

至少奇怪...

事实证明,> 15 个不同的服务/应用程序正在使用前一段时间创建的同一个库。 这是一个从源代码构建的辅助库,但由于某种原因是使用依赖项 .net 框架 / .net 核心创建的。 此外,另一个库正在使用正确的 .net 核心库。

这些库基本上对所有应用程序都是隐藏的,因为它们会作为依赖项被拉走。

有时应用程序会使用依赖于 .net 框架的损坏的库,在这种情况下,MySQL 会因所有这些不同的错误而崩溃(这就是为什么我无法确定其原因)。 在开发中它起作用了,但对于开发来说,我们使用的是 Windows,这就是为什么我们无法在行动中捕捉到它。

这就是为什么某些应用程序会以一种奇怪的方式冻结并在负载下导致很多问题的原因。

清除损坏的库,修复依赖项...

现在可以完美运行 > 14 小时(这是在恒定负载测试场景下。没有一个错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM