Abstrak Hari ini saya akan berbicara tentang kumpulan koneksi database. Sejujurnya, saya mengatakan bahwa pir bebek sangat besar. Karena kumpulan koneksi relatif sulit dipahami dibandingkan dengan bab lainnya. Saya ingin menjelaskannya kepada Anda dalam kalimat paling populer, tetapi itu bukan tugas yang mudah. Namun, kumpulan koneksi juga merupakan poin pengetahuan yang sangat penting, terutama saat menyebarkan program multi-pengguna. Oleh karena itu, saya tidak hanya harus berbicara tetapi juga berbicara secara menyeluruh. Melalui artikel ini, Anda akan memahami dasar-dasar pengumpulan koneksi dan bagaimana pengumpulan koneksi sudah dimanfaatkan untuk meningkatkan performa aplikasi Anda.
Indeks Apa itu kumpulan koneksi? Cara kerja kumpulan koneksi Mari kita bicara tentang beberapa properti yang sangat penting dari kumpulan koneksi Pengecualian kumpulan koneksi dan metode penanganan Cara untuk memantau status koneksi Anda Prinsip dasar untuk penggunaan kumpulan koneksi yang efisien 1. Apa itu kumpulan koneksi? Pada artikel sebelumnya, "ADO.NET Yang Harus Anda Ketahui (4) Rasa Objek Koneksi", saya telah menekankan bahwa membangun koneksi database adalah hal yang sangat memakan waktu (memakan waktu) dan padat karya (memakan sumber daya). Ini karena menghubungkan ke server database melibatkan beberapa proses yang panjang: membuat saluran fisik (seperti soket atau alur bernama), melakukan jabat tangan awal dengan server, menganalisis informasi string koneksi, meminta server mengautentikasi koneksi, menjalankan pemeriksaan untuk mendaftar dalam transaksi saat ini, dan sebagainya. Terlepas dari mengapa ada mekanisme seperti itu, selalu ada alasan untuk keberadaan. Karena membuat koneksi baru sangat menyakitkan, mengapa tidak menggunakan kembali yang sudah ada?
Faktanya, ADO.NET sudah memberi kita metode pengoptimalan yang disebut connection pooling. Kumpulan koneksi adalah salah satu kontainer tersebut: menampung sejumlah koneksi fisik ke server database. Oleh karena itu, ketika kita perlu terhubung ke server database, kita hanya perlu mengeluarkan koneksi gratis dari kumpulan (kontainer) alih-alih membuat yang baru. Ini sangat mengurangi overhead penyambungan ke database, yang meningkatkan kinerja aplikasi.
PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。
2. Cara kerja kumpulan koneksi 2.1 Buat kumpulan koneksi Perlu dicatat bahwa kumpulan koneksi sensitif terhadap kelas. Artinya, domain aplikasi yang sama dapat memiliki beberapa jenis kumpulan koneksi yang berbeda secara bersamaan. Jadi, bagaimana kumpulan koneksi diidentifikasi? Secara rinci, ini dibedakan oleh tanda tangan yang membentuk proses, domain aplikasi, string koneksi, dan identitas Windows (saat menggunakan keamanan terintegrasi). Namun, untuk domain aplikasi yang sama, umumnya hanya diidentifikasi oleh string koneksi. Saat koneksi dibuka, kumpulan koneksi baru dibuat jika tanda tangan jenis koneksi strip tidak cocok dengan jenis kumpulan koneksi yang ada. jika tidak, tidak ada kumpulan koneksi baru yang dibuat.
Contoh umum untuk membuat koneksi:
Dalam contoh di atas, saya membuat tiga objek SqlConnection, tetapi hanya dua kumpulan koneksi yang diperlukan untuk mengelolanya. Teman-teman yang hati-hati, Anda mungkin sudah menemukan bahwa conn1 dan conn3 memiliki string koneksi yang sama, sehingga mereka dapat berbagi kumpulan koneksi, sedangkan conn2 dan conn1 berbeda dari conn3, jadi Anda perlu membuat kumpulan koneksi baru.
2.2 Mengalokasikan koneksi menganggur Saat pengguna membuat permintaan koneksi atau memanggil objek Open of a Connection, manajer kumpulan koneksi pertama-tama perlu menemukan kumpulan koneksi dengan jenis yang cocok berdasarkan tanda tangan jenis permintaan koneksi, lalu mencoba mengalokasikan koneksi gratis. Rinciannya adalah sebagai berikut:
Jika ada koneksi yang tersedia di pool, kembalikan koneksi. Jika semua koneksi dalam kumpulan habis, buat koneksi baru untuk ditambahkan ke kumpulan. Jika jumlah maksimum koneksi dalam kumpulan telah tercapai, permintaan memasuki antrean tunggu hingga ada koneksi gratis yang tersedia. 2.3 Hapus Koneksi Tidak Valid Koneksi yang tidak valid, yaitu koneksi yang tidak terhubung dengan benar ke server database. Untuk kumpulan koneksi, jumlah koneksi yang disimpan ke server database terbatas. Oleh karena itu, jika koneksi yang tidak valid tidak dihapus tepat waktu, ruang di kumpulan koneksi akan terbuang-. Bahkan, Anda tidak perlu khawatir, manajer kolam koneksi telah menangani masalah ini untuk kami dengan sangat baik. Jika koneksi menganggur untuk jangka waktu yang lama, atau jika mendeteksi bahwa koneksi ke server terputus, pengelola kumpulan koneksi menghapus koneksi dari kumpulan.
2.4 Daur ulang koneksi bekas Ketika kita selesai menggunakan koneksi, kita harus menutup atau melepaskannya tepat waktu sehingga koneksi dapat dikembalikan ke kolam untuk digunakan kembali. Kita dapat menutup koneksi melalui metode Close atau Dispose dari objek Connection, atau melalui pernyataan using di C#.
3. Ceritakan tentang beberapa atribut yang sangat penting Perilaku kumpulan koneksi dapat dikontrol oleh string koneksi dan terutama mencakup empat properti penting:
Batas Waktu Koneksi: Waktu permintaan koneksi menunggu batas waktu. Defaultnya adalah 15 detik dalam hitungan detik. Ukuran Kolam Maks: Jumlah maksimum koneksi dalam kumpulan koneksi. Defaultnya adalah 100. Ukuran Kolam Minimum: Jumlah minimum koneksi di kumpulan koneksi. Defaultnya adalah 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。 Mari kita ambil contoh untuk memahami properti kumpulan koneksi. Kodenya adalah sebagai berikut:
4. Pengecualian kumpulan koneksi dan metode penanganan Ketika pengguna membuka koneksi tanpa menutupnya dengan benar atau tepat waktu, hal itu sering memicu masalah "kebocoran koneksi". Koneksi yang bocor tetap terbuka hingga metode Dispose dipanggil, dan Pengumpul Sampah (GC) menutup dan melepaskan koneksi. Tidak seperti ADO, ADO.NET perlu menutup koneksi bekas secara manual. Mitos penting adalah bahwa koneksi ditutup ketika objek yang terhubung berada di luar cakupan lokal. Faktanya, ketika di luar cakupan, hanya objek koneksi yang dirilis, bukan sumber daya koneksi. Nah, mari kita lihat contohnya terlebih dahulu.
Untuk membuat hasilnya lebih jelas, saya secara khusus mengatur jumlah maksimum koneksi menjadi 5 dan waktu habis adalah 1 detik. Setelah berlari, hasil berikut diperoleh dengan cepat.
Dari hasil di atas, jelas ada kelainan pada koneksi. Kita sudah tahu bahwa jumlah maksimum koneksi di kumpulan koneksi adalah 5, dan ketika koneksi ke-6 dibuat, perlu menunggu koneksi hingga waktu habis karena jumlah maksimum koneksi di kumpulan koneksi telah mencapai jumlah maksimum dan tidak ada koneksi gratis. Ketika waktu habis terlampaui, pengecualian koneksi yang disebutkan di atas akan muncul. Oleh karena itu, saya harus menekankan sekali lagi bahwa koneksi bekas harus ditutup dengan benar dan dilepaskan sesegera mungkin.
5. Metode untuk memantau status koneksi SQL Server (1) Melalui monitor aktivitas Langkah 1: Buka MSSMS Manager dan klik ikon "Activity Monitor".
Langkah 2: Dalam tampilan Buka Monitor Aktivitas, klik tab Proses.
Langkah 3: Jalankan contoh di #4 Pengecualian Kumpulan Koneksi dan Metode Penanganan, Anda dapat melihat 5 koneksi terbuka seperti yang ditunjukkan pada gambar di bawah ini.
(2) Gunakan pernyataan T-SQL Demikian juga, dengan menjalankan prosedur tersimpan sistem sp_who kita juga dapat memantau status koneksi.
6. Prinsip dasar untuk penggunaan kumpulan koneksi yang efisien Memanfaatkan kumpulan koneksi dengan baik akan sangat meningkatkan kinerja aplikasi Anda. Sebaliknya, jika digunakan secara tidak benar, itu tidak akan membahayakan. Secara umum, prinsip-prinsip berikut harus diikuti:
Minta koneksi paling lambat, lepaskan koneksi paling cepat. Saat Anda menutup koneksi, tutup transaksi yang ditentukan pengguna yang relevan terlebih dahulu. Pastikan dan pertahankan setidaknya satu koneksi terbuka di kumpulan koneksi. Cobalah untuk menghindari puing-puing kolam. Ini terutama mencakup fragmentasi kumpulan yang dihasilkan oleh keamanan terintegrasi dan fragmentasi kumpulan yang dihasilkan dengan menggunakan banyak database. Tips: Fragmentasi kumpulan adalah masalah umum di banyak aplikasi web, dan aplikasi dapat membuat sejumlah besar kumpulan yang tidak dirilis hingga proses keluar. Dengan cara ini, sejumlah besar koneksi akan dibuka, menghabiskan banyak memori, mengakibatkan penurunan kinerja.
|