.net mysql Too many connections

一、 问题

        用.net 进行多线程的mysql数据查询和更新,发现程序启动后,就会报这个错误。

        Too many connections

二、 分析

        1.数据库端

                用show processlist;查看连接清单。发现很多连接都在sleep,并且持续增加。

                show variables like '%max_connections%';查看mysql的最大连接数发现只有100多。

                连接增加到最大的连接数时,不在增加,也没有新的数据库连接产生。

        2.程序端

                每个线程内频繁的在用.net 创建mysql的连接,但每次都会进行close.

代码片段如下:

            string ConnectStr = Connectconfig.GetReadNameConfig("MySql");
            MySqlConnection conn = new MySqlConnection(ConnectStr);
            connect.Open();
            //做些事情
            connect.Close();
            connect.Dispose();

        3.问题点:

        明明每次都关闭和释放掉了,为什么在mysql的连接里面,连接没有自动释放掉,而是仅仅sleep了。

        4.分析:

        经过分析只要创建了连接,并且open,mysql里面优惠存储这个连接,不论是否close。因为mysql的机制是如果你下次再用这个连接,直接open就好了。不用每次都创建连接,对mysql也是消耗。

三、解决

        方案一(治标不治本):利用mysql的超时机制+设置最大连接数

         将mysql的最大连接数设置成1000,将超时时间设置成30(秒),也就是说还没等到连接数达到设置的最大值时,第一个连接已经因为超时被释放掉了。这里有个前提,就是第一个连接后续不会再用到了,但一般能遇到这个问题的,估计第一个连接很难会在程序中再次使用。

        设置超时方法:

        max_connections=1024

        设置最大连接数方法, 配置文件中加:


wait_timeout=30
interactive_timeout=30

        方案二:

        遇到这个问题首先是在线程中频繁的 进行了new 连接的操作,如果将线程内只new一次mysql的连接,而后只使用此连接,既可解决问题。

Guess you like

Origin blog.csdn.net/u013584315/article/details/120761849