Oracle JDBC优化:在Spring Boot应用程序中启用PreparedStatement缓存

我有一个连接到Oracle数据库的Spring Boot REST应用程序。我们正在通过JdbcTemplate使用JDBC。 Oracle数据库属性是通过以下3个 application.properties 设置获得的:

spring.datasource.url
spring.datasource.username
spring.datasource.password

此应用程序正在使用HikariCP。从HikariCP网站上,我知道该池不缓存PreparedStatements,因为JDBC驱动程序是最好的设置。

现在,我将在哪里指定什么来确保这些:

  1. Oracle JDBC驱动程序(ojdbc7.jar)缓存PreparedStatements。有没有一种方法可以自定义它可以缓存的PreparedStatements的数量。

  2. https://howtodoinjava.com/java/jdbc/best-practices-to-improve-jdbc-performance/中,我们看到了

      

    确保将数据库设置为最大数据包大小,并确保   驱动程序匹配该数据包的大小。为了获取更大的结果集,   这减少了之间发送/接收的总数据包数量   驱动程序和服务器。

根据上述规定,

需要执行哪些步骤?
  1. 查找Oracle DB Server数据包大小
  2. 查找是否将Oracle DB Server设置为最大数据包大小
  3. 找到设置Oracle JDBC驱动程序的(ojdbc8.jar)数据包大小。

任何其他(Oracle)JDBC性能优化技巧都将受到赞赏。

qzc105 回答:Oracle JDBC优化:在Spring Boot应用程序中启用PreparedStatement缓存

您好,功能Enable Prepared语句缓存与Spring无关,与REST无关。此函数是仅在数据源,JDBC驱动程序和数据库之间进行协商的问题。为了了解如何进行设置,请阅读有关驱动程序,数据源和数据库的相关文档。

涉及Hikari时,这样做的正确方法是(注意 datasource2 ,重命名为 datasource 以启用自动配置):

spring:
  datasource2:
      dataSourceClassName: com.zaxxer.hikari.HikariDatasource
       .....
       ......
      configuration:
            maximumPoolSize: 25  
            data-source-properties:
               ImplicitCachingEnabled: true
               MaxStatements: 100

您配置中的属性将直接传递给基础驱动程序。

@Bean
@ConfigurationProperties("spring.datasource2")
public DataSourceProperties dataSourceProperties2() {
    return new DataSourceProperties();
}

@Bean()
@ConfigurationProperties("spring.datasource2.configuration")
public DataSource hikariDatasource() {


    return dataSourceProperties2().initializeDataSourceBuilder().build();

}

此示例使用基础数据源的手动初始化。

,
  • 启用语句缓存

oracleDataSource.setImplicitCachingEnabled(true)

  • 选择正确的缓存大小以最佳利用内存

connection.setStatementCacheSize(10) 尽量接近最常用的语句的数量 默认语句缓存大小为10

  • 如果无法将应用程序更改为使用语句,则会回调 缓存

session_cached_cursors = 50 Connection.setStatementCacheSize(10)

,

首先检查文档,以确保您的ojdbc8.jar与数据库服务器版本匹配。 ojdbc8.jar的11g,11gR2、12c版本不同。

根据this answer,需要在JDBC驱动程序中设置oracle.jdbc.implicitStatementCacheSize属性。 This article提到了更多的JDBC驱动程序属性,例如oracle.jdbc.freeMemoryOnEnterImplicitCacheoracle.jdbc.maxCachedBufferSize。您需要检查驱动程序版本的文档以确认这些属性可用。

这可以使用Spring Boot HikariCP spring.datasource.hikari.data-source-properties选项传递。请仔细检查您的Spring Boot版本的文档,此属性至少已重命名一次:

application.yaml

spring:
  datasource:
    hikari:
      data-source-properties:
        oracle.jdbc.implicitStatementCacheSize: 100  

application.properties

spring.datasource.hikari.data-source-properties.oracle.jdbc.implicitStatementCacheSize: 100 

您可能还对statement fetch size感兴趣,但是这种优化通常分别应用于每个语句。

本文链接:https://www.f2er.com/3103147.html

大家都在问