Vous n'êtes pas identifié(e).

#1 05/03/2018 11:15:43

krashtest31
Membre

Coupure électrique -> base redémarrée vide :-/

Bonjour à tous,

J'utilise une base PostgreSQL 9.4 comme Data Warehouse (grosses tables dénormalisées, plusieurs millions de lignes, peu de jointures)
Le serveur a 2 CPU Xeon à 2.5 Ghz et 16 Go de RAM. Il tourne sous Ubuntu 14
Le stockage est sur baie de SSD. La taille actuelle de la base est de +/- 100 Go

Après diverses lectures a droite à gauche sur le net, voici le paramétrage actuel de mon postgresql.conf

shared_buffers 3GB
work_mem 512MB
maintenance_work_mem 512MB
temp_buffers 256MB
Effective_cache_size 12GB
Wal_buffers 16MB
Check_point_segment 64
Checkpoint_timeout 30min
Checkpoint_completion_target 0.9
Checkpoint_warning 0
tcp_keepalives_idle 120
tcp_keepalives_interval 60
tcp_keepalives_count 10
synchronous_commit off
Default_statistics_target 400
Enable_seqscan off

Notes :
- les tables sont toutes créées en UNLOGGED
- il y a des indexs partout où cela est nécessaire
- La base est chargée toutes les nuits (7h de traitement), un gros VACUUM FULL + REINDEX + ANALYZE est lancé après l'alimentation.
- Il n'y a que du SELECT en journée


Je réalise des sauvegardes quotidiennes manuellement (via un batch de pg_dump) de certains schémas seulement.


Il y a quelques jours (pendant mes vacances tant qu'on y est), coupure électrique sur le serveur vers 10h le matin ! (pas d'insert/update en journée à ce moment là)

Je vois dans les logs que la base s'est relancée lorsque le serveur a redémarré :

2018-03-01 10:08:25 CET FATAL:  le système de bases de données se lance
2018-03-01 10:08:26 CET LOG:  le système de bases de données n'a pas été arrêté proprement ; restauration  automatique en cours
2018-03-01 10:08:28 CET LOG:  les protections contre la réutilisation d'un membre MultiXact sont maintenant activées
2018-03-01 10:08:28 CET LOG:  le système de bases de données est prêt pour accepter les connexions

Je constate que la base est vide ! Pourquoi ne garde-t-elle pas les données présentes au moment de la coupure ?
Que signifie la mention "restauration automatique en cours" ? (je ne lui ai rien demandé) ?

Cela a-t-il un lien avec la variable "restart_after_crash=on" du fichier conf ?


Merci de votre aide

Dernière modification par krashtest31 (05/03/2018 12:13:38)

Hors ligne

#2 05/03/2018 12:13:24

rjuju
Administrateur

Re : Coupure électrique -> base redémarrée vide :-/

Bonjour,

D'après la documentation https://docs.postgresql.fr/9.6/sql-createtable.html :

UNLOGGED

    Si spécifié, la table est créée en tant que table non tracée. Les données écrites dans ce type de table ne sont pas écrites dans les journaux de transactions (voir Chapitre 30, Fiabilité et journaux de transaction), ce qui les rend considérablement plus rapides que les tables ordinaires. Néanmoins, elles ne sont pas sûres en cas d'arrêt brutal : une table non tracée est automatiquement vidée après un arrêt brutal. Le contenu d'une table non tracée n'est pas répliqué vers les serveurs en attente. Tout index créé sur une table non tracée est aussi automatiquement non tracé.

La restauration automatique est nécessaire pour retrouver un état cohérent après un arrêt brutal, car sinon vous n'avez aucune garantie que les modifications soient toujours là.

Hors ligne

#3 05/03/2018 12:21:16

krashtest31
Membre

Re : Coupure électrique -> base redémarrée vide :-/

Merci pour l'explication, c'est clair et imparable

Je vais repasser en LOGGED les tables qui contiennent des archivages et qui ne sont pas rechargées par le J-1
Dommage pour les perfs

Hors ligne

Pied de page des forums