98 lines
4.1 KiB
Bash
Executable File
98 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# ============================================================================
|
|
# Application du tuning postgresql.conf -- Stack ADS-B Linux-25
|
|
# Hardware : i7-7567U, 4 threads logiques, 16 Go RAM, SSD Samsung
|
|
# Conteneur : wordpress-postgres (postgis/postgis:16-3.5)
|
|
# Fichier de config : volume pg-conf-std, monté /etc/postgresql
|
|
# ============================================================================
|
|
set -euo pipefail
|
|
|
|
CONTAINER="wordpress-postgres"
|
|
CONF_PATH_IN_CONTAINER="/etc/postgresql/postgresql.conf"
|
|
BACKUP_DIR="/backup/postgres_tuning_$(date +%Y%m%d_%H%M%S)"
|
|
|
|
echo "==> 1. Sauvegarde du postgresql.conf actuel"
|
|
mkdir -p "$BACKUP_DIR"
|
|
docker cp "${CONTAINER}:${CONF_PATH_IN_CONTAINER}" "$BACKUP_DIR/postgresql.conf.bak"
|
|
echo " Sauvegardé : $BACKUP_DIR/postgresql.conf.bak"
|
|
|
|
echo "==> 2. Application des nouveaux paramètres"
|
|
# On utilise sed dans le conteneur pour modifier les lignes existantes,
|
|
# et on ajoute les nouvelles directives en fin de fichier (section CUSTOMIZED
|
|
# OPTIONS déjà présente, cohérent avec les ajouts précédents JCA 2026-06-29)
|
|
|
|
docker exec "$CONTAINER" bash -c "cat >> ${CONF_PATH_IN_CONTAINER} << 'EOF'
|
|
|
|
# ── Tuning mémoire/IO/planner (Claude, $(date +%Y-%m-%d)) ──
|
|
# Hardware : i7-7567U 4 threads logiques, 16 Go RAM, SSD Samsung
|
|
# Remplace les valeurs précédentes (shared_buffers=512MB, work_mem=256MB)
|
|
# par des valeurs adaptées à la RAM disponible et au risque d'OOM.
|
|
shared_buffers = 3200MB
|
|
effective_cache_size = 9GB
|
|
work_mem = 32MB
|
|
maintenance_work_mem = 512MB
|
|
max_wal_size = 4GB
|
|
min_wal_size = 1GB
|
|
checkpoint_completion_target = 0.9
|
|
random_page_cost = 1.1
|
|
effective_io_concurrency = 150
|
|
max_parallel_workers_per_gather = 2
|
|
autovacuum_analyze_scale_factor = 0.05
|
|
autovacuum_vacuum_cost_delay = 2ms
|
|
EOF"
|
|
|
|
echo "==> 3. Vérification de la syntaxe (parse à blanc)"
|
|
# postgres --check-config n'existe pas nativement ; on vérifie via un restart
|
|
# contrôlé avec rollback possible si échec.
|
|
|
|
echo "==> 4. Redémarrage du conteneur (shared_buffers nécessite un restart complet)"
|
|
cd /root/wordpress
|
|
docker compose restart postgres
|
|
|
|
echo "==> 5. Attente du démarrage"
|
|
for i in $(seq 1 30); do
|
|
if docker exec "$CONTAINER" pg_isready -U pgz_admin -d wpz_postgres > /dev/null 2>&1; then
|
|
echo " PostgreSQL prêt après ${i}s"
|
|
break
|
|
fi
|
|
if [ "$i" -eq 30 ]; then
|
|
echo " ÉCHEC : PostgreSQL ne démarre pas avec la nouvelle config."
|
|
echo " Rollback automatique..."
|
|
docker cp "$BACKUP_DIR/postgresql.conf.bak" "${CONTAINER}:${CONF_PATH_IN_CONTAINER}"
|
|
docker compose restart postgres
|
|
echo " Rollback effectué. Vérifier les logs : docker logs ${CONTAINER} --tail 50"
|
|
exit 1
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
echo "==> 6. Vérification des paramètres effectivement appliqués"
|
|
docker exec "$CONTAINER" psql -U pgz_admin -d wpz_postgres -c "
|
|
SELECT name, setting, unit
|
|
FROM pg_settings
|
|
WHERE name IN (
|
|
'shared_buffers', 'effective_cache_size', 'work_mem', 'maintenance_work_mem',
|
|
'max_wal_size', 'min_wal_size', 'random_page_cost', 'effective_io_concurrency',
|
|
'max_parallel_workers_per_gather'
|
|
)
|
|
ORDER BY name;
|
|
"
|
|
|
|
echo "==> 7. Vérification que les données et services sont intacts"
|
|
docker exec "$CONTAINER" psql -U pgz_admin -d wpz_postgres -c \
|
|
"SELECT count(*) AS partitions FROM pg_inherits WHERE inhparent = 'adsb.positions'::regclass;"
|
|
|
|
echo ""
|
|
echo "Si adsb2pg/webapp tournaient déjà, ils n'ont pas besoin d'être redémarrés"
|
|
echo "(ils se reconnectent automatiquement à PostgreSQL). Vérification :"
|
|
docker exec "$CONTAINER" psql -U pgz_admin -d wpz_postgres -c \
|
|
"SELECT max(ts) AS derniere_insertion FROM adsb.positions WHERE ts >= NOW() - INTERVAL '5 minutes';"
|
|
|
|
echo ""
|
|
echo "============================================================"
|
|
echo "Sauvegarde de l'ancienne config : $BACKUP_DIR/postgresql.conf.bak"
|
|
echo "Rollback manuel si besoin plus tard :"
|
|
echo " docker cp $BACKUP_DIR/postgresql.conf.bak ${CONTAINER}:${CONF_PATH_IN_CONTAINER}"
|
|
echo " cd /root/wordpress && docker compose restart postgres"
|
|
echo "============================================================"
|