Sprawdzamy stan (bezczynne sesje) zapytaniem SQL
select * FROM pg_stat_activity
WHERE state = 'idle'
Proces zwalniania bezczynnych sesji PostgreSQL
Aby zaplanować wykonywanie zapytania cyklicznie w
PostgreSQL, należy użyć narzędzia takiego jak pg_cron, które pozwala na
harmonogramowanie zadań w bazie danych PostgreSQL. Poniżej znajdują się kroki,
jak to zrobić:
1.
Zainstalowanie pg_cron:.
Wykonać trzeba zapytanie sql
CREATE EXTENSION pg_cron;
2. Utworzyć funkcję, która kończy bezczynne sesje:
sql
CREATE OR REPLACE
FUNCTION terminate_idle_sessions() RETURNS void AS $$
BEGIN
PERFORM pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE state = 'idle'
AND pid <> pg_backend_pid();
END;
$$ LANGUAGE plpgsql;
3.
Zaplanowanie zadanie przy użyciu polecenia pg_cron do ustawienia
harmonogramu, np. co godzinę.
sql
SELECT
cron.schedule('terminate_idle_sessions',
'0 * * * *', -- Harmonogram w formacie crontab (co
godzinę)
'SELECT terminate_idle_sessions();');
4.
Sprawdzenie i monitorowanie zadania korzystając z tabeli cron.job.
sql
SELECT * FROM cron.job;
To wszystko! Teraz funkcja terminate_idle_sessions będzie wykonywana co godzinę, kończąc bezczynne sesje.
Aby zaplanować zadanie w PostgreSQL przy użyciu pg_cron,
które będzie uruchamiane co 7 dni, trzeba wykonać :
1.
Tworzenie funkcji :
wykonać trzeba zapytanie sql
CREATE OR REPLACE
FUNCTION terminate_idle_sessions() RETURNS void AS $$
BEGIN
PERFORM pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE state = 'idle'
AND pid <> pg_backend_pid();
END;
$$ LANGUAGE plpgsql;
2.
Ustawienie harmonogramu co 7 dni:
sql
SELECT
cron.schedule('terminate_idle_sessions_every_7_days',
'0 0 * * 0', -- Harmonogram w formacie crontab (co 7 dni,
w niedzielę o północy)
'SELECT terminate_idle_sessions();');
Format '0 0 * * 0' oznacza:
·
0 minuta (pierwsza
minuta godziny)
·
0 godzina (północ)
·
* dowolny dzień
miesiąca
·
* dowolny miesiąc
·
0 niedziela (dzień
tygodnia)
Takie ustawienie spowoduje, że funkcja terminate_idle_sessions będzie uruchamiana co 7 dni w
niedzielę o północy.