Mysql在大型模式操作期间强行关闭连接

时间:2017-12-06 17:08:00

标签: c# mysql multithreading multiple-schema

我参与了一个项目,该项目要求在Mysql中使用46个以上的新表更新14k数据库模式。这些附加表的创建脚本平均每个模式运行42秒。当以单线程方式运行时,没有问题,但为了避免花费一周+来完成更新,我们有一个多线程处理更新脚本应用程序的工具。这是在C#中使用microsoft的Parallel.ForEach完成的,并且对线程数设置了限制。目前,如果我将它推过4个线程,数据库会定期开始响应致命错误,当进行挖掘时,显示在等待响应时主机强行关闭连接。连接超时设置为120000,默认命令超时也设置为120000.(我尝试将此更改为int.MaxValue,没有明显区别)数据库设置为'wait_timeout'为28800,'interactive_timeout'设置为28800为好。

例外的相关部分是:

MySql.Data.MySqlClient.MySqlException(0x80004005):命令执行期间遇到致命错误。 ---> MySql.Data.MySqlClient.MySqlException(0x80004005):尝试读取结果集时遇到致命错误。 ---> MySql.Data.MySqlClient.MySqlException(0x80004005):从流中读取失败。 ---> System.IO.IOException:无法从传输连接读取数据:远程主机强制关闭现有连接。

用于运行脚本的代码如下:

    using (MySqlConnection conn = new MySqlConnection(connectionString))
    {
        conn.Open();

        using (MySqlTransaction trans = conn.BeginTransaction())
        {
            using (MySqlCommand command = conn.CreateCommand())
            {
                command.CommandText = initialCommandText + query;
                command.ExecuteNonQuery();
            }

            trans.Commit();
        }
    }

初始命令文本只是“使用some_schema_name; \ r \ n”

如果有人有任何想法或潜在的设置我可以操作以提高吞吐量,我们将不胜感激!

0 个答案:

没有答案