Streszczenie Dziś opowiem o pulach połączeń baz danych. Szczerze mówiąc, powiedziałem, że gruszka kaczka jest bardzo duża. Ponieważ pule połączeń są stosunkowo trudne do zrozumienia w porównaniu do innych rozdziałów. Chcę to wyjaśnić w najpopularniejszych zdaniach, ale to nie jest łatwe zadanie. Jednak pule połączeń są również bardzo ważnym punktem wiedzy, zwłaszcza przy wdrażaniu programów wieloużytkownikowych. Dlatego muszę nie tylko mówić, ale też mówić dokładnie. Dzięki temu artykułowi zrozumiesz podstawy poolingu połączeń i zrozumiesz, jak jest ono już wykorzystywane do poprawy wydajności Twojej aplikacji.
Spis treści Czym jest pula połączeń? Jak działa pula połączeń Porozmawiajmy o kilku bardzo ważnych właściwościach pul połączeń Wyjątki pul połączeń i metody obsługi Sposób monitorowania statusu połączenia Podstawowe zasady efektywnego wykorzystania pul połączeń 1. Czym jest pula połączeń? W poprzednim artykule "ADO.NET Musisz znać (4) obiekty połączenia smakowego" podkreślałem, że nawiązanie połączenia z bazą danych jest bardzo czasochłonne (czasochłonne) i pracochłonne (zasobochłonne) zadaniem. Wynika to z faktu, że połączenie z serwerem bazy danych obejmuje kilka długich procesów: ustanowienie fizycznego kanału (takiego jak gniazdo lub nazwany potok), nawiązanie początkowego uścisku ręki z serwerem, analizę informacji o ciągu połączeń, uwierzytelnienie połączenia przez serwer, przeprowadzenie sprawdzania rejestracji w bieżącej transakcji i tak dalej. Niezależnie od tego, dlaczego taki mechanizm istnieje, zawsze istnieje powód istnienia. Skoro tworzenie nowego połączenia jest tak bolesne, dlaczego nie wykorzystać ponownie istniejącego?
W rzeczywistości ADO.NET już daje nam metodę optymalizacji zwaną poolingiem połączeń. Pula połączeń to jeden z takich kontenerów: zawiera określoną liczbę fizycznych połączeń z serwerem bazy danych. Dlatego gdy musimy połączyć się z serwerem bazy danych, wystarczy usunąć wolne połączenie z puli (kontenera) zamiast tworzyć nowe. To znacznie zmniejsza narzut związany z łączeniem się z bazą danych, co poprawia wydajność aplikacji.
PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。
2. Jak działa pula połączeń 2.1 Utworzenie puli połączeń Należy zauważyć, że pule połączeń są wrażliwe na klasę. To znaczy, że ta sama domena aplikacji może mieć jednocześnie wiele różnych typów pul połączeń. Jak więc identyfikuje się pule połączeń? Szczegółowo wyróżnia się go po sygnaturze tworzącej proces, domenie aplikacji, łańcuchu połączeń oraz tożsamości Windows (przy użyciu zintegrowanego zabezpieczenia). Jednak dla tej samej domeny aplikacji jest ona zazwyczaj identyfikowana tylko przez ciąg połączeń. Gdy połączenie zostanie otwarte, tworzona jest nowa pula połączeń, jeśli sygnatura typu połączenia strip nie odpowiada typowi istniejącej puli połączeń. w przeciwnym razie nie tworzy się nowej puli połączeń.
Typowy przykład nawiązywania więzi:
W powyższym przypadku stworzyłem trzy obiekty SqlConnection, ale do ich zarządzania potrzebowały tylko dwie pule połączeń. Uwaga, przyjaciele, być może już zauważyliście, że conn1 i conn3 mają ten sam ciąg połączeń, więc mogą dzielić pulę połączeń, podczas gdy conn2 i conn1 różnią się od conn3, więc musicie stworzyć nową pulę połączeń.
2.2 Przydzielanie połączeń bezczynnych Gdy użytkownik tworzy żądanie połączenia lub wywołuje Otwarcie obiektu Połączenia, menedżer puli połączeń najpierw musi znaleźć pulę połączeń o odpowiednim typie na podstawie sygnatury typu żądania połączenia, a następnie spróbować przydzielić wolne połączenie. Szczegóły są następujące:
Jeśli w puli jest dostępne połączenie, zwróć połączenie. Jeśli wszystkie połączenia w basenie są wyczerpane, stwórz nowe połączenie, które dodasz do puli. Jeśli osiągnięto maksymalną liczbę połączeń w puli, żądanie trafia do kolejki oczekującej, aż dostępne są wolne połączenia. 2.3 Usunięcie nieprawidłowych połączeń Nieprawidłowe połączenia, czyli połączenia, które nie łączą się poprawnie z serwerem bazy danych. W przypadku pul połączeń liczba połączeń przechowywanych na serwerze bazy danych jest ograniczona. Dlatego jeśli nieprawidłowe połączenia nie zostaną usunięte na czas, miejsce w puli połączeń zostanie zmarnowane. W rzeczywistości nie musisz się martwić, menedżer puli połączeń bardzo dobrze rozwiązał te problemy. Jeśli połączenie pozostaje nieaktywne przez dłuższy czas lub wykryje, że połączenie z serwerem zostało przerwane, menedżer puli połączeń usuwa to połączenie z puli.
2.4 Połączenia używane do recyklingu Gdy kończymy korzystać z połączenia, powinniśmy je zamknąć lub zwolnić na czas, aby połączenie mogło zostać ponownie użyte do puli. Połączenie możemy zamknąć za pomocą metody Close or Dispose w obiekcie Connection lub przez polecenie using w C#.
3. Opowiedz mi o kilku bardzo ważnych cechach Zachowanie puli połączeń można kontrolować za pomocą ciągów połączeń i obejmuje głównie cztery ważne właściwości:
Limit połączenia: Czas, w którym żądanie połączenia czeka na czas. Domyślnie to 15 sekund w sekundach. Maksymalny rozmiar puli: Maksymalna liczba połączeń w puli połączeń. Domyślnie to 100. Minimalna wielkość puli: Minimalna liczba połączeń w puli połączeń. Domyślnie to 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。 Weźmy przykład, aby zrozumieć właściwości puli połączeń. Kod jest następujący:
4. Wyjątki pul połączeń i metody obsługi Gdy użytkownik otwiera połączenie bez prawidłowego lub terminowego zamknięcia, często powoduje to problem "wycieku połączenia". Wyciekające połączenie pozostaje otwarte do czasu wywołania metody Dispose, a Garbage Collector (GC) zamyka i zwalnia połączenie. W przeciwieństwie do ADO, ADO.NET trzeba ręcznie zamykać używane połączenia. Ważnym mitem jest to, że połączenie jest zamknięte, gdy połączony obiekt znajduje się poza lokalnym zakresem. W rzeczywistości, gdy obiekt jest poza zakresem, zwalniany jest tylko obiekt połączenia, a nie zasób połączenia. Spójrzmy najpierw na przykład.
Aby efekty były bardziej oczywiste, specjalnie ustawiłem maksymalną liczbę połączeń na 5, a czas przerwy to 1 sekunda. Po biegu szybko uzyskuje się następujące wyniki.
Z powyższych wyników wynika jasno, że istnieje nieprawidłowość w połączeniu. Wiemy już, że maksymalna liczba połączeń w puli połączeń wynosi 5, a gdy zostanie utworzone szóste połączenie, trzeba poczekać na jego wygaśnięcie, ponieważ maksymalna liczba połączeń w puli połączeń osiągnęła maksymalną liczbę i nie ma wolnych połączeń. Gdy czas przekroczenia zostanie przekroczony, pojawi się wyjątek połączenia wspomniany powyżej. Dlatego muszę jeszcze raz podkreślić, że używane połączenia powinny być prawidłowo zamknięte i udostępnione jak najszybciej.
5. Metody monitorowania statusu połączeń SQL Server (1) Poprzez monitor aktywności Krok 1: Otwórz Menedżera MSSMS i kliknij ikonę "Monitor aktywności".
Krok 2: W widoku Otwarty Monitor Aktywności kliknij zakładkę Procesy.
Krok 3: Uruchom przykład w #4 Wyłączki i metody obsługi Puli Połączeń, możesz zobaczyć 5 otwartych połączeń, jak pokazano na poniższym rysunku.
(2) Używanie instrukcji T-SQL Podobnie, wykonując procedurę przechowywaną w systemie, sp_who możemy również monitorować stan połączenia.
6. Podstawowe zasady efektywnego wykorzystania pul połączeń Dobre wykorzystanie puli połączeń znacznie poprawi wydajność Twojej aplikacji. Wręcz przeciwnie, jeśli jest używany nieprawidłowo, nie wyrządzi szkody. Ogólnie rzecz biorąc, należy przestrzegać następujących zasad:
Poproś o połączenie najpóźniej, zwolnij je jak najszybciej. Gdy zamykasz połączenie, najpierw zamknij odpowiednią transakcję zdefiniowaną przez użytkownika. Upewnij się, że przynajmniej jedno otwarte połączenie w puli połączeń jest otwarte. Staraj się unikać zanieczyszczeń z basenu. Obejmuje to głównie fragmentację puli generowaną przez zintegrowane zabezpieczenia oraz fragmentację puli generowaną przez korzystanie z wielu baz danych. Wskazówka: Fragmentacja puli to częsty problem w wielu aplikacjach webowych, a aplikacje mogą tworzyć dużą liczbę pul, które nie są wypuszczane aż do zakończenia procesu. W ten sposób otwiera się wiele połączeń, co zajmuje dużo pamięci i prowadzi do obniżenia wydajności.
|