Как работи обединяването на връзки ADO.Net?

Връзката с база данни е операция, изискваща много ресурси, която обикновено включва няколко стъпки. Трябва да се установи канал за комуникация между приложението и базата данни, преди да може да се случи първоначалното ръкостискане със сървъра на базата данни. Този канал може да бъде или сокет, или поименен канал. След като тази връзка се установи и първоначалното ръкостискане със сървъра успее, метаданните на връзката (информация за низа на връзката за свързване към базата данни) се анализират и връзката към базата данни се удостоверява от сървъра на базата данни.

ADO.Net отдавна е една от най-популярните рамки за достъп до данни. Пулът на връзките е функция в ADO.Net, която ви позволява да подобрите ефективността на достъпа до данни във вашето приложение.

Какво е обединяване на връзки?

Обединяването на връзки е стратегия, която се използва за минимизиране на разходите, свързани с отваряне и затваряне на връзки към базата данни. Тя ви позволява да използвате повторно връзки, вместо да създавате нови връзки към базата данни, както и когато те са поискани.

Пулът от връзки съдържа колекция от неактивни, отворени връзки за многократна употреба. Пулърът управлява пула от връзки и поддържа набор от активни връзки за всеки даден метаданни за връзка, информация за конфигурацията на връзката.

Имайте предвид, че можете да имате множество пулове от връзки, които съществуват в един и същ домейн на приложение. Пул от връзки се създава за уникален низ за връзка, който използвате за свързване към базата данни, а не за база данни. И така, при първото свързване към база данни с определен низ за връзка се създава нов пул за свързване. Когато се свържете към същата база данни със същия низ за връзка следващия път, не се създава нов пул от връзки, а по-скоро се използва повторно съществуващия пул от връзки.

Трябва да се отбележи, че когато използвате интегрирана защита, ще бъде създаден пул от връзки за всеки потребител, който осъществява достъп до клиентската система, т.е. връзките се обединяват според Windows Identity. В тази връзка MSDN гласи: „Когато връзката е отворена за първи път, се създава пул от връзки въз основа на точно съвпадащ алгоритъм, който свързва пула с низа на връзката във връзката. Всеки пул от връзки е свързан с отделен низ за връзка. Когато се отвори нова връзка, ако низът на връзката не съвпада точно със съществуващ пул, се създава нов пул. "

Конфигуриране на обединяване на връзки

Как контролирате поведението при обединяване на връзки? Е, можете да управлявате пулове от връзки, като използвате определени ключови думи във вашия низ за връзка. Важните включват следното:

  • ConnectionTimeout - използва се за определяне на периода на изчакване (в секунди), когато се иска нова връзка с база данни. Стойността по подразбиране е 15.
  • MinPoolSize - това представлява минималният брой връзки в пула.
  • MaxPoolSize - това представлява максималният брой връзки в пула. Стойността по подразбиране е 100.
  • Пулиране - това контролира дали пулът на връзката е включен или изключен и може да има стойност true на false. Когато това е зададено на true, заявената връзка се извлича от подходящия пул за връзки.

Следният кодов фрагмент илюстрира как може да се конфигурира пулът от връзки чрез низ за връзка:

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

}

Можете да наблюдавате поведението на пула на връзки, като изпълнявате съхраняваните процедури sp_who или sp_who2 в SQL Server. Можете също да използвате SQL Server Profiler или да се възползвате от броячите на производителността, за да наблюдавате поведението на обединяването на връзки.

Има няколко потенциални проблема с обединяването на връзки. Един такъв проблем е фрагментацията на пула. Когато работите с обединяване на връзки, трябва да сте наясно с фрагментацията на пула и да се уверите, че са приети подходящи мерки (вашата архитектура трябва да бъде проектирана да се отнася до стратегиите за смекчаване на фрагментацията на пула), за да се избегне фрагментацията на пула. Имайте предвид, че може да възникне фрагментация на пула, ако използвате интегрирана защита или дори когато приложението ви използва твърде много пулове от връзки.

За да сте сигурни, че обединяването на връзки работи ефективно, трябва да се уверите, че затваряте връзките към базата данни, когато те вече не са необходими. Никога не трябва да извиквате метода Close или Dispose в екземпляр на Connection в метода Finalize. Трябва също така да затворите екземплярите на транзакции, преди свързаните обекти на свързване да бъдат затворени или изхвърлени. Ето едно хубаво четиво по тази тема.