From 0706c4111965827b22453fa51e9a6de965586235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Elliott=20B=C3=A9cue?= Date: Wed, 10 Dec 2014 18:12:59 +0100 Subject: [PATCH] [maintenance base upload] COPY et VACUUM peuvent entrer en conflit. --- surveillance/maintenance/check_activity.py | 31 +++++++++++++++++++ .../delete.sql} | 5 +-- surveillance/maintenance/upload_maint.sh | 5 +++ surveillance/maintenance/vacuum.sql | 2 ++ 4 files changed, 39 insertions(+), 4 deletions(-) create mode 100755 surveillance/maintenance/check_activity.py rename surveillance/{maintenance.sql => maintenance/delete.sql} (66%) create mode 100755 surveillance/maintenance/upload_maint.sh create mode 100644 surveillance/maintenance/vacuum.sql diff --git a/surveillance/maintenance/check_activity.py b/surveillance/maintenance/check_activity.py new file mode 100755 index 00000000..1ef44824 --- /dev/null +++ b/surveillance/maintenance/check_activity.py @@ -0,0 +1,31 @@ +#!/bin/bash /usr/scripts/python.sh +# -*- encoding: utf-8 -*- + +import psycopg2 +import psycopg2.extras +import time + +PG_STAT_REQ = "SELECT * FROM pg_stat_activity;" + +def pg_stat_ended(curseur): + """Fetch stat_activity from postgresql and check if + all transactions active on first fetch is done before + returning True. + + """ + curseur.execute(PG_STAT_REQ) + data = curseur.fetchall() + seuil = max([donnee['xact_start'] for donnee in data]) + while True and seuil: + curseur.execute(PG_STAT_REQ) + data = curseur.fetchall() + front = min([donnee['xact_start'] for donnee in data]) + if front > seuil: + break + time.sleep(30) + +if __name__ == "__main__": + conn = psycopg2.connect(database='filtrage') + conn.set_session(autocommit=True) + curseur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) + pg_stat_ended(curseur) diff --git a/surveillance/maintenance.sql b/surveillance/maintenance/delete.sql similarity index 66% rename from surveillance/maintenance.sql rename to surveillance/maintenance/delete.sql index 20057388..379a9e2a 100644 --- a/surveillance/maintenance.sql +++ b/surveillance/maintenance/delete.sql @@ -1,9 +1,6 @@ ----------------------------------------------------------------- --- Maintenance de la base pgsql filtrade sur odlyd, lancé par cron +-- Maintenance de la base pgsql filtrage sur odlyd, lancé par cron ----------------------------------------------------------------- -- effacement des vieux enregistrements DELETE FROM upload where stamp_inserted < timestamp 'now' - interval '5 days'; - --- suppression complète des entrées -VACUUM (VERBOSE, ANALYZE); diff --git a/surveillance/maintenance/upload_maint.sh b/surveillance/maintenance/upload_maint.sh new file mode 100755 index 00000000..b1a033af --- /dev/null +++ b/surveillance/maintenance/upload_maint.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +psql -d filtrage -f /usr/scripts/surveillance/maintenance/delete.sql; +/usr/scripts/surveillance/maintenance/check_activity.py; +psql -d filtrage -f /usr/scripts/surveillance/maintenance/vacuum.sql 2>&1 > /dev/null diff --git a/surveillance/maintenance/vacuum.sql b/surveillance/maintenance/vacuum.sql new file mode 100644 index 00000000..f847f42f --- /dev/null +++ b/surveillance/maintenance/vacuum.sql @@ -0,0 +1,2 @@ +-- suppression complète des entrées +VACUUM (VERBOSE, ANALYZE);