Aracılığıyla paylaş


Sürücü Yöneticisi Bağlantı Havuzu

Bağlantı havuzu, bir uygulamanın her kullanım için yeniden kurulması gerekmeyen bir bağlantı havuzundan bağlantı kullanmasını sağlar. Bir bağlantı oluşturulduğunda ve bir havuza yerleştirildikten sonra, uygulama tüm bağlantı işlemini gerçekleştirmeden bu bağlantıyı yeniden kullanabilir.

Havuzlanmış bir bağlantının kullanılması, uygulamaların bağlantı kurarken ek yükten kurtarması nedeniyle performansta ciddi kazançlar sağlayabilir. Bu özellikle bir ağ üzerinden bağlanan orta katman uygulamaları veya İnternet uygulamaları gibi sürekli bağlanan ve bağlantısı kesilen uygulamalar için önemli olabilir.

Performans kazanımlarına ek olarak, bağlantı havuzu mimarisi bir ortamın ve ilişkili bağlantılarının tek bir işlemde birden çok bileşen tarafından kullanılmasını sağlar. Bu, aynı işlemdeki tek başına bileşenlerin birbirinden haberdar olmadan birbirleriyle etkileşim kurabileceği anlamına gelir. Bağlantı havuzundaki bir bağlantı birden çok bileşen tarafından tekrar tekrar kullanılabilir.

Uyarı

ODBC 2.x davranışı sergileyen bir ODBC uygulaması tarafından, uygulama SQLSetEnvAttr çağırabildiği sürece bağlantı havuzlama kullanılabilir. Bağlantı havuzu kullanılırken, uygulamanın veritabanını veya veritabanının bağlamını değiştiren SQL deyimlerini yürütmemesi gerekir; örneğin, < değiştirme > ve bu da bir veri kaynağı tarafından kullanılan kataloğu değiştirir.

ODBC sürücüsünün iş parçacığı için tamamen güvenli olması ve bağlantı havuzunu desteklemek için bağlantıların iş parçacığına bağımlı olmaması gerekir. Bu, sürücünün herhangi bir iş parçacığındaki çağrıyı istediği zaman işleyebileceği ve bir iş parçacığında bağlanabildiği, bağlantıyı başka bir iş parçacığında kullanabileceği ve üçüncü bir iş parçacığının bağlantısını kesebileceği anlamına gelir.

Bağlantı havuzu Sürücü Yöneticisi tarafından korunur. Bağlantılar, uygulama SQLConnect veya SQLDriverConnect'i çağırdığında havuzdan çekilir ve uygulama SQLDisconnect'i çağırdığında havuza döndürülür. Havuzun boyutu, istenen kaynak ayırmalarına göre dinamik olarak büyür. Etkinlik dışı zaman aşımına bağlı olarak küçülür: Bir bağlantı bir süre etkin değilse (bir bağlantıda kullanılmamışsa), havuzdan kaldırılır. Havuzun boyutu yalnızca sunucudaki bellek kısıtlamaları ve sınırlarıyla sınırlıdır.

Sürücü Yöneticisi, bir havuzdaki belirli bir bağlantının SQLConnect veya SQLDriverConnect içinde geçirilen bağımsız değişkenlere ve bağlantı ayrıldıktan sonra ayarlanan bağlantı özniteliklerine göre kullanılması gerekip gerekmediğini belirler.

Sürücü Yöneticisi bağlantıları havuza alırken, bağlantıyı dağıtmadan önce bağlantının hala çalışıp çalışmadığını belirleyebilmesi gerekir. Aksi takdirde, Sürücü Yöneticisi geçici bir ağ hatası oluştuğunda bozuk bağlantıyı uygulamaya sunmaya devam eder. ODBC 3*.x*'de SQL_ATTR_CONNECTION_DEAD adlı yeni bir bağlantı özniteliği tanımlandı. Bu, SQL_CD_TRUE veya SQL_CD_FALSE döndüren salt okunur bir bağlantı özniteliğidir. SQL_CD_TRUE değeri, bağlantının kaybolduğu, SQL_CD_FALSE değeri ise bağlantının hala etkin olduğu anlamına gelir. (ODBC'nin önceki sürümlerine uyan sürücüler de bu özniteliği destekleyebilir.)

Bir sürücü bu seçeneği verimli bir şekilde uygulamalıdır, aksi takdirde bağlantı havuzu performansını bozar. Özellikle, bu bağlantı özniteliğini almak için yapılan bir çağrı, sunucuya gidiş dönüşe neden olmamalıdır. Bunun yerine, bir sürücü yalnızca bağlantının bilinen son durumunu döndürmelidir. Sunucuya son yolculuk başarısız olursa bağlantı kesilir, son yolculuk başarılı olursa bağlantı kesilmez.

Açıklamalar

Bağlantı kesildiyse (SQL_ATTR_CONNECTION_DEAD aracılığıyla bildirilirse), ODBC Sürücü Yöneticisi sürücüde SQLDisconnect'i çağırarak bu bağlantıyı yok eder. Yeni bağlantı istekleri havuzda kullanılabilir bir bağlantı bulamıyor olabilir. Sonuç olarak Sürücü Yöneticisi havuzun boş olduğunu varsayarak yeni bir bağlantı yapabilir.

Bir bağlantı havuzu kullanmak için uygulama aşağıdaki adımları gerçekleştirir:

  1. SQL_ATTR_CONNECTION_POOLING ortam özniteliğini SQL_CP_ONE_PER_DRIVER veya SQL_CP_ONE_PER_HENV olarak ayarlamak için SQLSetEnvAttr'i çağırarak bağlantı havuzunu etkinleştirir. Uygulama, bağlantı havuzunun etkinleştirileceği paylaşılan ortamı ayırmadan önce bu çağrının yapılması gerekir. SQLSetEnvAttr çağrısındaki ortam tanıtıcısı null olarak ayarlanmalıdır ve bu da SQL_ATTR_CONNECTION_POOLING işlem düzeyi özniteliği yapar. Öznitelik SQL_CP_ONE_PER_DRIVER olarak ayarlanırsa, her sürücü için tek bir bağlantı havuzu desteklenir. Bir uygulama birçok sürücü ve birkaç ortamla çalışıyorsa, daha az karşılaştırma gerekebileceğinden bu daha verimli olabilir. SQL_CP_ONE_PER_HENV olarak ayarlanırsa, her ortam için tek bir bağlantı havuzu desteklenir. Bir uygulama birçok ortam ve az sayıda sürücüyle çalışıyorsa, daha az karşılaştırma gerekebileceğinden bu daha verimli olabilir. SQL_ATTR_CONNECTION_POOLING SQL_CP_OFF olarak ayarlanarak bağlantı havuzu devre dışı bırakılır.

  2. SQL_HANDLE_ENV olarak ayarlanmış HandleType bağımsız değişkeniyle SQLAllocHandle'ı çağırarak bir ortam ayırır. Bağlantı havuzunun etkinleştirilmiş olması nedeniyle, bu çağrı tarafından ayrılan ortam, paylaşılan örtük bir ortam olacaktır. SQLAllocHandle'in SQL_HANDLE_DBC türünde bir HandleType ile bu ortamda çağrılması gerçekleşene kadar kullanılacak ortam belirlenmiş değildir.

  3. SQL_HANDLE_DBC olarak ayarlanmış InputHandle ve bağlantı havuzu için ayrılmış ortam tanıtıcısına ayarlanmış InputHandle ile SQLAllocHandle'ı çağırarak bir bağlantı ayırır. Driver Manager, uygulama tarafından ayarlanan ortam öznitelikleriyle eşleşen mevcut bir ortamı bulmayı dener. Böyle bir ortam yoksa, Sürücü Yöneticisi tarafından başvuru sayısı 1 olan yeni bir ortam oluşturulur. Eşleşen bir paylaşılan ortam bulunursa, ortam uygulamaya döndürülür ve başvuru sayısı artırılır. (Kullanılacak gerçek bağlantı, SQLConnect veya SQLDriverConnect çağrılana kadar Sürücü Yöneticisi tarafından belirlenmez.)

  4. Bağlantıyı kurmak için SQLConnect veya SQLDriverConnect'i çağırır. Sürücü Yöneticisi, sqlconnect çağrısındaki bağlantı seçeneklerini (veya SQLDriverConnect çağrısındaki bağlantı anahtar sözcüklerini) ve bağlantı ayırmadan sonra ayarlanan bağlantı özniteliklerini kullanarak havuzdaki hangi bağlantının kullanılması gerektiğini belirler.

    Uyarı

    İstenen bağlantının havuza alınan bir bağlantıyla nasıl eşleşdiği SQL_ATTR_CP_MATCH ortam özniteliği tarafından belirlenir. Daha fazla bilgi için bkz . SQLSetEnvAttr.

    Bağlantı havuzu kullanan ODBC uygulamaları, uygulama başlatılırken CoInitializeEx ve uygulama kapatıldığında CoUninitialize'ı çağırmalıdır.

  5. Bağlantıyla işiniz bittiğinde SQLDisconnect'i çağırır. Bağlantı, bağlantı havuzuna döndürülür ve yeniden kullanılabilir duruma gelir.

Ayrıntılı bir tartışma için bkz. Microsoft Veri Erişim Bileşenleri'nde havuzlama.

Bağlantı HavuzuYla İlgili Dikkat Edilmesi Gerekenler

SQL komutu kullanarak (ODBC API yerine) aşağıdaki eylemlerden herhangi birinin gerçekleştirilmesi, bağlantının durumunu etkileyebilir ve bağlantı havuzu etkin olduğunda beklenmeyen sorunlara neden olabilir:

  • Bağlantı açma ve varsayılan veritabanını değiştirme.

  • Yapılandırılabilir seçenekleri (SET ROWCOUNT, ANSI_NULL, IMPLICIT_TRANSACTIONS, SHOWPLAN, STATISTICS, TEXTSIZE ve DATEFORMAT dahil) değiştirmek için SET deyimini kullanma.

  • Geçici tablolar ve saklı yordamlar oluşturma.

Bu eylemlerden herhangi biri ODBC API'sinin dışında gerçekleştirilirse, bağlantıyı kullanan sonraki kişi önceki ayarları, tabloları veya yordamları otomatik olarak devralır.

Uyarı

Bazı ayarların bağlantı durumunda mevcut olmasını beklemeyin. Uygulamanızda her zaman bağlantı durumunu ayarlamanız ve uygulamanın kullanılmayan bağlantı havuzu ayarlarını kaldırdığından emin olmanız gerekir.

Driver-Aware Bağlantı Havuzu

Windows 8'den başlayarak, odbc sürücüsü havuzdaki bağlantıları daha verimli bir şekilde kullanabilir. Daha fazla bilgi için bkz Driver-Aware Bağlantı Havuzlaması.

Ayrıca Bkz.

Veri Kaynağına veya Sürücüsüne Bağlanma
ODBC Sürücüsü Geliştirme
Microsoft Veri Erişim Bileşenlerinde Havuz Oluşturma