0

我参与了一个项目,该项目需要用 46 个以上的新表更新 Mysql 中的 14k 数据库模式。这些附加表的创建脚本每个模式平均需要 42 秒才能运行。当以单线程方式运行时,没有问题,但为了避免花费一周以上的时间来完成更新,我们有一个工具可以多线程应用更新脚本。这是在 C# 中使用微软的 Parallel.ForEach 完成的,并设置了线程数的限制。目前,如果我将其推过 4 个线程,则数据库开始周期性地响应致命错误,当挖掘到这些错误时,表明在等待响应时主机强行关闭了连接。连接超时设置为 120000,默认命令超时也设置为 120000。(我尝试将其更改为 int.

例外的相关部分是:

MySql.Data.MySqlClient.MySqlException (0x80004005):命令执行过程中遇到致命错误。---> MySql.Data.MySqlClient.MySqlException (0x80004005): 尝试读取结果集时遇到致命错误。---> MySql.Data.MySqlClient.MySqlException (0x80004005):从流中读取失败。---> System.IO.IOException: Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。

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

    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”这一行

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

4

0 回答 0