mysql 最大连接数 & 连接池
MySQL最大连接数
关于最大连接数:http://mg123.lofter.com/post/1a5f3e_996f838
可以通过修改配置文件(默认/etc/my.cnf)中的"mysqld"段的max_connections 参数来支持更多的连接(默认100)。
猜测mysql利用了linux的select/poll/epoll中的一种技术(即IO多路复用),由于连接数(文件描述符)上限是 63384( 2的14次方), 目测是select/poll。因为epoll没有连接数的上限。(有待进一步确认)
连接池
同时鉴于建立连接需要时间,参考IO多路复用的思路,需要复用连接。需要设定一个合理的连接数(平衡建立和维护连接的成本和并发)。
默认情况下,考虑内存足够大,肯定会用贪心配置。 即最大连接数设定为63384。
然而开源的连接池技术里面能够做到的上限是多少呢?
假定行业的最佳实践为:连接使用率为85%.
mysql>show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 151 | +-----------------+-------+ 1 row in set (0.00 sec) mysql> show status like 'max%connections'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | Max_used_connections | 152 | +----------------------+-------+ 1 row in set (0.00 sec)
连接数使用比率 = max_used_connections / max_connections * 100% (理想值≈ 85%)。
那么连接池的最大连接数可以设定为 63384 * 0.85 ≈ 13926 。
开源框架
java: c3p0( https://github.com/swaldman/c3p0)
python: 用官方推荐的c的扩展库MySQL Connector/Python(详情参考这里:https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html), 默认支持的最大连接数32. [pooling.CNX_POOL_MAXSIZE
(default 32)] (可以修改)