论坛首页> 三共建设

聊一聊GeoEast-iEco的数据库连接池

GeoEast系统使用连接池来管理数据库的连接句柄,在连接池中有有四个链表分别管理空闲读连接,空闲写连接,正在使用的写连接,正在使用的读连接。另外有一个独立线程,定时释放空闲的读写连接。 当一个应用请求数据库资源的时候,首先根据请求类型分别去空闲的读写连接链表中查找,如果有空闲,返回一个可用的连接句柄,如果没有空闲连接,这时候会根据dbs.conf中的定义,决定是持续等待还是,等待60秒,还是立即返回,一般来说dbs.conf的一般定义为持续等待wait_type=wait。当申请到可用连接之后,会判断这个连接句柄是否处于连接状态,如果没有连接数据库,会自动连接供接口使用。 当应用完成数据访问,释放连接句柄回连接池的时候,这时连接池会根据dbs.conf的定义决定立即中断数据库连接,还是保留60秒供 后续的应用接口使用,dbs.conf缺省定义为pooltype=interpretation,即保持连接状态直到监控线程清理空闲的有效连接。 需要说明的的是: 1:在dbs.conf中读连接最少要配置成2,否则可能会造成连接池的锁等待,这是因为在底层接口中,有一个特殊类型数据的读接口需要嵌套的申请连接资源。因此如果为1的化,如果调用该类型特定接口会造成死锁。 2:如果采用多线程编程,在线程内部申请数据库连接资源,尤其是当你的数据库请求是一个长事务的话,建议可以将连接数配置的稍微大些,否则可能会有比较严重的锁等待。一般来说可以配置成和机器的核数相当即可,因为连接池的资源自动回收机制,大可不必担心数据服务器的压力过大。

3:pooltype=process的时候,主要用于长事务,低频请求,如果业务属于短事务高频访问,最好不要使用这种方式。 4:连接池中连接的用户身份为底层指定,因此,如果用第三方的监控工具查看,可能看到都是用同一个用户登录,这点需要应用自行处理

全部回复

暂无更多回复内容