Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 衣冠楚楚;MySQL随机错误,即致命错误/读取流失败等_C#_Mysql_.net_Docker_Dapper - Fatal编程技术网

C# 衣冠楚楚;MySQL随机错误,即致命错误/读取流失败等

C# 衣冠楚楚;MySQL随机错误,即致命错误/读取流失败等,c#,mysql,.net,docker,dapper,C#,Mysql,.net,Docker,Dapper,我正在使用MySQL和Dapper的.NETCoreWorker应用程序(3.1) 这不是一个新问题,我经历了超过1年的时间,从来没有造成过大问题,因为任务总是会重试 然而,现在我正在开发新功能,它必须在几秒钟内处理>300-600k行,并将数百次连接到数据库 问题是,在日志中我可以随机看到MySQL.Data.MySqlClient.MySqlExceptions(通过Dapper或executesql命令获取记录) 它们都是通用的,除了流失败和操作被取消之外,没有任何其他内容 最奇怪的问题是

我正在使用MySQL和Dapper的.NETCoreWorker应用程序(3.1)

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

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

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

它们都是通用的,除了流失败和操作被取消之外,没有任何其他内容

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

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

我已经测试了一点,直接发布到ubuntu&dotnet运行dll,效果很好,但我只试了10次

所以这不是一个大考验

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


无法准确指出此问题,不确定这是否是一个简洁的问题,或者Microsoft image在Linux上运行的可靠性不高……

从流读取失败
是一个经常针对Oracle MySQL Connector/NET:报告的错误。一些人报告了关于这些bug报告的各种解决方法


我建议切换到一个OSS替代ADO.NET MySQL库,它支持.NET内核、真正的异步I/O和。

好的,伙计们,我找到了解决方案

首先,谢谢大家帮助我

原因

至少很奇怪

结果发现,超过15个不同的服务/应用程序使用了不久前创建的同一个库。这是从源代码生成的帮助程序库,但由于某些原因,它是使用dependencies.net framework/.net core创建的。 此外,另一个库正在使用right.net核心库

这些库基本上对所有应用程序都是隐藏的,就像依赖关系一样

有时,应用程序会使用在.net framework中具有依赖关系的损坏库,在这种情况下,MySQL将因所有这些不同的错误而崩溃(这就是为什么我无法确定其原因)。在dev中,它是有效的,但对于dev,我们使用的是Windows,这就是为什么我们不能在act中捕获它

这就是为什么有些应用程序在加载时会以一种奇怪的方式冻结,并导致许多问题

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


现在可以正常工作超过14小时(它处于恒定负载测试场景下。没有单一错误。

我已切换,下面是错误的第一行(除了已取消的操作)'MySqlConnector.Protocol.Serialization.SocketByteHandler.DoWriteBytesAsync(ReadOnlyMemory`1数据)在C:\projects\mysqlconnector\src\mysqlconnector\Protocol\Serialization\SocketByteHandler.cs:line 134'中,听起来您的数据库操作可能超时了?请尝试增加
MySqlCommand.CommandTimeout
或将连接字符串中的
DefaultCommandTimeout
设置为一个较大的值。现在我认为它们都>60000。我还看到MySQL报告10000%的表在当时没有找到(当然是错误的信息,因为表一直在那里,~1秒后又进行了一次重试).Server还能够支持9h>30000个事务和每个表约800m行(负载测试),现在每个表约有8k行。在运行过程中获取更多内容。“MySql.Data.MySqlClient.MySqlException(0x80004005):MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool)”上的未知命令“&”(现在我已经将它移到了Hangfire,但没有任何运气)它在这个新的非常SQL密集的应用程序中的行为非常不可靠。在测试中,我可以尽可能多地抛出它,但一旦我将它部署到live,它将在1-2-3-4次尝试后死亡。今天它显示了一个错误,即表不存在(完全不是真的语句,因为表在那里,第二次尝试时它就可以正常工作)。