Abstrakt Dnes budu mluvit o poolech připojení k databázím. Upřímně jsem řekl, že kachní hruška je opravdu velká. Protože connection pooly jsou relativně těžší pochopit ve srovnání s jinými kapitolami. Chci vám to vysvětlit v nejpopulárnějších větách, ale není to snadný úkol. Nicméně pooly připojení jsou také velmi důležitým znalostním bodem, zejména při nasazení víceuživatelských programů. Proto musím nejen mluvit, ale také mluvit důkladně. Díky tomuto článku pochopíte základy poolingu připojení a jak je již využit ke zlepšení výkonu vaší aplikace.
Obsah Co je to pool připojení? Jak funguje connection pool Pojďme si promluvit o několika velmi důležitých vlastnostech spojovacích poolů Výjimky a metody zpracování spojovacích poolů Způsob, jak sledovat stav vašeho připojení Základní principy efektivního využívání spojovacích poolů 1. Co je to spojovací pool? V předchozím článku "ADO.NET Musíte znát (4) objekty s ochutnáním spojení" jsem zdůraznil, že navázání připojení k databázi je velmi časově náročná (časově náročná) a náročná (náročná na zdroje). Je to proto, že připojení k databázovému serveru zahrnuje několik dlouhých procesů: vytvoření fyzického kanálu (například socketu nebo pojmenovaného pipeline), navázání úvodního handshake se serverem, analýzu informací o spojovacím řetězci, ověření připojení serverem, provedení kontroly registrace v aktuální transakci a podobně. Bez ohledu na důvod, proč takový mechanismus existuje, vždy existuje důvod existence. Protože vytvoření nového spojení je tak bolestivé, proč nepoužít znovu ten stávající?
Ve skutečnosti nám ADO.NET už poskytuje optimalizační metodu nazývanou pooling spojení. Poolová spojovací skupina je jedním z takových kontejnerů: obsahuje určitý počet fyzických připojení k databázovému serveru. Proto když se potřebujeme připojit k databázovému serveru, stačí z poolu (kontejneru) odebrat volné připojení místo vytváření nového. To výrazně snižuje zátěž spojenou s připojením k databázi, což zlepšuje výkon aplikace.
PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。
2. Jak funguje pool spojení 2.1 Vytvoření poolu spojení Je třeba poznamenat, že pooly spojení jsou citlivé na třídu. To znamená, že stejná aplikační doména může mít více různých typů poolů spojení současně. Jak tedy identifikují spojovací pooly? Podrobněji se rozlišuje podle podpisu, který tvoří proces, aplikační domény, spojovacího řetězce a identity Windows (při použití integrované bezpečnosti). Nicméně pro stejnou aplikační doménu je obvykle identifikován pouze pomocí spojovacího řetězce. Když je spojení otevřeno, vytvoří se nový spojovací pool, pokud typový podpis strip spojení neodpovídá typu existujícího poolu připojení. jinak se nový pool spojení nevytvoří.
Typický příklad navázání spojení:
V předchozím případě jsem vytvořil tři objekty SqlConnection, ale k jejich správě stačily jen dva pooly připojení. Opatrní přátelé, možná jste už zjistili, že conn1 a conn3 mají stejný spojovací řetězec, takže mohou sdílet spojovací pool, zatímco conn2 a conn1 jsou jiné než conn3, takže je potřeba vytvořit nový connection pool.
2.2 Alokace nečinných spojení Když uživatel vytvoří požadavek na spojení nebo zavolá objekt Otevření připojení, správce poolu spojení nejprve musí najít pool spojení odpovídajícího typu na základě podpisu požadavku na spojení a poté se pokusit alokovat volné připojení. Podrobnosti jsou následující:
Pokud je v poolu dostupné připojení, vraťte ho zpět. Pokud jsou všechny spoje v bazénu vyčerpány, vytvořte nové připojení, které se přidá do bazénu. Pokud je dosaženo maximálního počtu spojení v poolu, požadavek vstupuje do čekací fronty, dokud nejsou k dispozici volná připojení. 2.3 Odstranění neplatných spojení Neplatná připojení, tedy spojení, která se nepřipojují správně k databázovému serveru. Pro pooly spojení je počet spojení uložených na databázovém serveru omezený. Pokud tedy neplatná spojení nejsou včas odstraněna, bude v poolu zbytečné místo zbytečně využito. Ve skutečnosti se nemusíte obávat, správce poolu připojení se o tyto problémy postaral velmi dobře. Pokud je spojení nečinné delší dobu, nebo pokud zjistí, že připojení k serveru je odpojeno, správce poolu připojení toto spojení z poolu odstraní.
2.4 Recyklační použití spojení Když spojení dokončíme, měli bychom ho včas zavřít nebo uvolnit, aby bylo možné připojení vrátit do poolu pro opětovné použití. Spojení můžeme uzavřít metodou Close or Dispose objektu Connection, nebo příkazem using v C#.
3. Povězte mi o několika velmi důležitých atributech Chování spojovacího poolu lze řídit spojovými řetězci a zahrnuje především čtyři důležité vlastnosti:
Časový limit připojení: Doba, kdy čeká požadavek na připojení na vypršení času. Výchozí je 15 sekund za sekundy. Maximální velikost poolu: Maximální počet připojení v poolu připojení. Výchozí hodnota je 100. Minimální velikost poolu: Minimální počet připojení v poolu připojení. Výchozí nastavení je 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。 Vezměme si příklad, abychom pochopili vlastnosti konekcionistického poolu. Kód je následující:
4. Výjimky a metody zpracování spojovacích poolů Když uživatel otevře spojení bez správného nebo včasného uzavření, často to spustí problém s "únikem spojení". Uniklé spojení zůstává otevřené, dokud není vyvolána metoda Likvidace, a Garbage Collector (GC) připojení uzavře a uvolní. Na rozdíl od ADO ADO.NET potřeba ručně uzavírat použité připojení. Důležitým mýtem je, že spojení je uzavřeno, když je připojený objekt mimo lokální rozsah. Ve skutečnosti, když je mimo rozsah, uvolní se pouze objekt spojení, nikoli zdroj spojení. Podívejme se nejdřív na příklad.
Aby byly výsledky jasnější, speciálně jsem nastavil maximální počet připojení na 5 a čas vypršení je 1 sekunda. Po běhu se rychle získávají následující výsledky.
Z výše uvedených výsledků je zřejmé, že v tomto spojení existuje určitá abnormalita. Již víme, že maximální počet spojení v poolu je 5, a když je vytvořeno šesté připojení, je nutné počkat, až spojení vyprší, protože maximální počet spojení v poolu dosáhne maxima a nejsou žádná volná připojení. Když je čas vypršení překročen, objeví se výše zmíněná výjimka připojení. Proto musím znovu zdůraznit, že použité připojení by měla být co nejdříve řádně uzavřena a uvolněna.
5. Metody monitorování stavu připojení SQL Server (1) Prostřednictvím monitoru aktivity Krok 1: Otevřete MSSMS Manager a klikněte na ikonu "Activity Monitor".
Krok 2: V zobrazení Open Activity Monitor klikněte na záložku Processes.
Krok 3: Spusť příklad v #4 Výjimky a metody zpracování poolu spojení, můžete vidět 5 otevřených připojení, jak je znázorněno na obrázku níže.
(2) Použijte T-SQL příkazy Stejně tak vykonáním systémové uložené procedury sp_who můžeme také sledovat stav připojení.
6. Základní principy efektivního využívání spojovacích poolů Dobré využití poolu připojení výrazně zlepší výkon vaší aplikace. Naopak, pokud se použije špatně, neublíží. Obecně by měly být dodržovány následující principy:
Požádejte o připojení nejpozději, uvolněte ho co nejdříve. Když spojení uzavřete, nejprve ukončete příslušnou uživatelem definovanou transakci. Zajistěte a udržujte alespoň jedno otevřené spojení v poolu připojení. Snažte se vyhnout zbytkům z bazénu. To zahrnuje především fragmentaci poolu generovanou integrovanou bezpečností a fragmentaci poolu vzniklou používáním mnoha databází. Tip: Fragmentace poolu je běžným problémem v mnoha webových aplikacích a aplikace mohou vytvářet velké množství poolů, které nejsou uvolněny, dokud proces neskončí. Tímto způsobem se otevře velké množství připojení, což zabere hodně paměti a vede ke snížení výkonu.
|