在数据库访问时,建立连接需要400-500毫秒的时间。如果使用连接池可以增强系统的性能,主要缓存保留一定数量数据连接,可以重复使用。但并不是使用连接池就能改进性能,下面列举常见的连接池问题和什么是好的连接池。
是否使用连接池?
使用连接池的条件是,是否使用连接池后,能减少数据库连接所用的时间,并整体增强系统吞吐量。
连接池与资源的联系
如果缓存一个连接,比如数据库服务端需要1M内存保存一个连接,那么如果一个服务器连接池缓存200个连接,数据库服务端需要消耗200M,那么使用反向代理的大型服务架构,比如现在有20台服务器用来负载均衡,那么数据库服务端就消耗了4000M(4G)内存用来维护保持连接,这个资源消耗量是非常大。所以考虑连接池与资源的联系很大程度成线性递增关系。
连接池的常见问题
1.超时处理,从连接池获取数据库连接需要做超时处理,不能一直阻塞直到获取到连接
2.最大连接数,最大连接数过小造成连接延迟,连接池获取连接超时,阻塞等问题。最大连接过大给数据库服务端增加资源负担。
3.连接池连接数量与线程的关系,一般连接数量与线程的数量成正比,最大连接可以设定为平均线程最大数。
4.连接的分派粒度,一般为一个线程分派一个连接,然后在处理合适大小的数据操作后返还给连接池。比如在网站方面一个页面的请求开始到结束作为一个连接的分派。
连接池连接的类别
1.共享连接,有些线程获取连接只要做简单数据查询,而且占有时间不是非常长,这时,这类连接可以共享给这类线程。以便高效使用连接.。
在获取共享连接时,可为连接做共享计数,这样通过heap可以快速获取共享量最小的连接,加快数据访问。
2.独享连接,有些线程可能需要做大量的数据库更新,插入,查询等。比如用于处理用户注册的线程需要初始化大量的数据并且查询访问大量的数据,这时就可以为此类线程分派独享连接完成这类事务。
3.缓存连接,这类连接主要用于缓存连接,以便需要时来使用。