文章内容

2019/10/27 15:46:22,作 者: 黄兵

MySQL大量操作断开连接

最近在大量查询数据库的时候,程序运行了一段时间之后,数据库连接被端口连接,数据库使用的是腾讯云MySQL基础版,我开始以为是MySQL中interactive_timeoutwait_timeout的设置问题导致连接数占满。

具体问题截图如下:


关于具体的作用如下:

1> interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项。

     说得直白一点,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。 

2> 在连接启动的时候,根据连接的类型,来确认会话变量wait_timeout的值是继承于全局变量wait_timeout,还是interactive_timeout

对于非交互式连接,类似于jdbc连接,wait_timeout的值继承自服务器端全局变量wait_timeout

对于交互式连接,类似于mysql客户单连接,wait_timeout的值继承自服务器端全局变量interactive_timeout

但是调整之后,问题还是没有解决,问题依旧。

之后参考了这篇文章:关于大并发mysql连接引起数据库错误OperationalError: (2003, "Can't connect to MySQL server on 'x.x.x.x (99)")分析

问题最终解决。

主要还是连接过多,导致本地端口耗尽。

最后使用的是数据库连接池,具体参考:在Python中使用Mysql数据库连接池


参考资料:

1、MySQL中interactive_timeout和wait_timeout的区别

2、性能相关问题

分享到:

发表评论

评论列表