Saya memiliki aplikasi Spring Boot REST yang terhubung ke database Oracle. Kami menggunakan JDBC menggunakan JdbcTemplate. Properti basis data Oracle diperoleh melalui 3 pengaturan properti aplikasi :
spring.datasource.url
spring.datasource.username
spring.datasource.password
Aplikasi ini menggunakan HikariCP. Dari situs web HikariCP, saya mengetahui bahwa kumpulan ini tidak men-cache PreparedStatements karena driver JDBC adalah pengaturan terbaik untuk melakukan itu.
Sekarang, di mana dan apa yang akan saya tentukan untuk memastikan ini:
Itu Driver Oracle JDBC (ojdbc7.jar) cache PreparedStatements. Apakah ada cara untuk menyesuaikan jumlah PreparedStatements yang dapat di-cache.
Dari https://howtodoinjava.com/java/jdbc/best-practices-to-improve-jdbc-performance/ , kita melihat bahwa
Pastikan bahwa database Anda diatur ke ukuran paket maksimum dan bahwa driver cocok dengan ukuran paket itu. Untuk mengambil set hasil yang lebih besar, ini mengurangi jumlah paket total yang dikirim / diterima antara driver dan server.
Untuk mencapai hal-hal di atas, langkah-langkah apa yang harus dilakukan
- temukan ukuran paket Oracle DB Server
- temukan apakah Oracle DB Server diatur ke ukuran paket maksimum
- temukan atur ukuran paket driver Oracle JDBC (ojdbc8.jar).
Tip pengoptimalan kinerja JDBC (Oracle) lainnya akan dihargai.
Jawaban:
Hai fungsi Aktifkan pernyataan Caching pernyataan tidak ada hubungannya dengan Spring, tidak dengan REST. Fungsi ini adalah masalah negosiasi hanya antara sumber data Anda, driver JDBC Anda dan database Anda. Untuk mengetahui cara mengaturnya baca dokumentasi yang relevan tentang driver, sumber data, dan basis data Anda.
Ketika datang ke Hikari, cara yang benar untuk melakukan ini adalah (perhatikan dataource2 , ganti nama menjadi sumber data untuk mengaktifkan konfigurasi otomatis):
Properti di dalam konfigurasi Anda akan diteruskan langsung ke driver yang mendasarinya.
}
Contoh ini menggunakan inisialisasi manual dari sumber data yang mendasarinya.
sumber
cachePrepStmts
adalah opsi driver MySQL JDBC lihat github.com/brettwooldridge/HikariCP/blob/… dan dev.mysql.com/doc/connector-j/5.1/en/…data-source-properties
proxy, ia meneruskan properti ke driver sehingga jika driver tidak memilikicachePrepStmts
properti itu tidak akan berfungsi. Driver ojdbc8 tidak memiliki properti ini.oracleDataSource.setImplicitCachingEnabled(true)
connection.setStatementCacheSize(10)
Cobalah untuk lebih dekat dengan jumlah pernyataan yang paling sering digunakan Ukuran cache pernyataan standar adalah 10session_cached_cursors = 50 Connection.setStatementCacheSize(10)
sumber
Mulailah dengan memeriksa dokumentasi untuk memastikan bahwa Anda
ojdbc8.jar
cocok dengan versi server database. Ada beberapa versiojdbc8.jar
untuk 11g, 11gR2, 12c.Sesuai jawaban ini , Anda perlu
oracle.jdbc.implicitStatementCacheSize
properti diatur dalam driver JDBC. Artikel ini menyebutkan beberapa properti driver JDBC misalnyaoracle.jdbc.freeMemoryOnEnterImplicitCache
atauoracle.jdbc.maxCachedBufferSize
. Anda perlu memeriksa dokumen untuk versi driver Anda untuk mengonfirmasi bahwa properti ini tersedia.Ini dapat diteruskan menggunakan
spring.datasource.hikari.data-source-properties
opsi Spring Boot HikariCP . Periksa dokumen untuk versi Boot Musim Semi Anda, properti ini diganti namanya setidaknya sekali:application.yaml
properti aplikasi
Anda mungkin juga tertarik dengan ukuran pengambilan pernyataan tetapi optimasi ini biasanya diterapkan untuk setiap pernyataan secara terpisah.
sumber