数据库连接池探究

来源:互联网 发布:windows最高权限 编辑:程序博客网 时间:2024/06/05 13:22

1.简介

       数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。


2.实现策略

1)添加数据库连接池配置

       需要添加数据库连接池的一些配置如内存分配的大小,失败处理函数,监控重试次数等。


2)添加数据库服务器配置

       添加数据库服务器配置的时候,需要添加服务的配置有数据库的ip, port, username,password, dbname, charset和最大连接数,最小连接数,连接超时时间,写超时,读超时等参数。


3)初始化数据库连接池

       在加载了数据库服务器配置以后,会对该数据库服务器的连接池进行初始化,创建出数量为最小连接数的连接放在池里,等待取用。


4)取用连接

       从数据库连接池中取出一个连接进行使用


5)放回连接

       将用完的数据库连接放回到数据库连接池中供后续使用,在放回的时候需要添加一个参数,说明这个连接是否损坏,如果损坏的话将做上标记,不会将其提供给下次连接取用。


6)连接池定时调度

       数据库连接池一个比较大的特点就是可以对性能有较大的提升,而这个提升正是通过定时调度来实现的。如果没有连接池的话,每次查询都要创建连接,查询完都要释放连接这样不停的创建和释放比较消耗资源,连接池的特点就是对池中的所有连接进行统一的调度,将资源很好的分配,达到高性能的目的。

       具体说说连接池定时调度的策略,通常情况下是这样的,维护两个值,当前连接数current_conn和连接池应该具有的连接数need_conn,current_conn是根据客户端使用的连接产生的,need_conn通常是currrent_conn的125%(这个值是可配的),也就是说数据库连接池中的连接数应该是当前连接数的125%,这样做的目的是做一个缓冲,防止两次调度之间连接数迅速增加。

       但是need_conn还受最大连接数和最小连接数的约束,也就是说need_conn的最大不能超过最大连接数(以保证连接池不占用太多的资源),最小不能低于最小连接数(以保证连接池的高效和资源合理运用)。

       在数据库连接池定时调度的时候需要将连接池中不正常的连接删除,另外,创建或者释放连接,使得数据库连接池的连接数和need_conn相同。


7)数据库连接池的风险与解决方案

       在实际中会常常遇到这种问题,因为连接的波动造成的连接失败。如连接池定时调度为3s,最小连接数为20,最大连接数为50。当前的连接数是10,这时,连接池中的实际连接数为20,突然在3s内当前连接数涨到30,这时还没有进行定时调度,连接池的实际连接数还是20,小于需要的连接数,这个时候就会造成连接失败的情况。

       对于上述问题的解决方案是(1)增大最小连接数,以防止数据的波动造成的连接数不够,(2)减小定时调度的时间间隔,这样将数据库连接池的定时调度频率提高,消耗更多的资源却不一定能有好的收益。(3)增加连接池的缓冲额度,将125%提高至更高,这样可以应对突然增长的连接,但是缺陷在于需要在连接池中创建出更多的连接,消耗更多的资源。这三种解决方案要视具体的连接数波动情况而定,分析连接数的表化情况,选择较为合理的解决方案。

参考文献

http://baike.baidu.com/view/84055.htm

原创粉丝点击