当前位置: 首页 > 知识库问答 >
问题:

使用Hikari CP的mssql-jdbc MS SQL Server JDBC驱动程序准备语句缓存性能问题

端木澄邈
2023-03-14

与Bone CP不同,Hikari CP不再在连接池中提供准备好的语句缓存,因此现在需要在JDBC驱动程序中完成,对于MS SQL Server来说,这意味着我们需要转移到在驱动程序中提供准备好的语句缓存的JDBC驱动程序版本,mssql-jdbc 6.4.0(2018年1月发布)是第一个这样做的版本。

因此,从Hibernate 4.2+Bone CP 0.8.0+sqljdbc42 4.2.6420.100MS SQL Server JDBC driver到Hibernate 5.2+Hikari CP 2.7.8+mssql-jdbc 6.4.0.JRE8的全部更改。

不幸的是,由于这种转换,我们看到读查询性能平均下降了20%-30%--这是不可接受的。

然而,在使用Hibernate 5.3+Hikari+他们的JDBC驱动程序的Oracle和MySQL的相应结果中,我们实际上看到了大约5-15%的性能改进--所以我们合理地确定这不是由于Hibernate(也不可能是Hikari,因为一旦连接交给我们,这就不存在了)。

因此,我们正在研究从Bone CP0.8.0准备好的语句缓存到mssql-jdbc 6.4准备好的语句缓存的切换问题。

我们已经确认,如果关闭mssql-jdbc 6.4驱动程序准备语句缓存,性能会再下降10%,所以它做得有点好(我们还在调试器中确认了它实际上在缓存东西)。

    null

共有1个答案

邹祺
2023-03-14

不能直接回答所有这些问题--在我们的例子中(相同的jdbc驱动程序版本,在Spring Boot2.1中默认提供),帮助提高性能的是在Hikari上禁用自动提交。接下来,您需要将名为Hibernate.connection.provider_disables_autoCommit'的Hibernate选项设置为true。这允许最小化事务时间。

请注意7.x JDBC驱动程序是可用的--是否可以检查您是否注意到相同的问题?

如果您使用Spring boot:还要记住set,Spring.jpa.open-in-view=false以避免不必要的长事务(实际上是反模式)。

 类似资料:
  • 我相信我已经在Cassandra csharp驱动程序(版本2.7.3)的StatementFactory中发现了一个关于如何缓存准备好的语句的逻辑的bug。下面是使用案例。 我们发现,运行此删除后,只有第一个请求成功。在深入了解StatementFactory的源代码之后 您可以看到缓存仅使用 cql 语句。在我们的例子中,我们在不同的键空间(又名会话)中具有相同的表名。两个查询中的 cql 语

  • 用于cassandra的Datastax Java驱动程序(cassandra-driver-core 2.0.2)支持PreparedStatements以及QueryBuilder API。使用其中一种比另一种有什么特别的优势吗?缺点? 文档:http://www.datastax.com/documentation/developer/java-driver/2.0/common/drive

  • 我读到MySQL不支持服务器端查询计划缓存。所以如果我想使用PreparedStatements来获得性能优势,我能做的就是在JDBC连接中启用语句缓存。因此,根据文档,它将允许缓存每个连接基础上准备好的语句。 与如果MySQL有服务器端查询计划缓存相比,JDBC连接的PreparedStatement缓存的性能增益是什么?因此,如果PreparedStatement确实在物理连接的缓存中找到,这

  • 我一直在读一些较新的JDBC连接池(如Tomcat)不支持客户端语句池。我已经读到,这是因为大多数JDBC驱动程序都维护自己的语句缓存。然而,我不认为PostgreSQL会发生这种情况。 我说的对吗?如果是这样,我应该使用一个连接池来缓存准备好的语句,以获得最佳的批插入性能吗? 谢谢

  • 我在使用DataStax php驱动程序1.0.0-rc和Cassandra 2.2.3的Prepared Statements时遇到了一个奇怪的错误。我在这一行遇到了一条异常: 我看到了这个错误: 下面是用于与Cassandra通信的类存根: 如果我将Simple Statemetn与标准select查询一起使用,它会起作用。 有什么建议吗?

  • 对于cassandra driver 4.0.0(com.datastax.oss/java driver core/4.0.0),PreparedStatement(仅在现有的情况下)使用100%的CPU节点,即使应用程序处于空闲状态: cassandra driver 3.7.1(com.datasax.cassandra/cassandra driver core/3.7.1)的相同Prep