美文网首页收藏HiKariCP
从C3P0迁移到HiKariCP

从C3P0迁移到HiKariCP

作者: alvise | 来源:发表于2017-04-06 00:23 被阅读3903次

    项目迁移到新服务器后出现了好几次数据库dblock,导致执行线程全满,没法处理数据的问题,以前没这个情况。除了从数据库配置着手来看一方面,另一方面c3p0迁移到这个据说性能最好的HiKariCP上来,看看有没有改善。

    HikariCP项目主页:

    https://github.com/brettwooldridge/HikariCP

    文档上列的比较清楚,几个需要注意的地方:
    oracle 使用的是odbc驱动自带的pool。不是我们以前常用的oracle.jdbc.driver.OracleDriver,而是oracle.jdbc.pool.OracleDataSource。并且需要使用connectionTestQuery 配置来测试连接是否可用。

    <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
            destroy-method="shutdown">
            <property name="dataSourceClassName" value="oracle.jdbc.pool.OracleDataSource"></property>
            <!-- 连接只读数据库时配置为true, 保证安全 -->
            <property name="readOnly" value="false" />
            <!-- 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 -->
            <property name="connectionTimeout" value="10000" />
            <!-- 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 -->
            <property name="idleTimeout" value="120000" />
            <!-- 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL 
                wait_timeout参数(show variables like '%timeout%';) -->
            <property name="maxLifetime" value="240000" />
            <!-- 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) -->
            <property name="maximumPoolSize" value="25" />
            <property name="connectionTestQuery"
                value="/* MyService Health Check */ SELECT 1 from dual" />
            <property name="dataSourceProperties">
                <props>
                    <prop key="url">@jdbc_oracle.url@</prop>
                    <prop key="user">@jdbc_oracle.user@</prop>
                    <prop key="password">@jdbc_oracle.password@</prop>
                </props>
            </property>
        </bean>
    

    mysql配置就很简单了,注意不需要配置driveClass,和connectionTestQuery

    <bean id="mysqlDataSource" class="com.zaxxer.hikari.HikariDataSource"
            destroy-method="shutdown">
            <!-- <property name="driverClass" value="com.mysql.jdbc.Driver" /> -->
            <property name="jdbcUrl" value="@jdbc_mysql.url@">
            </property>
            <property name="username" value="@jdbc_mysql.user@" />
            <property name="password" value="@jdbc_mysql.password@" />
            <property name="readOnly" value="false" />
            <!-- 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 -->
            <property name="connectionTimeout" value="10000" />
            <!-- 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 -->
            <property name="idleTimeout" value="120000" />
            <!-- 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL 
                wait_timeout参数(show variables like '%timeout%';) -->
            <property name="maxLifetime" value="240000" />
            <!-- 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) -->
            <property name="maximumPoolSize" value="100" />
            <!--<property name="connectionTestQuery" value="/* ping */ SELECT 1" /> -->
            <property name="dataSourceProperties">
                <props>
                    <prop key="cachePrepStmts">true</prop>
                    <prop key="prepStmtCacheSize"> 250</prop>
                    <prop key="prepStmtCacheSqlLimit">2048</prop>
                </props>
            </property>
        </bean>
    

    目前还在压力测试中,不知道为啥,感觉性能和c3p0比没有很大飞跃,关键是 db lock 能不能解决。

    相关文章

      网友评论

        本文标题:从C3P0迁移到HiKariCP

        本文链接:https://www.haomeiwen.com/subject/cruxattx.html