文章内容
2019/10/27 15:46:22,作 者: 黄兵
MySQL大量操作断开连接
最近在大量查询数据库的时候,程序运行了一段时间之后,数据库连接被端口连接,数据库使用的是腾讯云MySQL基础版,我开始以为是MySQL中interactive_timeout
和wait_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、性能相关问题
评论列表