Bagikan melalui


Penembolokan metadata pernyataan yang disiapkan untuk driver JDBC

Unduh 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 melakukan batching kueri unprepare hingga ambang batas "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 awal sp_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 yang belum disebarkan saat ini.
void closeUnreferencedPreparedStatementHandles() Memaksa permintaan unprepare untuk setiap pernyataan yang disiapkan yang dibuang yang luar biasa 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 akan sp_unprepare 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 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 akan sp_unprepare 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 luar biasa pada server dijalankan. Jika pengaturan adalah <= 1, tindakan yang belum disebarkan akan segera dijalankan pada pernyataan yang disiapkan ditutup. Jika diatur ke {@literal >} 1, panggilan ini dikumpulkan 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 luar biasa pada server dijalankan. Jika pengaturan adalah <= 1, tindakan yang belum disebarkan akan segera dijalankan pada pernyataan yang disiapkan ditutup. Jika diatur ke > 1, panggilan ini dikumpulkan 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 pernyataan yang disiapkan memanggil sp_executesql dan tidak menyiapkan pernyataan. Jika eksekusi kedua terjadi, sp_prepare eksekusi memanggil atau sp_prepexec dan benar-benar menyiapkan handel pernyataan yang disiapkan. Eksekusi selanjutnya memanggil sp_execute. Perilaku ini meringankan kebutuhan akan sp_unprepare 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 akan sp_unprepare 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 luar biasa pada server dijalankan. Jika pengaturan adalah <= 1, tindakan yang belum disebarkan akan segera dijalankan pada pernyataan yang disiapkan ditutup. Jika diatur ke {@literal >} 1, panggilan ini dikumpulkan 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 luar biasa pada server dijalankan. Jika pengaturan adalah <= 1, tindakan yang belum disebarkan akan segera dijalankan pada pernyataan yang disiapkan ditutup. Jika diatur ke {@literal >} 1, panggilan ini dikumpulkan bersama-sama untuk menghindari overhead panggilan sp_unprepare terlalu sering.

Penembolokan metadata pernyataan yang disiapkan

Dimulai dengan pratinjau versi 6.3.0, 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 menghasilkan persiapan. 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 pengumpulan 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 terkumpul 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 kumpulan pernyataan dinonaktifkan.
void setStatementPoolingCacheSize(int statementPoolingCacheSize) Menentukan ukuran singgahan 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.

Lihat juga

Meningkatkan performa dan keandalan dengan driver JDBC