Penembolokan metadata pernyataan yang disiapkan untuk driver JDBC
Artikel ini menyediakan informasi tentang dua perubahan yang diterapkan untuk meningkatkan performa driver.
Batching unprepare untuk pernyataan yang disiapkan
Sejak versi 6.1.6-preview, peningkatan performa diimplementasikan melalui meminimalkan perjalanan pulang pergi server ke SQL Server. Sebelumnya, untuk setiap kueri prepareStatement, panggilan ke unprepare juga dikirim. Sekarang, driver sedang membuat batch kueri unprepare hingga ambang "ServerPreparedStatementDiscardThreshold", yang memiliki nilai default 10.
Catatan
Pengguna dapat mengubah nilai default dengan metode berikut: setServerPreparedStatementDiscardThreshold(nilai int)
Satu perubahan lagi yang diperkenalkan dari pratinjau 6.1.6 adalah bahwa sebelum versi ini, driver akan selalu memanggil sp_prepexec
. Sekarang, untuk eksekusi pertama dari pernyataan yang disiapkan, driver memanggil sp_executesql
dan untuk sisanya dijalankan sp_prepexec
dan menetapkan handel untuk itu. Rincian selengkapnya dapat ditemukan di sini.
Mulai dari rilis 11.2, setelah panggilan awalsp_executesql
, driver dapat menjalankan baik sp_prepare
atau sp_prepexec
untuk panggilan tambahan, tergantung pada nilai yang ditentukan dalam prepareMethod
properti string koneksi. Untuk informasi selengkapnya, lihat Mengatur properti koneksi.
Catatan
Pengguna dapat mengubah perilaku default ke versi sebelumnya dari selalu memanggil sp_prepexec
dengan mengatur enablePrepareOnFirstPreparedStatementCall ke true menggunakan metode berikut: setEnablePrepareOnFirstPreparedStatementCall(nilai boolean)
Daftar API baru yang diperkenalkan dengan perubahan ini, untuk batching unprepare untuk pernyataan yang disiapkan
SQLServerConnection
Metode Baru | Deskripsi |
---|---|
int getDiscardedServerPreparedStatementCount() | Mengembalikan jumlah tindakan unprepare yang saat ini terutang. |
void closeUnreferencedPreparedStatementHandles() | Memaksa permintaan unprepare untuk setiap pernyataan yang dibuang yang belum dieksekusi untuk dijalankan. |
boolean getEnablePrepareOnFirstPreparedStatementCall() | Mengembalikan perilaku untuk instans koneksi tertentu. Jika false, eksekusi pertama memanggil sp_executesql dan tidak menyiapkan pernyataan. Jika eksekusi kedua terjadi, eksekusi memanggil sp_prepare atau sp_prepexec dan benar-benar menyiapkan handel pernyataan yang disiapkan. Eksekusi selanjutnya memanggil sp_execute . Perilaku ini meringankan kebutuhan sp_unprepare akan pernyataan yang disiapkan tutup jika pernyataan hanya dijalankan sekali. Default untuk opsi ini dapat diubah dengan memanggil setDefaultEnablePrepareOnFirstPreparedStatementCall(). |
void setEnablePrepareOnFirstPreparedStatementCall(nilai boolean) | Menentukan perilaku untuk instans koneksi tertentu. Jika nilainya salah, eksekusi pertama memanggil sp_executesql dan tidak menyiapkan pernyataan. Jika eksekusi kedua terjadi, eksekusi memanggil sp_prepare atau sp_prepexec dan benar-benar menyiapkan handel pernyataan yang disiapkan. Eksekusi selanjutnya memanggil sp_execute . Perilaku ini meringankan kebutuhan sp_unprepare akan pernyataan yang disiapkan tutup jika pernyataan hanya dijalankan sekali. |
int getServerPreparedStatementDiscardThreshold() | Mengembalikan perilaku untuk instans koneksi tertentu. Pengaturan ini mengontrol berapa banyak tindakan buang yang luar biasa (sp_unprepare ) mungkin ada per koneksi sebelum panggilan untuk membersihkan handel yang terutang pada server dijalankan. Jika pengaturan adalah <= 1, tindakan unprepare segera dijalankan pada pernyataan yang disiapkan ditutup. Jika diatur ke {@literal >} 1, panggilan ini di-batch bersama-sama untuk menghindari overhead panggilan sp_unprepare terlalu sering. Default untuk opsi ini dapat diubah dengan memanggil getDefaultServerPreparedStatementDiscardThreshold(). |
void setServerPreparedStatementDiscardThreshold(int value) | Menentukan perilaku untuk instans koneksi tertentu. Pengaturan ini mengontrol berapa banyak tindakan buang yang luar biasa (sp_unprepare ) mungkin ada per koneksi sebelum panggilan untuk membersihkan handel yang terutang pada server dijalankan. Jika pengaturan adalah <= 1, tindakan unprepare segera dijalankan pada pernyataan yang disiapkan ditutup. Jika diatur ke > 1, panggilan ini di-batch bersama-sama untuk menghindari overhead panggilan sp_unprepare terlalu sering. |
SQLServerDataSource
Metode Baru | Deskripsi |
---|---|
void setEnablePrepareOnFirstPreparedStatementCall(boolean enablePrepareOnFirstPreparedStatementCall) | Jika konfigurasi ini salah, eksekusi pertama dari panggilan sp_executesql pernyataan yang disiapkan dan tidak menyiapkan pernyataan. Jika eksekusi kedua terjadi, itu memanggil sp_prepare atau sp_prepexec dan benar-benar menyiapkan handel pernyataan yang disiapkan. Eksekusi selanjutnya memanggil sp_execute . Perilaku ini meringankan kebutuhan sp_unprepare akan pernyataan yang disiapkan tutup jika pernyataan hanya dijalankan sekali. |
boolean getEnablePrepareOnFirstPreparedStatementCall() | Jika konfigurasi ini mengembalikan false, eksekusi pertama dari panggilan sp_executesql pernyataan yang disiapkan dan tidak menyiapkan pernyataan. Jika eksekusi kedua terjadi, eksekusi memanggil sp_prepare atau sp_prepexec dan benar-benar menyiapkan handel pernyataan yang disiapkan. Eksekusi selanjutnya memanggil sp_execute . Perilaku ini meringankan kebutuhan sp_unprepare akan pernyataan yang disiapkan tutup jika pernyataan hanya dijalankan sekali. |
void setServerPreparedStatementDiscardThreshold(int serverPreparedStatementDiscardThreshold) | Pengaturan ini mengontrol berapa banyak tindakan buang yang luar biasa (sp_unprepare ) mungkin ada per koneksi sebelum panggilan untuk membersihkan handel yang terutang pada server dijalankan. Jika pengaturan adalah <= 1, tindakan unprepare segera dijalankan pada pernyataan yang disiapkan ditutup. Jika diatur ke {@literal >} 1, panggilan ini di-batch bersama-sama untuk menghindari overhead panggilan sp_unprepare terlalu sering |
int getServerPreparedStatementDiscardThreshold() | Pengaturan ini mengontrol berapa banyak tindakan buang yang luar biasa (sp_unprepare ) mungkin ada per koneksi sebelum panggilan untuk membersihkan handel yang terutang pada server dijalankan. Jika pengaturan adalah <= 1, tindakan unprepare segera dijalankan pada pernyataan yang disiapkan ditutup. Jika diatur ke {@literal >} 1, panggilan ini di-batch bersama-sama untuk menghindari overhead panggilan sp_unprepare terlalu sering. |
Penembolokan metadata pernyataan yang disiapkan
Dimulai dengan versi 6.3.0-preview, driver Microsoft JDBC untuk SQL Server mendukung penembolokan pernyataan yang disiapkan. Sebelum v6.3.0-preview, jika seseorang menjalankan kueri yang telah disiapkan dan disimpan dalam cache, memanggil kueri yang sama lagi tidak akan mengakibatkan penyiapannya. Sekarang, driver mencari kueri di cache dan menemukan handel dan menjalankannya dengan sp_execute
.
Penembolokan Metadata Pernyataan yang Disiapkan dinonaktifkan secara default. Untuk mengaktifkannya, Anda perlu memanggil metode berikut pada objek koneksi:
setStatementPoolingCacheSize(int value) //value is the desired cache size (any value bigger than 0)
setDisableStatementPooling(boolean value) //false allows the caching to take place
Misalnya: connection.setStatementPoolingCacheSize(10)
connection.setDisableStatementPooling(false)
Daftar API baru yang diperkenalkan dengan perubahan ini, untuk penembolokan metadata pernyataan yang disiapkan
SQLServerConnection
Metode Baru | Deskripsi |
---|---|
void setDisableStatementPooling(nilai boolean) | Mengatur kumpulan pernyataan ke true atau false. |
boolean getDisableStatementPooling() | Mengembalikan true jika pengumpulan pernyataan dinonaktifkan. |
void setStatementPoolingCacheSize(int value) | Menentukan ukuran cache pernyataan yang disiapkan untuk koneksi ini. Nilai kurang dari 1 berarti tidak ada cache. |
int getStatementPoolingCacheSize() | Mengembalikan ukuran cache pernyataan yang disiapkan untuk koneksi ini. Nilai kurang dari 1 berarti tidak ada cache. |
int getStatementHandleCacheEntryCount() | Mengembalikan jumlah handel pernyataan yang disiapkan yang dikumpulkan saat ini. |
boolean isPreparedStatementCachingEnabled() | Apakah pengumpulan pernyataan diaktifkan atau tidak untuk koneksi ini. |
SQLServerDataSource
Metode Baru | Deskripsi |
---|---|
void setDisableStatementPooling(boolean disableStatementPooling) | Mengatur kumpulan pernyataan ke true atau false |
boolean getDisableStatementPooling() | Mengembalikan true jika pengumpulan pernyataan dinonaktifkan. |
void setStatementPoolingCacheSize(int statementPoolingCacheSize) | Menentukan ukuran cache pernyataan yang disiapkan untuk koneksi ini. Nilai kurang dari 1 berarti tidak ada cache. |
int getStatementPoolingCacheSize() | Mengembalikan ukuran cache pernyataan yang disiapkan untuk koneksi ini. Nilai kurang dari 1 berarti tidak ada cache. |