J'ai le problème suivant: une distribution Linux "verticale" (Sophos UMT) est livrée avec PostgreSQL 9.2 pour stocker sa configuration. Malheureusement, depuis la dernière mise à jour, il semble que les journaux de transactions (WAL) de certaines instances augmentent sans jamais être vidés. Cela entraîne une augmentation du dossier pg_xlog de plusieurs ordres de grandeur par rapport au dossier de base.
Je suis maintenant dans une situation délicate: en raison de la croissance excessive des fichiers WAL, le disque d'une de ces machines (une VM) sera plein avant lundi. J'ai déjà ouvert un dossier de support avec le fournisseur mais, jusqu'à présent, ils ne sont pas très utiles (ils suggèrent de reconstruire la machine virtuelle avec des disques plus gros).
Cette base de données n'est jamais sauvegardée car le logiciel effectue des sauvegardes d'une manière différente (il a sa propre procédure de sauvegarde et envoie des fichiers de sauvegarde par e-mail) et je suppose que c'est la raison pour laquelle les WAF se développent autant.
Je crains d'être loin d'être un expert PostgreSQL, il est donc très probable que je pose une question idiote ou évidente, mais quelle est la procédure pour demander le vidage des fichiers WAL?
Idéalement, je suis à la recherche d'une procédure qui me permettra de vider ces fichiers WAL sur le système problématique afin de m'acheter suffisamment de temps pour que le fournisseur émette une meilleure solution.
Edit : Comme demandé, voici le résultat de la SELECT version();
requête:
PostgreSQL 9.2.4 on i686-pc-linux-gnu, compiled by gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 32-bit
(1 rangée)
Et la SELECT name, current_setting(name), source
FROM pg_settings
WHERE source NOT IN ('default', 'override');
requête
hot_standby | on | configuration file
listen_addresses | * | configuration file
log_destination | syslog | configuration file
log_min_duration_statement | -1 | configuration file
log_min_error_statement | error | configuration file
log_min_messages | notice | configuration file
maintenance_work_mem | 512MB | configuration file
max_connections | 300 | configuration file
max_files_per_process | 1000 | configuration file
max_prepared_transactions | 0 | configuration file
max_stack_depth | 2MB | configuration file
max_standby_streaming_delay | 10s | configuration file
max_wal_senders | 10 | configuration file
password_encryption | on | configuration file
pg_stat_statements.max | 1000 | configuration file
pg_stat_statements.save | on | configuration file
pg_stat_statements.track | all | configuration file
pg_stat_statements.track_utility | off | configuration file
port | 5432 | configuration file
random_page_cost | 2 | configuration file
replication_timeout | 1min | configuration file
seq_page_cost | 1 | configuration file
shared_buffers | 512MB | configuration file
shared_preload_libraries | pg_stat_statements | configuration file
ssl | off | configuration file
stats_temp_directory | pg_stat_tmp | configuration file
superuser_reserved_connections | 20 | configuration file
synchronous_commit | local | configuration file
syslog_facility | local0 | configuration file
syslog_ident | postgres | configuration file
temp_buffers | 256MB | configuration file
temp_file_limit | -1 | configuration file
TimeZone | GMT | configuration file
timezone_abbreviations | AlmostAll | configuration file
track_activities | on | configuration file
track_activity_query_size | 4096 | configuration file
track_counts | on | configuration file
track_functions | none | configuration file
track_io_timing | on | configuration file
unix_socket_directory | /var/run/postgresql | configuration file
unix_socket_group | postgres | configuration file
unix_socket_permissions | 0777 | configuration file
update_process_title | on | configuration file
vacuum_defer_cleanup_age | 0 | configuration file
wal_buffers | 16MB | configuration file
wal_keep_segments | 100 | configuration file
wal_level | hot_standby | configuration file
wal_receiver_status_interval | 5s | configuration file
work_mem | 512MB | configuration file
(69 rows)
Modifier2
Nous avons finalement réinstallé l'ensemble du serveur (comme demandé par le support Sophos) mais en utilisant la version précédente et un disque plus grand. Apparemment, l'ancienne version utilise beaucoup moins d'espace pour le WAL que la nouvelle.
Par curiosité, j'ai exécuté la vérification de la version et des paramètres pgsql 7 par défaut et j'ai obtenu des résultats assez différents:
PostgreSQL 8.4.14 on i686-pc-linux-gnu, compiled by GCC gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 32-bit
et
name | current_setting | source
---------------------------------+-----------------+----------------------
autovacuum_analyze_scale_factor | 0.0005 | configuration file
checkpoint_segments | 12 | configuration file
checkpoint_warning | 0 | configuration file
escape_string_warning | off | configuration file
fsync | on | configuration file
listen_addresses | * | configuration file
log_destination | syslog | configuration file
log_timezone | Europe/Zurich | command line
maintenance_work_mem | 1GB | configuration file
max_connections | 300 | configuration file
max_stack_depth | 2MB | environment variable
port | 5432 | configuration file
shared_buffers | 32MB | configuration file
standard_conforming_strings | off | configuration file
syslog_facility | local0 | configuration file
syslog_ident | postgres | configuration file
temp_buffers | 1024 | configuration file
TimeZone | UTC | configuration file
timezone_abbreviations | AlmostAll | configuration file
work_mem | 512MB | configuration file
(20 rows)
Il me semble qu'il y a eu pas mal de changements entre ces deux versions.
la source
wal_keep_segments
est défini sur100
, ce qui signifie que vous devez conserver jusqu'à 1,6 Go d'archives WAL pour une réplique en streaming une fois que le serveur maître n'en a plus besoin. Si vous n'utilisez pas la réplication en streaming (en tant que serveur maître), vous pouvez définir la valeurwal_keep_segments
zéro et regagner cet espace. Votrecheckpoint_segments
semble être la valeur par défaut, donc vous ne devriez pas avoir plus de 3 * 16 = 48 Mo de WAL si ce n'était pour vouswal_keep_segments
. C'est aussi bizarre que vous ayezhot_standby
allumé - est-ce une réplique?wal_keep_segments
vers0
PostgreSQL et le redémarrerais personnellement. Je n'ai pas vérifié qu'il supprimera le WAL indésirable, mais je m'attends à ce qu'il le fasse. Je ne recommande pas de le supprimer manuellement; la suppression des mauvais fichiers d'archive WAL arrêtera complètement votre base de données de fonctionner.