J'ai une application Spring Boot REST connectée à une base de données Oracle. Nous utilisons JDBC en utilisant JdbcTemplate. Les propriétés de la base de données Oracle sont obtenues via ces 3 paramètres application.properties :
spring.datasource.url
spring.datasource.username
spring.datasource.password
Cette application utilise le HikariCP. Sur le 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.
Sur https://howtodoinjava.com/java/jdbc/best-practices-to-improve-jdbc-performance/ , nous constatons 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
- trouver la taille du paquet Oracle DB Server
- rechercher si Oracle DB Server est défini sur la taille de paquet maximale
- find définit la taille de paquet (ojdbc8.jar) du pilote Oracle JDBC.
Tout autre conseil (Oracle) d'optimisation des performances JDBC serait apprécié.
Réponses:
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 le faire est (notez datasource2 , renommer en datasource pour activer l'autoconfiguration):
Les propriétés à l'intérieur de votre configuration seront transmises directement au pilote sous-jacent.
}
Cet exemple utilise l'initialisation manuelle de la source de données sous-jacente.
la source
cachePrepStmts
est une option de pilote JDBC MySQL voir github.com/brettwooldridge/HikariCP/blob/… et dev.mysql.com/doc/connector-j/5.1/en/…data-source-properties
un proxy, il transmet des propriétés au pilote, donc si le pilote n'a pas decachePrepStmts
propriété, cela ne fonctionnera pas. Le pilote ojdbc8 n'a pas ces propriétés.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 de 10.session_cached_cursors = 50 Connection.setStatementCacheSize(10)
la source
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 deojdbc8.jar
pour 11g, 11gR2, 12c.Selon cette réponse , vous devez
oracle.jdbc.implicitStatementCacheSize
définir une propriété dans le pilote JDBC. Cet article mentionne quelques autres propriétés de pilote JDBC, par exempleoracle.jdbc.freeMemoryOnEnterImplicitCache
ouoracle.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 transmis à l'aide de l'
spring.datasource.hikari.data-source-properties
option Spring Boot HikariCP . Vérifiez la documentation de votre version Spring Boot, cette propriété a été renommée au moins une fois:application.yaml
application.properties
Vous pouvez également être intéressé par la taille d'extraction des instructions, mais cette optimisation est généralement appliquée à chaque instruction séparément.
la source