programing

Oracle JDBC Optimization : Spring boot Application에서 Prepared Statement 캐싱 활성화

telecom 2023. 9. 12. 19:50
반응형

Oracle JDBC Optimization : Spring boot Application에서 Prepared Statement 캐싱 활성화

Oracle 데이터베이스에 연결된 Spring Boot REST 애플리케이션이 있습니다.JDBCTemplate를 사용하고 있습니다.Oracle 데이터베이스 속성은 다음 세 가지 application.properties 설정을 통해 얻을 수 있습니다.

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

이 애플리케이션은 HikariCP를 사용하고 있습니다.HikariCP 웹사이트에서 JDBC 드라이버가 가장 잘 설정되어 있기 때문에 이 풀은 PreparedStatement를 캐시하지 않는다는 것을 알게 되었습니다.

다음 사항을 보장하기 위해 어디에 무엇을 지정해야 합니까?

  1. Oracle JDBC Driver(ojdbc7.jar)가 준비된 문을 캐시합니다.캐시할 수 있는 준비된 문의 수를 사용자 정의할 수 있는 방법이 있습니까?

  2. https://howtodoinjava.com/java/jdbc/best-practices-to-improve-jdbc-performance/, 에서 확인할 수 있습니다.

    데이터베이스가 최대 패킷 크기로 설정되어 있고 드라이버가 해당 패킷 크기와 일치하는지 확인합니다.더 큰 결과 집합을 가져올 경우 드라이버와 서버 간에 주고 받는 총 패킷 수가 줄어듭니다.

위의 내용에 따라 필요한 단계는 무엇입니까?

  1. 오라클 DB 서버 패킷 크기 찾기
  2. 오라클 DB 서버가 최대 패킷 크기로 설정되어 있는지 확인
  3. find set Oracle JDBC 드라이버(ojdbc8.jar) 패킷 크기를 설정합니다.

기타 (Oracle) JDBC 성능 최적화 팁을 주시면 감사하겠습니다.

안녕 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();

}

이 예에서는 기본 데이터 소스의 수동 초기화를 사용합니다.

먼저 문서를 확인하여 다음 작업을 수행할 수 있는지 확인합니다.ojdbc8.jar데이터베이스 서버 버전과 일치합니다.의 다른 버전이 있습니다.ojdbc8.jar11g, 11gR2, 12의에 대하여.

답변에 따르면, 당신은 다음이 필요합니다.oracle.jdbc.implicitStatementCacheSizeJDBC 드라이버에 설정할 속성입니다.이 문서에서는 JDBC 드라이버 속성에 대해 몇 가지 더 언급합니다.oracle.jdbc.freeMemoryOnEnterImplicitCache아니면oracle.jdbc.maxCachedBufferSize을 사용할수 . 이러한 속성을 사용할 수 있는지 확인하려면 드라이버 버전에 대한 문서를 확인해야 합니다.

이는 Spring Boot HikariCP 옵션을 사용하여 전달할 수 있습니다.Spring Boot 버전의 문서를 다시 확인합니다. 이 속성의 이름이 한 번 이상 변경되었습니다.

application.jpl

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

응용 프로그램.속성

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

문 가져오기 크기에도 관심이 있을 수 있지만 이 최적화는 일반적으로 각 문에 개별적으로 적용됩니다.

  • 다음을 통해 문 캐싱 사용

oracleDataSource.setImplicitCachingEnabled(true)

  • 메모리를 가장 잘 활용할 수 있는 적절한 캐시 크기 선택

connection.setStatementCacheSize(10) 사용하는 합니다. 크기는 10장에록도다장본는시는장다는0시y장0본esstted장efroeo

  • 문 캐싱을 사용하도록 응용 프로그램을 변경할 수 없는 경우 폴백

session_cached_cursors = 50 Connection.setStatementCacheSize(10)

언급URL : https://stackoverflow.com/questions/58855423/oracle-jdbc-optimization-enable-preparedstatement-caching-in-a-spring-boot-app

반응형