java - MS SQL 上的 HikariCP 语句缓存(Microsoft JDBC 驱动程序 4.1)

标签 java connection-pooling mssql-jdbc hikaricp

如何在 MS SQL RDBMS 中为 HikariCP 连接池启用语句缓存?

对于 MySQL,它是通过 :

dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.prepStmtCacheSqlLimit=2048

对于 PostgreSQL 通过:

hikari.dataSource.prepareThreshold=1

对于 Oracle,以下工作:

dataSource.implicitCachingEnabled=true
and adjusting via  setMaxStatements() method of OracleDataSource

但我还没有找到适用于 MS SQL 2012 及更高版本的任何内容。

最佳答案

语句缓存必须由数据库驱动提供,HikariCP 不提供任何语句缓存。据我所知 (*),“Microsoft JDBC Driver for SQL Server”也没有。这留下了使用替代数据库驱动程序 jTDS 的选项。 jTDS home page不表示与 MS SQL 2012 的兼容性,但是 sourceforge project page会(我没有使用 jTDS,所以我假设项目页面是最新的 (**))。

默认情况下,jTDS 驱动程序缓存每个连接 500 个语句(请参阅 FAQ page 上关于 maxStatements 的注释)。

不使用 dataSourceClassName com.microsoft.sqlserver.jdbc.SQLServerDataSource,而是使用 net.sourceforge.jtds.jdbcx.JtdsDataSource (还在 this page 中提到,这也表明 HikariCP 已使用 jTDS 驱动程序进行了测试。

(*) SQLServerDataSource 可用的选项记录在 ISQLServerDataSource 中但我找不到任何语句缓存选项。

(**) 在最后一个 bug-reports 中鼓励评论:“我们将 jTDS 1.3.1 与 SQL Server 2014 一起使用,没有任何问题。”

关于java - MS SQL 上的 HikariCP 语句缓存(Microsoft JDBC 驱动程序 4.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28369388/

相关文章:

java - 这是我的代码。当我执行它时,一个空字符串被插入到数据库中。但是,我对数据库中的所有字段使用 varchar 20

sql - 'dbo' 用户不应用于正常的服务操作

java - JBoss EAP6 - 无法创建 JDBC 数据源 (Microsoft SQL Server)

java - 如何从java中的长值获取12小时格式的时间

java - Eclipse 可以只运行项目的单个实例吗?

sql-server - Tomcat 6 中的 SQL Server 连接管理

oracle - c3p0、Oracle 和 Hibernate 反复出现明显的死锁

java - 将对象添加到队列后访问对象变量?

java - Guava 分离器的图案

java - Tomcat 会自动维护一个 MySql 连接池吗?