J'ai une application Spring Boot REST connectée à une base de données Oracle. Nous utilisons JDBC à l'aide de JdbcTemplate. Les propriétés de la base de données Oracle sont obtenues via ces 3 applications Paramètres .properties :
spring.datasource.url
spring.datasource.username
spring.datasource.password
Cette application utilise le HikariCP. À partir du site Web HikariCP, j'ai appris que ce pool ne met pas en cache PreparedStatements car le pilote JDBC est le mieux configuré pour le faire.
Maintenant, où et que devrais-je spécifier pour garantir ces:
Que le pilote Oracle JDBC (ojdbc7.jar) met en cache PreparedStatements. Existe-t-il un moyen de personnaliser le nombre de PreparedStatements qu'il peut mettre en cache.
De https://howtodoinjava.com/Java/jdbc/best-practices-to-improve-jdbc-performance/ , nous voyons que
Assurez-vous que votre base de données est définie sur la taille de paquet maximale et que le pilote correspond à cette taille de paquet. Pour récupérer des jeux de résultats plus volumineux, cela réduit le nombre total de paquets envoyés/reçus entre le pilote et le serveur.
Conformément à ce qui précède, quelles sont les étapes nécessaires pour
Tout autre conseil (Oracle) d'optimisation des performances JDBC serait apprécié.
Salut la fonction Activer la mise en cache des instructions préparées n'a rien à voir ni avec Spring, ni avec REST. Cette fonction est une question de négociation uniquement entre votre source de données, votre pilote JDBC et votre base de données. Pour savoir comment le configurer, lisez la documentation pertinente sur votre pilote, votre source de données et votre base de données.
En ce qui concerne Hikari, la meilleure façon de procéder est (remarque datasource2, renommer datasource pour activer la configuration automatique):
spring:
datasource2:
dataSourceClassName: com.zaxxer.hikari.HikariDatasource
.....
......
configuration:
maximumPoolSize: 25
data-source-properties:
ImplicitCachingEnabled: true
MaxStatements: 100
Les propriétés à l'intérieur de votre configuration seront transmises directement au pilote sous-jacent.
@Bean
@ConfigurationProperties("spring.datasource2")
public DataSourceProperties dataSourceProperties2() {
return new DataSourceProperties();
}
@Bean()
@ConfigurationProperties("spring.datasource2.configuration")
public DataSource hikariDatasource() {
return dataSourceProperties2().initializeDataSourceBuilder().build();
}
Cet exemple utilise l'initialisation manuelle de la source de données sous-jacente.
Commencez par vérifier la documentation pour vous assurer que votre ojdbc8.jar
correspond à la version du serveur de base de données. Il existe différentes versions de ojdbc8.jar
pour 11g, 11gR2, 12c.
Selon cette réponse , vous avez besoin de Oracle.jdbc.implicitStatementCacheSize
propriété à définir dans le pilote JDBC. Cet article mentionne quelques autres propriétés de pilote JDBC, par exemple Oracle.jdbc.freeMemoryOnEnterImplicitCache
ou Oracle.jdbc.maxCachedBufferSize
. Vous devez vérifier la documentation de votre version de pilote pour confirmer que ces propriétés sont disponibles.
Cela peut être passé en utilisant Spring Boot HikariCP spring.datasource.hikari.data-source-properties
option. Vérifiez la documentation de votre version Spring Boot, cette propriété a été renommée au moins une fois:
application.yaml
spring:
datasource:
hikari:
data-source-properties:
Oracle.jdbc.implicitStatementCacheSize: 100
application.properties
spring.datasource.hikari.data-source-properties.Oracle.jdbc.implicitStatementCacheSize: 100
Vous pourriez également être intéressé par taille de récupération de l'instruction mais cette optimisation est généralement appliquée à chaque instruction séparément.
oracleDataSource.setImplicitCachingEnabled(true)
connection.setStatementCacheSize(10)
Essayez de vous rapprocher du nombre d'instructions les plus utilisées La taille par défaut du cache d'instructions est 10
session_cached_cursors = 50 Connection.setStatementCacheSize(10)