Jak zabić bezczynne połączenia w PostgreSQL

Jak zabić bezczynne połączenia w PostgreSQL

Pierwszym krokiem w wprowadzaniu zmian lub odczytaniu niektórych informacji z danych PostgreSQL jest ustanowienie połączeń. Z drugiej strony każdy link generował koszty ogólne przy użyciu procedury i przechowywania. Właśnie dlatego urządzenie z minimalnymi zasobami (odczyt, pamięć, sprzęt) może obsługiwać ograniczoną kruszywa połączeń. Gdy ograniczony agregat wykroczy daleko poza punkt, powinien nadal rzucić błędy lub odmawiać połączeń. W ramach Postgresql.Conf, Postgresql wykonuje przyzwoitą robotę, ograniczając linki. W tym samouczku przyjrzymy się różnym formom stanów, które mogą mieć linki PostgreSQL. Pokażemy Ci, jak ustalić, czy link jest aktywny, czy jest nieaktywny przez długi czas, w którym można go odłączyć, aby zwolnić linki i zasoby.

Połączyć się z serwerem:

Na początku upewnij się, że PGADMIN4 był w pełni funkcjonalny w systemie komputerowym. Otwórz go z aplikacji. Musisz podłączyć go z Localhost, podając hasło.

Po łączności z root localhost, podłącz ją z serwerem PostgreSQL. Wpisz hasło dla użytkownika PostgreSQL 13 „Postgres, aby połączyć się. Stuknij przycisk OK, aby kontynuować.

Teraz zostałeś podłączony do serwera PostgreSQL 13. Możesz zobaczyć listę baz danych przebywających na serwerze, jak przedstawiono na poniższym zdjęciu. Baza danych Postgres to domyślna baza danych „utworzona w momencie instalacji PostgreSQL, podczas gdy baza danych„ testu ”została utworzona przez użytkownika po instalacji.

Połączenie:

Jeśli ustalono link PostgreSQL, może wykonywać różne działania, które powodują przejścia stanu. Należy podjąć racjonalną decyzję o tym, czy link działa, czy też pozostało bezczynne/nieużywane w zależności od stanu i czasu trwania w każdym stanie. Należy zauważyć, że dopóki aplikacja celowo nie zamknie połączenia, będzie działać, marnując zasoby długo po odłączeniu klienta. Istnieją 4 potencjalne stany dla połączenia:

  • Aktywny: Oznacza to, że link jest uruchomiony.
  • Bezczynny: Oznacza to, że link jest nieaktywny, więc musimy przechowywać ich zapis w zależności od tego, jak długo były bezczynne.
  • Bezczynny (w transakcji): Oznacza to, że backend jest zaangażowany w zapytanie, chociaż jest właściwie bezczynny i może oczekuje wkładu od klienta końcowego.
  • Bezczynne w transakcji (przerwane): Ten warunek jest równoważny w procesie. Jednak jedno z deklaracji zakończyło się błędem. Można go śledzić w zależności od tego, jak długo było bezczynne.

Zidentyfikuj stany połączenia:

Tabele katalogowe PostgreSQL zapewniają wbudowany widok „PG_STAT_ACTIVITY”, aby sprawdzić statystyki o tym, co robi link lub ile czasu było w tym stanie. Aby sprawdzić wszystkie statystyki dotyczące każdej bazy danych i każdego stanu połączenia, otwórz narzędzie zapytania i wykonaj poniższe zapytanie:

>> Wybierz * z pg_stat_activity;

Zapytanie zostało wdrożone owocnie, a pokazano notatkę.

Po sprawdzeniu strony wyjściowej danych znajdziesz tabelę z kilkoma kolumnami, jak pokazano poniżej. Możesz sprawdzić stany połączeń, sprawdzając wartości pola „stan”.

Aby uprościć dane wyjściowe i mieć jasny pomysł połączeń, ich stanów, użytkowników i serwerów w tych stanach, musisz wykonać zapytanie poniżej modyfikowanego w narzędziu zapytania. To zapytanie pokazuje tylko 5 dziedzin rekordów dla połączeń i poszczególnych danych. Kolumna „PID” oznacza identyfikator procesu. Kolumna „stan” zawiera państwa procesów. Kolumna „useName” identyfikuje użytkownika, który pracuje nad konkretnym procesem. Kolumna „nazwa danych” określona nazwa bazy danych, w której transakcja jest wykonywana. Kolumna „DataD” oznacza identyfikator bazy danych.

>> Wybierz PID, stan, nazwa użytkowania, DATID, z PG_STAT_ACTIVITY;

Wyjście ma w sumie 8 procesów. Kolumna „stanu” pokazuje, że obecnie działają tylko 3 procesy. Jeden jest przechowywany domyślnie bazą danych „Postgres, a pozostałe dwa są przechowywane przez bazę danych„ Test ”. Jednocześnie użytkownik „Postgres wykonuje te procesy.

Zidentyfikuj połączenia bezczynne:

„Stan” wydaje się być jedyną wartością, której szukamy w wynikach wyżej wymienionych wyników. Wykorzystamy te informacje, aby ustalić, które procesy lub zapytania są, w których stany, a następnie kopać głębiej. Możemy zanurzyć szczegóły, których szukamy, udostępniając zapytanie, umożliwiając nam przygotowanie interwencji tego konkretnego połączenia. Moglibyśmy to zrobić, wybierając tylko bezczynne pids za pomocą klauzuli Where i Stany dla tych pidów. Powinniśmy również śledzić, jak długo link był nieaktywny i upewnić się, że nie mamy żadnych zaniedbanych linków, które zmuszają nasze zasoby. W rezultacie będziemy używać poniższego polecenia, aby wyświetlać tylko rekordy istotne dla procesów, które są obecnie bezczynne:

>> Wybierz PID, UseName, UsesySID, DATID, DATName, Application_name, Backend_Start, State_Change, State z PG_STAT_ACTIVITY Where State = „Idle”;

Zapytanie uzyskało tylko 2 rekordy danych, w których stan był „bezczynny” za pomocą klauzuli Where. Rezultatem jest pokazanie 2 bezczynnych procesów z pewnymi informacjami na ich temat.

Zabij bezczynne połączenie:

Po identyfikacji bezczynnych połączeń, teraz czas na ich zabicie. Po upadku procesu w stanie wstrzymania lub nieaktywne przez znacznie dłużej, moglibyśmy użyć prostego polecenia, aby łatwo zakończyć mechanizm zaplecza bez zakłócania działań serwera. Musimy podać proces „id” w zapytaniu w funkcji zakończenia.

>> Wybierz PG_TERMINE_BACKEND (7408);

Proces został wspaniale zabity.

Teraz sprawdź pozostałe bezczynne połączenia z zapytania poniżej.

>> Wybierz DatID, nazwę usename, datName, PID, stan z PG_STAT_ACTIVITY Where State = „Idle”;

Wyjście pokazuje tylko 1 pozostały proces, który jest bezczynny.

Wniosek:

Upewnij się, że nie przegap żadnego kroku, aby efektywnie zabić nieaktywne połączenia z bazy danych PostgreSQL.