wjp16351 2016-08-13 11:09 采纳率: 0%
浏览 2497

mysql大数据出错,请各位帮忙分析!!

一个数据库中,我需要将表A中的300万数据逐条处理后,写入表B,用C# 写了个小工具,但执行30分钟左右时就报错,报错内容如下:

MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal error encountered during data read. ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Reading from the stream has failed. ---> System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。 ---> System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。

部分代码如下:

public static MySqlConnection getMySqlCon()
    {
        String mysqlStr = "Database=xxx;Data Source=localhost;User Id=root;Password=root;pooling=false;CharSet=utf8";
        MySqlConnection conn = new MySqlConnection(mysqlStr);
        conn.Open();
        return conn;
    }
       MySqlConnection mysql = getMySqlCon();
            String sqlSearch = "select * from xxxxxx";
            MySqlCommand mySqlCommand = getSqlCommand(sqlSearch, mysql);
            getResultset(mySqlCommand);
            mySqlCommand.Dispose();
            mysql.Close();
            mysql.Dispose();
    public static void getResultset(MySqlCommand mySqlCommand)
    {
        MySqlDataReader reader = mySqlCommand.ExecuteReader();
        try
        {
            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Start();

           while (reader.Read())
            {
                if (reader.HasRows)
                {
                  省略部分代码.....

                    MySqlConnection mysql2 = getMySqlCon();
                    String news_inster = "省略SQL语句....";
                    String news_update = "省略SQL语句... ";
                    String data_inster = "省略SQL语句...;
                    String index_inster = "省略SQL语句...";
                    Console.WriteLine(news_inster);
                    Console.WriteLine(news_update);
                    Console.WriteLine(data_inster);
                    Console.WriteLine(index_inster);
                    MySqlCommand mySql_news_inster = getSqlCommand(news_inster, mysql2);
                    MySqlCommand mySql_news_update = getSqlCommand(news_update, mysql2);
                    MySqlCommand mySql_data_inster = getSqlCommand(data_inster, mysql2);
                    MySqlCommand mySql_index_inster = getSqlCommand(index_inster, mysql2);
                    getInsert(mySql_news_inster);
                    getUpdate(mySql_news_update);
                    getInsert(mySql_data_inster);
                    getInsert(mySql_index_inster);
                    mySqlCommand.Dispose();
                    mysql2.Close();
                    mysql2.Dispose();

                }
            }
            sw.Stop();
            Console.WriteLine("写入完成,共花费时间:Time elapsed: {0}", sw.Elapsed);
            Console.ReadKey();
        }
        catch (Exception ex)
        {
            LogHelper.WriteLog(typeof(Program), ex);
        }
        finally
        {
            reader.Close();
        }
        Console.ReadKey();
    }

感觉是内存耗尽了!!!!,具体错误请各位牛帮忙分析一下!!!

  • 写回答

1条回答 默认 最新

  • yicp123 2016-08-13 11:35
    关注

    为什么不用LOAD DATA INFILE呢,先将A表的数据导出来生成数据文件,再用LOAD DATA INFILE导入到B表。

    参考自:
    LOAD DATA INFILE用法详解 http://www.data.5helpyou.com/article408.html

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器