-
Notifications
You must be signed in to change notification settings - Fork 716
Zebra读写分离属性列表
junior_xin edited this page Dec 5, 2018
·
1 revision
GroupDataSource支持6种数据库连接池:c3p0、tomcat-jdbc、druid、dbcp、dbcp2、hikaricp,可以根据poolType属性指定使用哪一种数据库连接池。由于不同的连接池可以配置的属性是不同的,意味着,当选择了不同的poolType后,我们可以配置的属性是不一样的。zebra将这些属性分为3类:
1.通用参数:不管poolType属性值是什么,这些参数都可以使用 2.非c3p0连接池参数:当poolType值不是c3p0时,即tomcat-jdbc、druid、dbcp、dbcp2、hikaricp,可以配置的一些属性 3.c3p0连接池参数:仅当poolType为c3p0时,可以使用的连接池参数 *注意:如果遇到了一些属性没有出现在下面的列表中,则说明zebra不支持配置这项属性,如druid的testOnBorrow属性。
属性 | 默认值 | 含义 | 最佳实践 |
---|---|---|---|
jdbcref | 空 | 用户获取数据库连接信息的key | 连接信息包括:ip、port、username、password、以及一些连接池参数默认。最简单的情况下,业务方可以只配置一个jdbcref属性,就可以使用GroupDataSource,这种情况下使用的都是默认的配置,可能并没有满足业务需求。强烈建议,显式的定义以下核心参数:poolType、lazyInit、initialPoolSize、minPoolSize、maxPoolSize、checkoutTime。 |
poolType | 默认为hikaricp | 底层使用的连接池类型。 | 支持类型列表:"c3p0" , "tomcat-jdbc" , "druid" , "dbcp" , "dbcp2","hikaricp" |
lazyInit | true | 启动时立即初始化连接池。 | 立即初始化连接池有助于提高前几个sql的执行速度,减少连接获取时间。为true时,表示第一次接收到查询请求时,才会初始化链接。为false,启动时立即初始化连接数为initialPoolSize。如果应用启动时会出现连接获取超时的异常 建议设置为false。否则设置为true。 |
initialPoolSize | 3 | 初始连接数 | 针对这几个参数,在设置时,应该考虑一下GroupDataSource底层维护了多少个SingleDataSource。每个参数都会应用到底层所有SingleDataSource。例如initialPoolSize设置为5,但是底层有3个SingleDataSource,实际上会初始化15个连接。过小,连接不够用,获取链接时间较长,甚至超时。过大浪费数据库连接。 |
minPoolSize | 3 | 最小连接数 | |
maxPoolSize | 20 | 最大连接数 | |
checkoutTimeout | 1000 | 获取链接超时时间 | 如果遇到获取链接超时异常,可将此值调大,但是这可能会导致接口响应变慢,此时应该增大maxPoolSize。 |
routerStrategy | WeightRouter | 支持IdcAwareRouter(同机房优先),WeightRouter(同中心优先),RegionAwareRouter(同区域优先)。 | |
routerType | MASTER_SLAVE | 支持MASTER_SLAVE(默认),SLAVE_ONLY(只走从库),MASTER_ONLY(只走主库) | 如果应用只需要走从库(例如统计需求)可以配置为SLAVE_ONLY,只需要走主库,可以配置为MASTER_ONLY。 |
connectionInitSql | 空 | 连接池创建物理连接时会首先执行改sql,一般用于设置一些数据库的session。 | |
extraJdbcUrlParams | 空 | 用来在本地设置一些自定义的jdbcurl参数 | jdbcdriver 5.1.36以上版本需要在jdbcurl设置 "useSSL=false" 参数, 可以通过此方式设置,如果需要额外的参数比如allowMultiQueries=true、zeroDateTimeBehavior=convertToNull或者其他参数,可以通过以下方式设置或者覆盖。如果有大事务或者大查询会超过60s的,请也覆盖掉socketTimeout=60000这个参数。 |
preferredTestQuery | 当poolType不是C3P0时,默认值为SELECT 1;当poolType是C3P0时,默认为null | 用于检测连接有效性的测试所执行的测试语句 | 由于不同的poolType默认值是不同的,因此建议显式的进行配置为SELECT 1。 |
属性 | 默认值 | 含义 | 最佳实践 |
---|---|---|---|
timeBetweenEvictionRunsMillis | 30000 | 每30秒运行一次空闲连接回收器 | 可以适当调大,例如300000,即5min |
minEvictableIdleTimeMillis | 300000 | 池中的连接空闲300秒后被回收 | 根据业务情况选配,为了避免业务流量突然变大,可以适当的调大 |
validationQueryTimeout | 0 | preferredTestQuery执行超时时间,默认0秒,表示不超时 | 使用默认的0即可。因为zebra默认添加了socketTimeout=60000,因此校验SQL执行不会超过60s |
removeAbandonedTimeout | 300 | 连接泄漏回收参数,泄露的连接可以被删除的超时值 | 如果有大事务执行超过300s,可以适当调大 |
numTestsPerEvictionRun | 6 | 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 默认6 | 使用默认配置即可 |
以下列出zebra支持配置的c3p0连接池参数。如果理解含义,可以参考c3p0官方文档
属性 | 默认值 | 含义 | 最佳实践 |
---|---|---|---|
maxIdleTime | 0 | 连接池内连接最大空闲时间 单位s。若为0则永不丢弃。 | 建议显式的设置一个大于0的值,如3600 |
idleConnectionTestPeriod | 0 | 每隔指定时间,检测连接池内的空闲链接,单位:秒。只有值大于0的情况下,才会进行检测。 | 通常需要显式的指定一个大于0的值,建议不小于300s,即5min。过小检测太频繁,可能到连接池中获取链接时,链接正在被检测概率较大,导致获取连接时间变长。过大的话,可能会出现有失败的链接,但是没有被及时的检测到。 |
acquireRetryAttempts | 30 | 定义在从数据库获取新连接失败后重复尝试的次数 | 建议不要指定这2个参数,直接通过通用参数中checkoutTimeout属性指定即可。原因参考:关于c3p0 CannotAcquireResourceException |
acquireRetryDelay | 300 | 重新获取连接中间隔时间,单位毫秒。与acquireRetryAttempts联合使用,也就是默认获取连接失败最多重试30次,每次等待300ms。 | |
maxStatements | 0 | JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。 | 关于这两个参数,建议使用默认值0即可,不需要配置。原因在于:statement缓存对于支持游标的数据库,如oralce,可能有较大的性能提升。对于使用mysql的情况,可以关闭。 |
maxStatementsPerConnection | 0 | 定义了连接池内单个连接所拥有的最大缓存statements数 | |
numHelperThreads | 3 | c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能通过多线程实现多个操作同时被执行。 | 使用默认的配置即可。 |
maxAdministrativeTaskTime | 0 | 可能对那些面临无限挂起的任务或者出现明显的死锁信息的用户有帮助 | 基本没用,使用默认的0即可。 |