MYSQL insert大数据量的问题

时间:2022-01-10 14:32:07
请问C#程序里面插入比较多数据(500条记录)的时候提示如下错误:MySQLDriverCS Exception: MySQLDriverCS Error: can't connect.Can't connect to MySQL server on 'xxxx.xxxx.xxx.xx' (10048)

该如何排查?

11 个解决方案

#1


mysql> show status like 'max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 93    | 
+----------------------+-------+
1 row in set (0.00 sec)

mysql>  show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1000  | 
+-----------------+-------+
1 row in set (0.00 sec)

#2


你的INSERT在C#中有没有及时关闭连接? 不会使用的什么 sqlhelp 之类的东西吧。

#3


是通过一些静态方法来访问数据库的

#4


应该是链接太多了

#5


通过静态方法insert每次都关闭connection呢,难道sqlhelp是不能使用?

#6


        public static int ExecuteNonQuery(string cmdText, MySQLParameter[] parameters)
        {
            int i = 0;
            using (MySQLConnection conn = new MySQLConnection(DataBaseConnectionString.MySqlStr))
            {
                try
                {
                    conn.Open();
                    MySQLCommand command = new MySQLCommand { Connection = conn };
                    foreach (var p1 in parameters)
                    {
                        command.Parameters.Add(p1);
                    }
                    command.CommandText = cmdText;
                    i = command.ExecuteNonQuery();

                }
                catch (Exception ex)
                {
                    i = -1;                   

                }
                finally
                {
                    conn.Close();
                }
            }

            return i;
        }

#7


 你的conn并没有dipose掉啊。建议到.net群中去咨询一下,似乎conn.close后并不立即释放连接。

#8


查看 MySQLConnection 这个类  对  close 方法的封装
非c#人员的建议

说个题外话,不知道楼主的的 server是一个人用还是多人在用,上述方法只是代表服务器只被你一个人使用所以才去查找代码原因,如果是多人都在大批量插入,就。。。。。

#9


超过了连接数?

#10


进到mysql服务器,show processlist之类的,看看有多少连接,是不是超了?
另外,物理排查一下,是否还能连上mysql数据库。

#11


查询一下具体进程show processlist是否超过了连接数。

#1


mysql> show status like 'max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 93    | 
+----------------------+-------+
1 row in set (0.00 sec)

mysql>  show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1000  | 
+-----------------+-------+
1 row in set (0.00 sec)

#2


你的INSERT在C#中有没有及时关闭连接? 不会使用的什么 sqlhelp 之类的东西吧。

#3


是通过一些静态方法来访问数据库的

#4


应该是链接太多了

#5


通过静态方法insert每次都关闭connection呢,难道sqlhelp是不能使用?

#6


        public static int ExecuteNonQuery(string cmdText, MySQLParameter[] parameters)
        {
            int i = 0;
            using (MySQLConnection conn = new MySQLConnection(DataBaseConnectionString.MySqlStr))
            {
                try
                {
                    conn.Open();
                    MySQLCommand command = new MySQLCommand { Connection = conn };
                    foreach (var p1 in parameters)
                    {
                        command.Parameters.Add(p1);
                    }
                    command.CommandText = cmdText;
                    i = command.ExecuteNonQuery();

                }
                catch (Exception ex)
                {
                    i = -1;                   

                }
                finally
                {
                    conn.Close();
                }
            }

            return i;
        }

#7


 你的conn并没有dipose掉啊。建议到.net群中去咨询一下,似乎conn.close后并不立即释放连接。

#8


查看 MySQLConnection 这个类  对  close 方法的封装
非c#人员的建议

说个题外话,不知道楼主的的 server是一个人用还是多人在用,上述方法只是代表服务器只被你一个人使用所以才去查找代码原因,如果是多人都在大批量插入,就。。。。。

#9


超过了连接数?

#10


进到mysql服务器,show processlist之类的,看看有多少连接,是不是超了?
另外,物理排查一下,是否还能连上mysql数据库。

#11


查询一下具体进程show processlist是否超过了连接数。