Buffer adaptif adalah jawaban yang bagus. Saya juga merekomendasikan untuk memeriksa SET
koneksi ' pilihan melalui SQL Server Profiler.
Saat Anda memulai pelacakan, pastikan ExistingConnections
dipilih. Bandingkan SPID dari koneksi JDBC dan koneksi SSMS. ARITHABORT
terlintas dalam pikiran sebagai salah satu yang saya lihat menyebabkan perbedaan kinerja antara driver SSMS dan JDBC. Microsoft secara singkat menyebutkannya di sini:http://msdn.microsoft.com/en-us/library/ms190306.aspx. Informasi Stack Exchange di sini:https://dba.stackexchange.com/questions/9840/why-would-set-arithabort-on-dramatically-speed-up-a-query
Di Oracle, saya telah melihat dampak besar dengan bermain dengan setFetchSize
metode pada Statement
/ PreparedStatement
obyek. Rupanya, pengandar SQL Server tidak mendukung metode itu. Namun, ada metode internal di driver untuk itu. Lihat Menyetel prefetch baris default di SQL Server menggunakan driver JDBC untuk detailnya.
Juga, apa yang Anda lakukan di while (rs.next())
lingkaran? Coba lakukan apa pun selain membaca kolom, seperti rs.getInt(1)
. Lihat apa yang terjadi. Jika itu terbang, itu menunjukkan kemacetan dalam pemrosesan sebelumnya dari kumpulan hasil Anda. Jika masih lambat, maka masalahnya pasti ada di driver atau database.
Anda dapat menggunakan SQL Server Profiler untuk membandingkan eksekusi saat mereka masuk melalui JDBC dan saat Anda menjalankannya melalui SSMS. Bandingkan CPU, baca, tulis, dan durasi. Jika mereka berbeda, maka rencana eksekusi mungkin berbeda, yang mengarahkan saya kembali ke hal pertama yang saya sebutkan:SET
pilihan.