Bagaimana cara kerja penggabungan koneksi ADO.Net?

Koneksi ke database adalah operasi intensif sumber daya yang biasanya terdiri dari beberapa langkah. Saluran komunikasi antara aplikasi dan database harus dibuat sebelum jabat tangan awal dengan server database dapat terjadi. Saluran ini dapat berupa soket atau pipa bernama. Setelah koneksi ini dibuat dan handshake awal dengan server berhasil, metadata koneksi (informasi string koneksi untuk menyambung ke database) diurai dan koneksi ke database diautentikasi oleh server database.

ADO.Net telah lama menjadi salah satu kerangka kerja akses data paling populer. Pengumpulan koneksi adalah fitur dalam ADO.Net yang memungkinkan Anda untuk meningkatkan kinerja akses data dalam aplikasi Anda.

Apa itu penggabungan koneksi?

Penyatuan koneksi adalah strategi yang digunakan untuk meminimalkan biaya yang terkait dengan pembukaan dan penutupan koneksi ke database. Ini memungkinkan Anda untuk menggunakan kembali koneksi daripada membuat koneksi baru ke database saat dan ketika diminta.

Kumpulan koneksi berisi kumpulan koneksi yang menganggur, terbuka, dan dapat digunakan kembali. Pooler mengelola kumpulan koneksi dan memelihara satu set koneksi aktif untuk setiap metadata koneksi yang diberikan, informasi konfigurasi koneksi.

Perhatikan bahwa Anda dapat memiliki beberapa kumpulan koneksi yang ada di domain aplikasi yang sama. Kumpulan koneksi dibuat per string koneksi unik yang Anda gunakan untuk menyambungkan ke database dan bukan per database. Jadi, pertama kali Anda menyambungkan ke database dengan string koneksi tertentu, kumpulan koneksi baru dibuat. Saat Anda menyambungkan ke database yang sama dengan string koneksi yang sama di lain waktu, tidak ada kumpulan koneksi baru yang dibuat, melainkan, kumpulan koneksi yang ada akan digunakan kembali.

Perlu dicatat bahwa ketika Anda menggunakan Keamanan Terpadu, kumpulan koneksi akan dibuat untuk setiap pengguna yang mengakses sistem klien, yaitu, koneksi dikumpulkan per Identitas Windows. Dalam hal ini, MSDN menyatakan: "Saat sambungan pertama kali dibuka, kumpulan sambungan dibuat berdasarkan algoritma pencocokan tepat yang mengaitkan kumpulan dengan string sambungan dalam sambungan. Setiap kumpulan sambungan dikaitkan dengan string sambungan yang berbeda. Saat koneksi baru dibuka, jika string koneksi tidak sama persis dengan kumpulan yang ada, kumpulan baru akan dibuat. "

Mengonfigurasi penggabungan koneksi

Bagaimana Anda mengontrol perilaku penggabungan koneksi? Nah, Anda dapat mengelola kumpulan koneksi menggunakan kata kunci tertentu dalam string koneksi Anda. Yang penting meliputi:

  • ConnectionTimeout - ini digunakan untuk menentukan periode tunggu (dalam detik) ketika koneksi database baru diminta. Nilai defaultnya adalah 15.
  • MinPoolSize - ini mewakili jumlah minimum koneksi di kumpulan.
  • MaxPoolSize - ini mewakili jumlah maksimum koneksi di kumpulan. Nilai defaultnya adalah 100.
  • Pooling - ini mengontrol apakah penggabungan koneksi dihidupkan atau dimatikan dan dapat memiliki nilai true of false. Jika ini disetel ke true, koneksi yang diminta diambil dari kumpulan koneksi yang sesuai.

Potongan kode berikut mengilustrasikan bagaimana kumpulan koneksi dapat dikonfigurasi menggunakan string koneksi:

string connectionString="Data Source=localhost;Initial Catalog=Sample; Integrated security=SSPI;Connection Timeout=30; Connection Lifetime=0;Min Pool Size=0;Max Pool Size=100;Pooling=true;";

using (SqlConnection connection = new SqlConnection(connectionString))

{

   connection.Open();

   //Write code here to perform CRUD operations on the Sample database

}

Anda dapat memantau perilaku penyatuan koneksi dengan menjalankan prosedur yang disimpan sp_who atau sp_who2 di SQL Server. Anda juga dapat menggunakan SQL Server Profiler atau memanfaatkan Penghitung Kinerja untuk memantau perilaku penggabungan sambungan.

Ada beberapa potensi masalah dengan penggabungan koneksi. Salah satu masalah tersebut adalah fragmentasi kumpulan. Saat bekerja dengan penggabungan koneksi, Anda harus mengetahui fragmentasi kumpulan dan memastikan bahwa tindakan yang tepat (arsitektur Anda harus dirancang untuk menangani strategi mitigasi fragmentasi kumpulan) diadopsi untuk menghindari fragmentasi kumpulan. Perhatikan bahwa fragmentasi kumpulan mungkin terjadi jika Anda menggunakan Keamanan Terintegrasi atau bahkan saat aplikasi Anda menggunakan terlalu banyak kumpulan koneksi.

Untuk memastikan bahwa penggabungan koneksi bekerja secara efisien, Anda harus memastikan bahwa Anda menutup koneksi database saat koneksi tersebut tidak lagi diperlukan. Anda tidak boleh memanggil metode Tutup atau Buang pada instance Koneksi di metode Selesaikan. Anda juga harus menutup contoh transaksi sebelum objek koneksi terkait ditutup atau dibuang. Berikut bacaan yang bagus tentang topik ini.