czwartek, 18 kwietnia 2024

Ustawienie CRON na bazie PostgreSQL

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.