《druid配置文档》由会员分享,可在线阅读,更多相关《druid配置文档(8页珍藏版)》请在金锄头文库上搜索。
1、druid配置文档 Druid是什么?有什么作用?Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。 为什么说Druid是“最好的数据库连接池”?第一,强大的监控特性,通过Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。 监控SQL的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈信息。 SQL执行的耗时区间分布。什么是耗时区间分布呢?比如说,某个SQL执行了1000次,其中01毫秒区间50次,110毫秒800次,10100毫秒100次,10010
2、00毫秒30次,110秒15次,10秒以上5次。通过耗时区间分布,能够非常清楚知道SQL的执行耗时情况。 监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache命中率等。第二,方便扩展。Druid提供了Filter-Chain模式的扩展API,可以自己编写Filter拦截JDBC中的任何方法,可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志等等。Druid内置提供了用于监控的StatFilter、日志输出的Log系列Filter、防御SQL注入攻击的WallFilter。 第三,Druid集合了开源和商业数据库连接池的优秀特性,并结合阿
3、里巴巴大规模苛刻生产环境的使用经验进行优化。 ExceptionSorter。当一个连接产生不可恢复的异常时,例如Oracle error_code_28 session has been killed,必须立刻从连接池中逐出,否则会产生大量错误。目前只有Druid和JBoss DataSource实现了ExceptionSorter。 PSCache内存占用优化对于支持游标的数据库(Oracle、SQL Server、DB2等,不包括MySql),PSCache可以大幅度提升SQL执行性能。一个PreparedStatement对应服务器一个游标,如果PreparedStatement被缓存
4、起来重复执行,PreparedStatement没有被关闭,服务器端的游标就不会被关闭,性能提高非常显著。在类似“SELECT * FROM T WHERE ID = ?”这样的场景,性能可能是一个数量级的提升。但在Oracle JDBC Driver中,其他的数据库连接池(DBCP、JBossDataSource)会占用内存过多,极端情况可能大于1G。Druid调用OracleDriver提供管理PSCache内部API。 LRU是一个性能关键指标,特别Oracle,每个Connection对应数据库端的一个进程,如果数据库连接池遵从LRU,有助于数据库服务器优化,这是重要的指标。Druid
5、、DBCP、Proxool、JBoss是遵守LRU的。BoneCP、C3P0则不是。BoneCP在mock环境下性能可能还好,但在真实环境中则就不好了。 将其中的某个模块(比如监控模块)用到其他连接池可以通过DruidDriver把内置的Filter用在其他连接池中。在2011年上半年DruidDataSource不成熟的时候,我们也是这么做的。在其他连接池中使用内置的Filter,需要修改jdbc-url,使用DruidDriver作为一个ProxyDriver。 Druid的SQL解析功能Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一
6、个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。简单SQL语句用时10微秒以内,复杂SQL用时30微秒。 通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。 典型的配置实例为了方便大家迁移,Druid的配置和DBCP是基本一致的,如果你原来是使用DBCP,迁移是十分方便的,只需要把修改为就好了。以下是一个参考配置: Xml代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11
7、. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 在上面的配置中,通常你需要配置url、username、password、maxActive这几项。 在DruidDataSource中,你可以不配置DriverClass,它根据url自动识别。Druid能够自动识别20多中url,常见的JDBC Driver都包括了。 Druid是一个开源项目,基于协议,你可以免费自由使用。Druid只支持JDK 6以上版本,不支持和。 目前使用其他连接池(DBCP/C3P0/Proxool等),如何迁移到Druid各种连接池配置参数比较Druid DBCP
8、 C3P0 JBoss Weblogic Proxool 数据库用户名称 Username Username User user-name 数据库密码 Password Password Password password驱动名称 DriverClassName DriverClassName DriverClass driver-class DriverName driver-class JDBC连接串 Url Url JdbcUrl connection-url Url driver-url JDBC连接属性 Properties Properties Properties connect
9、ion-property Properties 初始化大小 InitialSize InitialSize InitialPoolSize Initial Capacity 连接池最小空闲 MinIdle MinIdle MinPoolSize min-pool-size minimum-connection-count 连接池最大空闲 MaxIdle MaxIdle 连接池最大使用连接数量 MaxActive MaxActive MaxPoolSize max-pool-size MaximumCapacity maximum-connection-count 最小逐出时间 MinEvict
10、ableIdleTimeMillis MinEvictableIdleTimeMillismaxIdleTime idle-timeout-minutes InactiveConnectionTimeoutSeconds house-keeping-sleep-time 最多等待线程 MaxWaitThreadCount MaxWaitThreadCount HighestNumWaiters 连接池增长步长 AcquireIncrement CapacityIncrement 获取连接时测试是否有效TestOnBorrow TestOnBorrow TestConnectionOnCheck
11、out test-before-use 归还连接时是否测试有效 TestOnReturn TestOnReturn TestConnectionOnCheckin TestConnectionsOnReserve test-after-use 连接空闲时测试是否有效TestWhileIdle TestWhileIdle 测试有效用的SQL Query ValidationQuery ValidationQuery PreferredTestQuery check-valid-connection-sqlhouse-keeping-test-sql 测试有效的超时时间 ValidationQueryTimeout ValidationQueryTimeout 连接初始化SQL ConnectionInitSqls ConnectionInitSqls new-connection-sql InitSQL 连接最大存活实现 MaxConnectionAge 连接泄漏的超时时间 RemoveAbandonedTimeout RemoveAbandonedTimeout UnreturnedConnectionTimeout 关闭泄漏的连接时打印堆栈信息 LogAbandoned LogAbandoned DebugUnretur