Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 20385|Yanıt: 0

[Kaynak] ADO.NET Eğitim (5) Veritabanı bağlantı havuzunu ayrıntılı şekilde açıklayın

[Bağlantıyı kopyala]
Yayınlandı 17.09.2016 15:41:28 | | | |
Özet
Bugün veritabanı bağlantı havuzlarından bahsedeceğim. Dürüst olmak gerekirse, ördek armudunun çok büyük olduğunu söyledim. Çünkü bağlantı havuzları diğer bölümlere kıyasla anlaşılması nispeten zordur. Size en popüler cümlelerle açıklamak istiyorum, ama bu kolay bir iş değil. Ancak, bağlantı havuzları da çok önemli bir bilgi noktasıdır, özellikle çok kullanıcılı programların dağıtımında. Bu yüzden sadece konuşmam değil, aynı zamanda detaylıca konuşmam gerekiyor. Bu makale sayesinde, bağlantı havuzunun temellerini ve uygulamanızın performansını artırmak için zaten nasıl kullanıldığını anlayabilirsiniz.

İçindekiler
Bağlantı havuzu nedir?
Bağlantı havuzu nasıl çalışır
Bağlantı havuzlarının birkaç çok önemli özelliğinden bahsedelim
Bağlantı havuzu istisnaları ve işleme yöntemleri
Bağlantınızın durumunu izlemenin bir yolu
Bağlantı havuzlarının verimli kullanımı için temel prensipler
1. Bağlantı havuzu nedir?
      Önceki makalede, "ADO.NET Mutlaka Bilmelisiniz (4) Tat Bağlantı Nesneleri", veritabanı bağlantısı kurmanın çok zaman alan (zaman alıcı) ve emek yoğun (kaynak tüketen) bir iş olduğunu vurgulamıştım. Bunun nedeni, bir veritabanı sunucusuna bağlanmanın birkaç uzun süreç gerektirmesidir: fiziksel bir kanal (örneğin soket veya adlandırılmış boru hattı) oluşturmak, sunucuyla ilk el sıkışmayı yapmak, bağlantı dizisi bilgilerini analiz etmek, sunucunun bağlantıyı doğrulamasını sağlamak, mevcut işlemde kayıt yaptırmak için bir kontrol yapmak ve benzeri. Böyle bir mekanizmanın neden olduğu önemli değil, varoluşun her zaman bir nedeni vardır. Yeni bir bağlantı kurmak çok acı verici olduğuna göre, neden mevcut bir bağlantı yeniden kullanılmıyor?

      Aslında, ADO.NET zaten bağlantı havuzu adı verilen bir optimizasyon yöntemi sunuyor. Bağlantı havuzu böyle bir konteynerdir: veritabanı sunucusuna belirli sayıda fiziksel bağlantı barındırır. Bu nedenle, veritabanı sunucusuna bağlanmamız gerektiğinde, havuzdan (konteynerden) boş bir bağlantı çıkarmamız yeterli, yeni bir bağlantı oluşturmak yerine. Bu, veritabanına bağlanmanın ek yükünü büyük ölçüde azaltır ve bu da uygulamanın performansını artırır.

PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。



2. Bağlantı havuzu nasıl çalışır
2.1 Bir bağlantı havuzu oluştur
      Bağlantı havuzlarının sınıf hassasiyeti olduğu belirtilmelidir. Yani, aynı uygulama alanı aynı anda birden fazla farklı bağlantı havuzuna sahip olabilir. Peki, bağlantı havuzları nasıl tanımlanır? Detaylı olarak, süreci oluşturan imza, uygulama alanı, bağlantı dizisi ve entegre güvenlik kullanıldığında Windows kimliği ile ayırt edilir. Ancak aynı uygulama alanı için genellikle sadece bağlantı dizisi ile tanımlanır. Bir bağlantı açıldığında, şerit bağlantısının tip imzası mevcut bağlantı havuzunun tipiyle eşleşmiyorsa yeni bir bağlantı havuzu oluşturulur. aksi takdirde yeni bir bağlantı havuzu oluşturulmaz.

      Bağlantı kurmanın tipik bir örneği:


Yukarıdaki durumda, üç SqlConnection nesnesi oluşturdum, ancak bunları yönetmek için sadece iki bağlantı havuzu yeterliydi. Dikkatli arkadaşlar, conn1 ve conn3'ün aynı bağlantı dizisine sahip olduğunu zaten görmüş olabilirsiniz, bu yüzden bir bağlantı havuzunu paylaşabiliyorlar, oysa conn2 ve conn1 conn3'ten farklı, bu yüzden yeni bir bağlantı havuzu oluşturmanız gerekiyor.

2.2 Boşta bağlantıların tahsisi
      Bir kullanıcı bağlantı talebi oluşturduğunda veya Bağlantı nesnesinin Açılmasını çağırdığında, bağlantı havuzu yöneticisi önce bağlantı talebinin tür imzasına göre eşleşen tipte bir bağlantı havuzu bulması ve ardından boş bir bağlantı tahsis etmeye çalışması gerekir. Detaylar şunlardır:

Havuzda mevcut bir bağlantı varsa, bağlantıyı geri gönderin.
Havuzdaki tüm bağlantılar tükenmişse, havuza eklemek için yeni bir bağlantı oluşturun.
Havuzdaki maksimum bağlantı sayısına ulaşıldıysa, talep ücretsiz bağlantılar olana kadar bekleme kuyruğuna girer.
2.3 Geçersiz Bağlantıları Kaldır
      Geçersiz bağlantılar, yani veritabanı sunucusuna doğru bağlanmayan bağlantılar. Bağlantı havuzları için, veritabanı sunucusuna depolanan bağlantı sayısı sınırlıdır. Bu nedenle, geçersiz bağlantılar zamanla kaldırılmazsa, bağlantı havuzundaki alan boşa gider. Aslında, endişelenmenize gerek yok, bağlantı havuzu yöneticisi bu sorunları bizim için çok iyi çözdü. Bir bağlantı uzun süre boşta kalırsa veya sunucuya olan bağlantının kesildiğini tespit ederse, bağlantı havuzu yöneticisi bağlantıyı havuzdan kaldırır.

2.4 Kullanılan bağlantıları geri dönüştürün
      Bir bağlantıyı kullanmayı bitirdiğimizde, bağlantıyı zamanında kapatmalı veya serbest bırakmalıyız ki bağlantı havuza geri getirilip yeniden kullanılabilir. Bağlantıyı, Bağlantı nesnesinin Kapat veya Dağıtma yöntemiyle veya C#'daki using ifadesiyle kapatabiliriz.



3. Bana birkaç çok önemli özellikten bahseder misiniz?
Bağlantı havuzunun davranışı bağlantı dizileri tarafından kontrol edilebilir ve esas olarak dört önemli özelliği içerir:

Bağlantı Zaman Aşımı : Bağlantı talebinin zaman aşımını bekleme süresi. Varsayılan 15 saniye saniye cinsindendir.
Maksimum Havuz Boyutu: Bağlantı havuzundaki maksimum bağlantı sayısı. Varsayılan 100.
Minimum Havuz Boyutu: Bağlantı havuzundaki minimum bağlantı sayısı. Varsayılan 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
Bağlantı havuzunun özelliklerini anlamak için bir örnek alalım. Kod şöyledir:

4. Bağlantı havuzu istisnaları ve işleme yöntemleri
      Bir kullanıcı bir bağlantıyı doğru veya zamanında kapatmadan açtığında, genellikle "bağlantı sızıntısı" sorunu tetiklenir. Sızdıran bağlantı, Çöp Toplama yöntemi çağrılana kadar açık kalır, Çöp Toplayıcı (GC) kapanıp bağlantıyı bırakır. ADO'nun aksine, ADO.NET kullanılan bağlantıları manuel olarak kapatmak zorundayım. Önemli bir efsane, bağlantının bağlı nesne yerel kapsam dışındayken kapalı olduğudur. Aslında, kapsam dışı olduğunda sadece bağlantı nesnesi serbest bırakılır, bağlantı kaynağı değil. Önce bir örneme bakalım.

Sonuçları daha belirgin etmek için, maksimum bağlantı sayısını özel olarak 5'e ayarladım ve zaman aşımı süresi 1 saniye. Koştudan sonra aşağıdaki sonuçlar hızla elde edilir.


Yukarıdaki sonuçlardan, bağlantıda bir anormallik olduğu açıkça görülüyor. Zaten bağlantı havuzundaki maksimum bağlantı sayısının 5 olduğunu biliyoruz ve 6. bağlantı oluşturulduğunda, bağlantı havuzundaki maksimum bağlantı sayısı maksimum sayıya ulaştığı ve boş bağlantı olmadığı için bağlantının zaman dolmasını beklemek gerekir. Zaman aşıma süresi aşıldığında, yukarıda bahsedilen bağlantı istisnası ortaya çıkar. Bu nedenle, kullanılmış bağlantıların mümkün olan en kısa sürede düzgün şekilde kapatılıp serbest bırakılması gerektiğini bir kez daha vurgulamalıyım.



5. SQL Server bağlantılarının durumunu izleme yöntemleri
(1) Etkinlik monitörü aracılığıyla
Adım 1: MSSMS Yöneticisi'ni açın ve "Etkinlik Monitörü" simgesine tıklayın.



Adım 2: Open Activity Monitor görünümünde, Süreçler sekmesine tıklayın.



Adım 3: Örneği #4 Bağlantı Havuzu İstisnaları ve Işleme Yöntemleri bölümünde çalıştırın, aşağıdaki şekilde gösterildiği 5 açık bağlantıyı görebilirsiniz.



(2) T-SQL ifadeleri kullanın
Benzer şekilde, sistemde saklanan prosedürü çalıştırarak sp_who bağlantının durumunu da izleyebiliriz.






6. Bağlantı havuzlarının verimli kullanımı için temel prensipler
      Bağlantı havuzunu iyi kullanmak, uygulamanızın performansını büyük ölçüde artıracaktır. Aksine, yanlış kullanılırsa zararı olmaz. Genel olarak, aşağıdaki ilkeler takip edilmelidir:

En geç bir anda bağlantı talep edin, en kısa sürede bağlantıyı bırakın.
Bağlantıyı kapattığınızda, önce ilgili kullanıcı tanımlı işlemi kapatın.
Bağlantı havuzunda en az bir açık bağlantının olduğundan emin olun ve sürdürün.
Havuz döküntülerinden uzak durmaya çalışın. Bu esas olarak entegre güvenlik ile oluşturulan havuz parçalanmasını ve birçok veritabanı kullanılarak oluşturulan havuz parçalanmasını içerir.
İpucu: Havuz parçalanması birçok web uygulamasında yaygın bir sorundur ve uygulamalar, süreç sona erene kadar serbest bırakılmayan çok sayıda havuz oluşturabilir. Bu şekilde, çok sayıda bağlantı açılır ve çok fazla bellek kaplar ve performansın düşmesine yol açar.





Önceki:.net/c# rastgele sayılar, özel harf ve sayı sayıları üretir
Önümüzdeki:Çerezler için HttpOnly nasıl ayarlanabilir? HttpOnly ne için kullanılır?
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com