项目背景
为了提高MySQL数据库(基于C/S设计)的访问瓶颈,除了在服务器端增加缓存服务器缓存常用的数据之外(例如redis),还可以增加连接池,来提高MySQL Server的访问效率,在高并发情况下,大量的TCP三次握手、MySQL Server连接认证、MySQL Server关闭连接回收资源和TCP四次挥手所耗费的性能时间也是很明显的,增加连接池就是为了减少这一部分的性能损耗。
连接池功能:
-
初始连接量
initSize:表示数据库连接池会事先和Mysql Server创建initSize个数的connection连接,当应用发起Mysql访问时,不会再创建和Mysql Server新的连接,直接从连接池中获取一个可用的连接就可以,使用完成后,并不会去释放connection, 而是把当前connection再归还到连接池中。 -
最大连接量
maxSize:初始连接量不够,会根据新的请求数量创建连接,设置一个最大连接量,不能无线创建,每一个连接都会占用一个socket资源。如果连接池占用过多的socket资源,那么服务器就不能接收太多的客户端请求了。当这些连接使用完成后,再次归还到连接池当中来维护 -
最大空闲时间
maxIdleTime: 当访问Mysql的并发请求多了以后,连接池里面的连接数量会动态增加,上线是maxSize,当这些连接用完后归还到连接池中,如果在指定的maxIdleTime时间里面,新增的连接没有被使用,就会被回收掉,只需要保持最初的initSize个连接。 -
连接超时时间
connectionTimeout:当Mysql并发请求过大,连接池中的连接数量到达maxSize,没有空闲连接可以使用,如果阻塞时间超过connectionTimeout,那么获取连接失败,无法访问数据库。
压力测试
|
数据量 |
未使用连接池花费时间 |
使用连接池花费时间 |
|
1000 |
单线程:958ms, 四线程:327ms |
单线程:505ms, 四线程:238ms |
|
5000 |
单线程:4028ms, 四线程:1389ms |
单线程:2397ms, 四线程:1093ms |
|
10000 |
单线程:8056ms, 四线程:2758ms |
单线程:4639ms, 四线程:2041ms |
linux下编译
g++ -std=c++11 Connection.cpp CommonConnectionPool.cpp main.cpp -o main -I /usr/include/mysql -L/usr/lib/x86_64-linux-gnu -lmysqlclient -pthread
参数说明:
-
-I/usr/include/mysql:指定 MySQL 头文件的路径。 -
-L/usr/lib/x86_64-linux-gnu:指定 MySQL 库文件的路径。 -
-lmysqlclient:链接 MySQL 客户端库。
2618

被折叠的 条评论
为什么被折叠?



