Резюме Днес ще говоря за пуловете за връзки с бази данни. Честно казано, казах, че патешката круша е много голяма. Защото пуловете за връзки са сравнително трудни за разбиране в сравнение с други глави. Искам да ти го обясня с най-популярните изречения, но не е лесна задача. Въпреки това, пуловете за връзки също са много важна точка на знание, особено при внедряване на многопотребителски програми. Затова не само трябва да говоря, но и да говоря задълбочено. Чрез тази статия ще разберете основите на пулирането на връзки и как то вече се използва за подобряване на производителността на вашето приложение.
Съдържание Какво е пул връзки? Как работи пулът за връзки Нека поговорим за няколко много важни свойства на пуловете за връзки Изключения и методи за обработка на пула за връзки Начин да следите статуса на връзката си Основни принципи за ефективно използване на пуловете за връзки 1. Какво е пул връзки? В предишната статия, "ADO.NET трябва да знаете (4) обекта на връзката на вкуса", подчертах, че установяването на връзка с база данни е много времеемко (времеемко) и трудоемко (ресурсоемко) начинание. Това е така, защото свързването със сървър на база данни включва няколко дълги процеса: установяване на физически канал (като сокет или именуван конвейер), първоначално ръкостискане със сървъра, анализ на информацията за връзка низа, удостоверяване на сървъра, проверка за регистрация в текущата транзакция и т.н. Независимо защо съществува такъв механизъм, винаги има причина за съществуване. Тъй като създаването на нова връзка е толкова болезнено, защо да не използваме отново съществуваща?
Всъщност ADO.NET вече ни дава метод за оптимизация, наречен пулиране на връзки. Пулът за връзки е един такъв контейнер: той съдържа определен брой физически връзки към сървъра на базата данни. Затова, когато трябва да се свържем със сървъра на базата данни, трябва само да извадим свободна връзка от пула (контейнера), вместо да създаваме нова. Това значително намалява натоварването при свързване с базата данни, което подобрява производителността на приложението.
PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。
2. Как работи пулът за връзки 2.1 Създаване на пул за връзки Трябва да се отбележи, че пуловете за връзки са чувствителни към класа. Тоест, една и съща приложна област може да има няколко различни типа пулове на връзки едновременно. И така, как се идентифицират пуловете за връзки? В детайли се отличава по подписа, който оформя процеса, домейна на приложението, свързващия низ и идентичността на Windows (при използване на интегрирана сигурност). Въпреки това, за един и същ приложен домейн, обикновено се идентифицира само чрез свързващия низ. Когато връзката се отвори, се създава нов пул за връзки, ако типовият подпис на лентовата връзка не съвпада с типа на съществуващия пул за връзки. в противен случай не се създава нов пул за връзки.
Типичен пример за създаване на връзка:
В горния случай създадох три SqlConnection обекта, но бяха нужни само два пула за връзка, за да ги управлявам. Внимателни приятели, може би вече сте установили, че conn1 и conn3 имат един и същ конекторен низ, така че могат да споделят пул за връзки, докато conn2 и conn1 са различни от conn3, така че трябва да създадете нов пул за връзки.
2.2 Разпределяне на неактивни връзки Когато потребител създава заявка за връзка или извиква обекта Open of Connection, мениджърът на пула на връзки първо трябва да намери пул връзки с съответстващия тип въз основа на типовия подпис на заявката за връзка, след което да се опита да отдели свободна връзка. Подробностите са следните:
Ако има свободна връзка в пула, върнете връзката. Ако всички връзки в пула са изчерпани, създайте нова връзка, която да добавите към басейна. Ако максималният брой връзки в пула е достигнат, заявката влиза в опашката за чакане, докато се появят свободни връзки. 2.3 Премахване на невалидни връзки Невалидни връзки, тоест връзки, които не се свързват правилно със сървъра на базата данни. За пуловете за връзки броят на връзките, съхранявани към сървъра на базата данни, е ограничен. Следователно, ако невалидните връзки не бъдат премахнати навреме, пространството в пула за връзки ще бъде загубено. Всъщност, няма нужда да се притеснявате – мениджърът на пула за връзки се е погрижил много добре за тези проблеми вместо нас. Ако връзката е неактивна за продължителен период от време или ако установи, че връзката със сървъра е прекъсната, мениджърът на пула за връзки премахва връзката от пула.
2.4 Рециклиране на използвани връзки Когато приключим с използването на връзка, трябва да я затворим или освободим навреме, за да може връзката да бъде върната в пула за повторна употреба. Можем да затворим връзката чрез метода Close или Dispose на обекта Connection, или чрез използването в C#.
3. Разкажи ми за няколко много важни качества Поведението на пула за връзки може да се контролира чрез връзки и основно включва четири важни свойства:
Тайм-аут на връзката: Времето, за което заявката за връзка изчака таймаут. По подразбиране са 15 секунди в секунди. Максимален размер на пула: Максималният брой връзки в пула за връзки. По подразбиране е 100. Минимален размер на пула: Минималният брой връзки в пула за връзки. По подразбиране е 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。 Нека вземем пример, за да разберем свойствата на пула от връзки. Кодът е следният:
4. Изключения и методи за обработка на пула за връзки Когато потребителят отвори връзка, без да я затвори правилно или навреме, това често задейства проблема с "изтичане на връзка". Изтеклата връзка остава отворена, докато не бъде извикан методът Dispose и Garbage Collector (GC) не затвори и освободи връзката. За разлика от ADO, ADO.NET трябва ръчно да затварям използваните връзки. Важен мит е, че връзката е затворена, когато свързаният обект е извън локалния обхват. Всъщност, когато е извън обхвата, се освобождава само обектът за връзка, а не ресурсът за връзка. Нека първо разгледаме един пример.
За да направя резултатите по-очевидни, специално зададох максималния брой връзки на 5, а времето за тайм-аут е 1 секунда. След бягане се получават следните резултати бързо.
От горните резултати е ясно, че има аномалия във връзката. Вече знаем, че максималният брой връзки в пула за връзки е 5, и когато се създаде шестата връзка, е необходимо да се изчака връзката, докато тя изтече, защото максималният брой връзки в пула за връзки е достигнал максималния брой и няма свободни връзки. Когато времето за изтичане на времето за изтичане, ще се появи споменатото по-горе изключение за връзка. Затова трябва отново да подчертая, че използваните връзки трябва да бъдат правилно затворени и освободени възможно най-скоро.
5. Методи за мониторинг на състоянието на SQL Server връзките (1) Чрез монитора за активност Стъпка 1: Отворете MSSMS Manager и кликнете върху иконата "Activity Monitor".
Стъпка 2: В изгледа Open Activity Monitor, кликнете на таба Processes.
Стъпка 3: Пуснете примера в #4 Изключения от пул връзки и методи за обработка, можете да видите 5-те отворени връзки, както е показано на фигурата по-долу.
(2) Използвайте T-SQL оператори По същия начин, като изпълняваме системно съхранената процедура, sp_who можем да следим състоянието на връзката.
6. Основни принципи за ефективно използване на пуловете за връзки Доброто използване на пула от връзки значително ще подобри производителността на вашето приложение. Напротив, ако се използва неправилно, няма да навреди. Общо взето трябва да се следват следните принципи:
Поискай връзка в най-скорошния момент, освободи връзката възможно най-скоро. Когато затворите връзката, първо затворете съответната транзакция, дефинирана от потребителя. Уверете се, че има и поддържайте поне една отворена връзка в пула за връзки. Опитайте се да избягвате отпадъците от басейна. Това основно включва фрагментация на пула, генерирана от интегрирана сигурност, и фрагментация на пула, генерирана чрез използване на множество бази данни. Съвет: Фрагментацията на пула е често срещан проблем в много уеб приложения и приложенията могат да създадат голям брой пулове, които не се пускат, докато процесът не излезе. По този начин се отваря голям брой връзки, които заемат много памет и водят до намалена производителност.
|