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)] (可以修改)