Spring Boot RESTアプリケーションがOracleデータベースに接続されています。JdbcTemplateを使用してJDBCを使用しています。Oracleデータベースのプロパティは、これら3つのアプリケーションから取得されます。 .properties設定:
spring.datasource.url
spring.datasource.username
spring.datasource.password
このアプリはHikariCPを使用しています。 HikariCPのWebサイトから、JDBCドライバーがそれを行うのに最適なセットアップであるため、このプールはPreparedStatementsをキャッシュしないことがわかりました。
ここで、これらを確実にするためにどこで何を指定しますか?
Oracle JDBCドライバー(ojdbc7.jar)がPreparedStatementsをキャッシュすること。キャッシュできるPreparedStatementsの数をカスタマイズする方法はありますか?.
https://howtodoinjava.com/Java/jdbc/best-practices-to-improve-jdbc-performance/ から、
データベースが最大パケットサイズに設定されていること、およびドライバーがそのパケットサイズと一致していることを確認してください。より大きな結果セットをフェッチする場合、これにより、ドライバーとサーバー間で送受信される合計パケット数が減少します。
上記に準拠して、に必要な手順は何ですか
その他の(Oracle)JDBCパフォーマンス最適化のヒントがあれば幸いです。
こんにちは、「準備済みステートメントのキャッシュを有効にする」機能は、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
がデータベースサーバーのバージョンと一致していることを確認します。 11g、11gR2、12cにはojdbc8.jar
のさまざまなバージョンがあります。
この答え に従って、JDBCドライバーでOracle.jdbc.implicitStatementCacheSize
プロパティを設定する必要があります。 この記事 は、JDBCドライバーのプロパティについてさらにいくつか言及しています。 Oracle.jdbc.freeMemoryOnEnterImplicitCache
またはOracle.jdbc.maxCachedBufferSize
。これらのプロパティが使用可能であることを確認するには、ドライバーのバージョンのドキュメントを確認する必要があります。
これは、Spring Boot HikariCP spring.datasource.hikari.data-source-properties
オプションを使用して渡すことができます。 Spring Bootバージョンのドキュメントを再確認してください。このプロパティの名前は少なくとも1回は変更されています。
application.yaml
spring:
datasource:
hikari:
data-source-properties:
Oracle.jdbc.implicitStatementCacheSize: 100
application.properties
spring.datasource.hikari.data-source-properties.Oracle.jdbc.implicitStatementCacheSize: 100
ステートメントフェッチサイズ にも興味があるかもしれませんが、この最適化は通常、各ステートメントに個別に適用されます。
oracleDataSource.setImplicitCachingEnabled(true)
connection.setStatementCacheSize(10)
最もよく使用されるステートメントの数に近づくようにしてくださいデフォルトのステートメントキャッシュサイズは10です
session_cached_cursors = 50 Connection.setStatementCacheSize(10)