Pengumpulan Sambungan Manajer Driver

pengumpulan Koneksi ion memungkinkan aplikasi menggunakan koneksi dari kumpulan koneksi yang tidak perlu dibuat ulang untuk setiap penggunaan. Setelah koneksi dibuat dan ditempatkan di kumpulan, aplikasi dapat menggunakan kembali koneksi tersebut tanpa melakukan proses koneksi lengkap.

Menggunakan koneksi yang dikumpulkan dapat menghasilkan perolehan performa yang signifikan, karena aplikasi dapat menyimpan overhead yang terlibat dalam membuat koneksi. Ini dapat sangat signifikan untuk aplikasi tingkat menengah yang terhubung melalui jaringan atau untuk aplikasi yang berulang kali terhubung dan terputus, seperti aplikasi Internet.

Selain keuntungan performa, arsitektur pengumpulan koneksi memungkinkan lingkungan dan koneksi terkait untuk digunakan oleh beberapa komponen dalam satu proses. Ini berarti bahwa komponen yang berdiri sendiri dalam proses yang sama dapat berinteraksi satu sama lain tanpa saling menyadari. Koneksi dalam kumpulan koneksi dapat digunakan berulang kali oleh beberapa komponen.

Catatan

Koneksi pengumpulan dapat digunakan oleh aplikasi ODBC yang menunjukkan ODBC 2.perilaku x, selama aplikasi dapat memanggil SQLSetEnvAttr. Saat menggunakan pengumpulan koneksi, aplikasi tidak boleh menjalankan pernyataan SQL yang mengubah database atau konteks database, seperti mengubah <nama> database, yang mengubah katalog yang digunakan oleh sumber data.

Driver ODBC harus sepenuhnya aman untuk alur, dan koneksi tidak boleh memiliki afinitas utas untuk mendukung pengumpulan koneksi. Ini berarti driver dapat menangani panggilan pada utas apa pun kapan saja dan dapat terhubung pada satu utas, untuk menggunakan koneksi pada utas lain, dan untuk memutuskan sambungan pada utas ketiga.

Kumpulan koneksi dikelola oleh Manajer Driver. Koneksi digambar dari kumpulan saat aplikasi memanggil SQL Koneksi atau SQLDriver Koneksi dan dikembalikan ke kumpulan saat aplikasi memanggil SQLDisconnect. Ukuran kumpulan tumbuh secara dinamis, berdasarkan alokasi sumber daya yang diminta. Ini menyusut berdasarkan batas waktu tidak aktif: Jika koneksi tidak aktif untuk jangka waktu tertentu (belum digunakan dalam koneksi), koneksi dihapus dari kumpulan. Ukuran kumpulan hanya dibatasi oleh batasan dan batasan memori pada server.

Manajer Driver menentukan apakah koneksi tertentu dalam kumpulan harus digunakan sesuai dengan argumen yang diteruskan di SQL Koneksi atau SQLDriver Koneksi, dan sesuai dengan atribut koneksi yang diatur setelah koneksi dialokasikan.

Ketika Manajer Driver mengumpulkan koneksi, Manajer Driver harus dapat menentukan apakah koneksi masih berfungsi sebelum membagikan koneksi. Jika tidak, Driver Manager terus membagikan koneksi mati ke aplikasi setiap kali kegagalan jaringan sementara terjadi. Atribut koneksi baru telah ditentukan dalam ODBC 3*.x*: SQL_ATTR_CONNECTION_DEAD. Ini adalah atribut koneksi baca-saja yang mengembalikan SQL_CD_TRUE atau SQL_CD_FALSE. Nilai SQL_CD_TRUE berarti bahwa koneksi telah hilang, sementara nilai SQL_CD_FALSE berarti bahwa koneksi masih aktif. (Driver yang sesuai dengan versi ODBC sebelumnya juga dapat mendukung atribut ini.)

Driver harus menerapkan opsi ini secara efisien atau akan merusak performa pengumpulan koneksi. Secara khusus, panggilan untuk mendapatkan atribut koneksi ini tidak boleh menyebabkan perjalanan pulang pergi ke server. Sebagai gantinya, driver seharusnya hanya mengembalikan status koneksi terakhir yang diketahui. Koneksi mati jika perjalanan terakhir ke server gagal, dan tidak mati jika perjalanan terakhir berhasil.

Keterangan

Jika koneksi telah hilang (dilaporkan melalui SQL_ATTR_CONNECTION_DEAD), Odbc Driver Manager akan menghancurkan koneksi tersebut dengan memanggil SQLDisconnect di driver. Permintaan koneksi baru mungkin tidak menemukan koneksi yang dapat digunakan di kumpulan. Akhirnya Driver Manager mungkin membuat koneksi baru, dengan asumsi kumpulan kosong.

Untuk menggunakan kumpulan koneksi, aplikasi melakukan langkah-langkah berikut:

  1. Memungkinkan pengumpulan koneksi dengan memanggil SQLSetEnvAttr untuk mengatur atribut lingkungan SQL_ATTR_CONNECTION_POOLING ke SQL_CP_ONE_PER_DRIVER atau SQL_CP_ONE_PER_HENV. Panggilan ini harus dilakukan sebelum aplikasi mengalokasikan lingkungan bersama tempat pengumpulan koneksi akan diaktifkan. Handel lingkungan dalam panggilan ke SQLSetEnvAttr harus diatur ke null, yang membuat SQL_ATTR_CONNECTION_POOLING atribut tingkat proses. Jika atribut diatur ke SQL_CP_ONE_PER_DRIVER, satu kumpulan koneksi didukung untuk setiap driver. Jika aplikasi bekerja dengan banyak driver dan beberapa lingkungan, ini mungkin lebih efisien karena perbandingan yang lebih sedikit mungkin diperlukan. Jika diatur ke SQL_CP_ONE_PER_HENV, satu kumpulan koneksi didukung untuk setiap lingkungan. Jika aplikasi bekerja dengan banyak lingkungan dan beberapa driver, ini mungkin lebih efisien karena perbandingan yang lebih sedikit mungkin diperlukan. kumpulan Koneksi dinonaktifkan dengan mengatur SQL_ATTR_CONNECTION_POOLING ke SQL_CP_OFF.

  2. Mengalokasikan lingkungan dengan memanggil SQLAllocHandle dengan argumen HandleType diatur ke SQL_HANDLE_ENV. Lingkungan yang dialokasikan oleh panggilan ini akan menjadi lingkungan bersama implisit karena pengumpulan koneksi telah diaktifkan. Namun, lingkungan yang akan digunakan tidak ditentukan, sampai SQLAllocHandle dengan HandleType SQL_HANDLE_DBC dipanggil pada lingkungan ini.

  3. Mengalokasikan koneksi dengan memanggil SQLAllocHandle dengan InputHandle diatur ke SQL_HANDLE_DBC, dan InputHandle diatur ke handel lingkungan yang dialokasikan untuk pengumpulan koneksi. Driver Manager mencoba menemukan lingkungan yang ada yang cocok dengan atribut lingkungan yang ditetapkan oleh aplikasi. Jika tidak ada lingkungan seperti itu, lingkungan dibuat, dengan jumlah referensi (dikelola oleh Manajer Driver) 1. Jika lingkungan bersama yang cocok ditemukan, lingkungan dikembalikan ke aplikasi dan jumlah referensinya bertambah. (Koneksi aktual yang akan digunakan tidak ditentukan oleh Manajer Driver hingga SQL Koneksi atau SQLDriver Koneksi dipanggil.)

  4. Memanggil SQL Koneksi atau SQLDriver Koneksi untuk membuat koneksi. Manajer Driver menggunakan opsi koneksi dalam panggilan ke SQL Koneksi (atau kata kunci koneksi dalam panggilan ke SQLDriver Koneksi) dan atribut koneksi diatur setelah alokasi koneksi untuk menentukan koneksi mana di kumpulan yang harus digunakan.

    Catatan

    Bagaimana koneksi yang diminta dicocokkan dengan koneksi terkumpul ditentukan oleh atribut lingkungan SQL_ATTR_CP_MATCH. Untuk informasi selengkapnya, lihat SQLSetEnvAttr.

    Aplikasi ODBC yang menggunakan pengumpulan koneksi harus memanggil CoInitializeEx selama inisialisasi aplikasi dan CoUninitialize saat aplikasi ditutup.

  5. Memanggil SQLDisconnect setelah selesai dengan koneksi. Koneksi dikembalikan ke kumpulan koneksi dan tersedia untuk digunakan kembali.

Untuk diskusi mendalam, lihat Pengumpulan di Komponen Akses Data Microsoft.

Pertimbangan Pengumpulan Koneksi ion

Melakukan salah satu tindakan berikut menggunakan perintah SQL (bukan melalui ODBC API) dapat memengaruhi status koneksi dan menyebabkan masalah tak terduga saat pengumpulan koneksi aktif:

  • Membuka koneksi dan mengubah database default.

  • Menggunakan pernyataan SET untuk mengubah opsi yang dapat dikonfigurasi (termasuk SET ROWCOUNT, ANSI_NULL, IMPLICIT_TRANSACTIONS, SHOWPLAN, STATISTICS, TEXTSIZE, dan DATEFORMAT).

  • Membuat tabel sementara dan prosedur tersimpan.

Jika salah satu tindakan ini dilakukan di luar ODBC API, orang berikutnya yang menggunakan koneksi akan secara otomatis mewarisi pengaturan, tabel, atau prosedur sebelumnya.

Catatan

Jangan harap pengaturan tertentu ada dalam status koneksi. Anda harus selalu mengatur status koneksi di aplikasi Anda dan memastikan bahwa aplikasi menghapus pengaturan pengumpulan koneksi yang tidak digunakan.

Pengumpulan Sambungan Sadar Driver

Dimulai di Windows 8, driver ODBC dapat menggunakan koneksi di kumpulan dengan lebih efisien. Untuk informasi selengkapnya, lihat Pengumpulan Koneksi sadar driver.

Lihat Juga

Koneksi ke Sumber Data atau Driver
Mengembangkan Driver ODBC
Pengumpulan di Komponen Akses Data Microsoft