Vous n'êtes pas identifié(e).
Bonjour rjuju,
Merci d'avoir pris le temps pour répondre à ma question.
... Si vous avez lu tout le code source de postgres en rapport à ce fichier et tout compris,...
Tu pourras STP me donner le lien vers le code source de ce mécanisme?
Par avance merci
Bonjour,
J'utilise la version 14.5 de PostgreSQL avec RedHat8.5
Dans le fichier de configuration "postgresql.auto.conf" on trouve les mentions suivantes:
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
Il se trouve qu'il a les mêmes comportements que le fichier postgtresql.conf.
* on peut modifier, supprimer, ajouter manuellement n'importe quel paramètre de PostgreSQL avec un éditeur (tel que vi, vim...) après un reload ou restart, il prend en compte.
J'avais une (mauvaise) compréhension que les paramètres (dans postgresql.auto.conf), ne seront prises en compte que s'ils sont mises ou modifiés via les ordre SQL "ALTER...set/reset <param> ;
J'ai vu dans dans un article de Michael Paquier ce commentaire:
"So basically avoid to modify it manually as this is used for ALTER SYSTEM. When a parameter is modified, a temporary file called postgresql.auto.conf.temp is created to rollback to the original state in case of error."
Quel est l'empleur du mot "basically"? juste pour la forme!? ou il y a vraiment une contrainte technique?
Mes interrogations:
1- Est ce que le comportement était toujours comme ceci ou il a changé pour ce fichier de configuration "postgresql.auto.conf".
2- A quel moment le fichier "postgresql.auto.conf.temp" apparait, car je n'ai pas pu mettre la main dessus ( comment faire un test correctement pour le voir?).
3- Hormis l'aspect interactif du changement des paramètres journalisés dans ce fichier quel est le plus par rapport aux paramètres (include_dir, include et include_if_exists)?
4- la mise en garde au début du fichier (Do not édit....), c'est pourquoi à votre avis?
Merci pour vos réponses
B.LEMJID
Merci Guillaume pour cette proposition.
En revanche je suis toujours embêté pour les contraintes.
Merci encore
Bonjour,
Je remet le sujet de maintenance que j'ai demandé de l'aide et j'ai eu des réponse de "rjuju" et "gleu", je les remercie encore.
Après avoir ajuster les paramètres spécifiques de quelques relations (tables):
AUTOVACUUM_ANALYZE_SCALE_FACTOR
AUTOVACUUM_VACUUM_SCALE_FACTOR
AUTOVACUUM_FREEZE_MAX_AGE
Ordonnancer un traitement VACUUM/ANALYZE régulier ciblé.
=> J'ai bénéficié un résultat bien correcte, c'est le moins qu'on puisse le dire.
Je signale aussi que j'ai pu bénéficié des mise à jours HOT des lignes et ça fonctionne bien aussi. Donc l'augmentation de la taille des tables est correcte et le seuil du "bloat" aussi
Le seul bémol c'est qu'au niveau des indexes l'augmentation de la taille est conséquent.
Étant en version 11.9, ne pouvant pas bénéficier de l'option (concurrently '12+'), ne pouvant pas utiliser "pg_repack ou autres outils, je ne peux que faire un "REINDEX 'index xxxxx'"!
Le problème que je n'ai pas de fenêtre de maintenance (application 7/24).
En pensant faire un "pg_terminate_backend()" puis lancer un reindex derrière et refaire ceci pour chaque index, le risque est de perdre les transactions en cours.
Je peux aussi essayer de récupérer les transactions en allant les chercher avant le "pg_terminate_backend()" dans "pg_stat_activity.query" mais certaines requêtes ont des variables pour des valeurs non connues de type (INSERT into tablename col1 col2... values ($1,$2,$3...etc.) les UPDATE aussi).
Ma question:
* Y a t il une (des) idée(s) afin de passer entre les goutes:
- Passer le ré-index de qq tables (temps estimé <30 min.) en évitant en éventuel blocage.
- Une façon plus fiable pour récupérer les transactions avortées lors de la réindexation "pg_terminate_back_end".
Par avance merci
B. LEMJID
Bonjour,
Merci beaucoup Herve.
Bonjour Herve,
Merci pour ta réponse.
Au fait j'ai cité le problème de "tar" à titre d'exemple.
Par ailleurs, ça m'intéresse aussi le sujet du nombre d'inodes par rapport au type de FS pareil que pour le nombre de fichiers ouverts.
Si quelqu'un aura de la documentation dessus je serai ravi en vous remerciant par avance.
Bonjour,
Pour les bonnes pratiques, je suis à la recherche d'un document technique (ou lien URL).
Qui explique le phénomène de la limite de Linux en terme de gestion de nombreux fichiers. (nombre exorbitant)
Ceci pourra être important (à titre d'exemple) pour le choix et la gestion des fichiers Wal/Archive (PostgreSQL) avant d'être confronté à un problème
système (d'origine) qui peut impacter la base de données.
Par exemple des problèmes ont été détectés en utilisant des outils comme "tar" qui accuse le coup devant un nombre important de fichiers.
Par avance merci
Bonjour,
Merci pour la réponse.
En effet j'ai testé cela et voici ce que ça donne comme format de log:
#alter system set log_line_prefix TO '[%l-1]%t;%p;%u;%d;%e;';
#seletct pg_reload_conf();
[740-1] [801-1]2021-11-09 17:21:43 CET;31687;alisa;alisa_db;00000;LOG: duration: 0.162 ms parse <unnamed>: update ACT_RU_VARIABLE
==> ça me rajoute une autre colonne [xxx-xx].
En revanche si je modifie les paramètres :
alter system set syslog_split_messages TO 'off';
alter system set syslog_sequence_numbers TO 'off';
select pg_reload_conf();
Voici ce que ça donne:
2021-11-09 16:49:13 CET;17946;;;00000;LOG: automatic analyze of table "alisa_db.alisa.act_ru_variable" system usage: CPU 0.00s/0.06u sec elapsed 0.09 sec
Donc je retrouve le format (habituelle) du log PostgreSQL mais je ne sais pas encore pour le rapport PgBadger. (pas fait le test encore).
Est ce que c'est une bonne piste?
Bien cordialement
Re,
Au fait je ne comprend pas pourquoi la colonne [xxx-1] est dans les logs alors que dans mon log_line_prefix, il n'y a pas '%l', j'aimerai bien savoir d'où ça peut venir?!
[89-1] 2021-11-05 16:01:37 CET;31237;postgres;alisa_db;00000;LOG: duration: 19583.248 ms statement: select count(*) from f_parameter;
Bonjour rjuju,
J'ai bien rajouté '%l' au paramètre log_lin_prefix comme ceci '%l;%t;%p;%u;%d;%e;'. j'ai fais les tests après, ça ne change pas même pire la colonne au début '[1-xxx]' existe toujours. Je pense que c'est cette colonne qui plombe la lecture des logs par pgbadger.
Par avance merci
Bonjour rjuju,
Merci pour ta réponse.
Voici la valeur du "log_line_prefix" ('%t;%p;%u;%d;%e;')
voici la commande lancé:
pgbadger -f syslog -p '%t;%p;%u;%d;%e;' -o /tmp/`uname -n`-$PG_SERVERNAME-`date +%Y%m%d-%H%M%S`-PgBadger.out.html /pgqdata/$PG_SERVERNAME/data/pg_log/pgxxxx.log
Par avance merci
Bonjour,
Je me permet de relancer le sujet car j'ai presque le même problème: (le rapport est vide).
Particularité:
log_destination='syslog'
J'ai essayé pas mal de combines dans 'log_line_prefix', ça n'a pas fonctionné. Mon problème c'est que dans le log j'ai un champ que pgbadger n'arrive pas à l'interpréter
Exemple:
[10-1] 2021-11-05 16:01:07 CET;2045;;;00000;LOG: automatic analyze of table "alisa_db.alisa.act_ru_job" system usage: CPU 0.00s/0.00u sec elapsed 0.00 sec
[11-1] 2021-11-05 16:01:07 CET;2045;;;00000;LOG: automatic vacuum of table "alisa_db.alisa.act_ge_property": index scans: 0
[12-1] 2021-11-05 16:01:07 CET;2045;;;00000;LOG: automatic analyze of table "alisa_db.alisa.act_ge_property" system usage: CPU 0.00s/0.00u sec elapsed 0.00 sec
[13-1] 2021-11-05 16:01:08 CET;2045;;;00000;LOG: automatic vacuum of table "alisa_db.alisa.act_ru_variable": index scans: 1
[14-1] 2021-11-05 16:01:08 CET;2045;;;00000;LOG: automatic analyze of table "alisa_db.alisa.act_ru_variable" system usage: CPU 0.00s/0.07u sec elapsed 0.16 sec
[15-1] 2021-11-05 16:01:08 CET;2045;;;00000;LOG: automatic vacuum of table "alisa_db.alisa.qrtz_fired_triggers": index scans: 1
[16-1] 2021-11-05 16:01:08 CET;2045;;;00000;LOG: automatic analyze of table "alisa_db.alisa.qrtz_fired_triggers" system usage: CPU 0.00s/0.00u sec elapsed 0.02 sec
[17-1] 2021-11-05 16:01:08 CET;2045;;;00000;LOG: automatic vacuum of table "alisa_db.alisa.qrtz_triggers": index scans: 1
[18-1] 2021-11-05 16:01:08 CET;2045;;;00000;LOG: automatic analyze of table "alisa_db.alisa.qrtz_triggers" system usage: CPU 0.00s/0.00u sec elapsed 0.02 sec
[89-1] 2021-11-05 16:01:37 CET;31237;postgres;alisa_db;00000;LOG: duration: 19583.248 ms statement: select count(*) from f_parameter;
==> J'ai l'impression que le champ entre crochets au début de chaque ligne plante le traitement pgbadger et sort le rapport à 0 pourtant dans les logs pas mal de requ^tes de tout type (SELECT, INSERT, UPDATE...etc.
Quelqu'un à une idée.
Par avance merci.
..3) faire en sorte que la fragmentation reste sous controle ...
Pour ce qui est recherche et listing des tables fragmentées, c'est clair. Pour le pourquoi et fréquence c'est souvent des mises à jours intensives (batchs) sur les tables de la base (certaines tables plus que d'autres).
Reste le point "3", contrôler la fragmentation reste un peu vague. Comme on maitrise pas le code applicatif (les données fonctionnelles), on peut que constater après coup le fragmentation. On peut aussi connaitre la fréquence voir savoir en avance de phase qu'il y aura un batch qui va insérer X lignes sur tel ou tel tables chose qu'on ne peut pas éviter et encore moins l'interdir.
Donc à quel niveau on peu contrôler? S'il s'agit juste d'avoir les informations que j'ai cité. Permettez moi cette question terre à terre, ça me servira à quoi ce contrôle comme je l'ai cité?
Par avance merci
Bonjour,
....personnellement je n'ai pas confiance dans cette extension et si j'étais confronté à un problème de bloat excessif je chercherais plutôt un moyen d'éviter l'apparation de bloat trop important plutôt que risquer une corruption ou perte de données.
Au fait là on est au cœur du sujet:
Entre pg_repack qui utilse des triggers et demande d'ajouter de l'espace disque pour "défragmenter" les tables avec une complexité si la tâche s'arrête ou ne fini pas pour une raison ou pour une autre...etc
pg_squeeze qui un nouveau produit (extension) avec peu de documentation...
Comment faire mieux tout en évitant ces risques et préservant les données et leurs sécurité?
Le sujet est riche peut être mais tu pourras STP donner les grandes lignes. Le but c'est d'éviter un éventuel "lock exclusif" avec le "vacuum full" et réorganisation des tables et recupération de l'espace vide pour une meilleure optimisation.
Par avance merci
Merci Julien pour ta réponse,
Par ailleurs je te conseil si tu as la possibilité de le tester ça l'air intéressant.
Merci encore
Bonjour tout le monde,
Par manque de documentation je voudrai savoir si quelqu'un à un retour d'expérience avec pg_squeeze?
Le problème c'est que je ne peux pas scheduler une tâche sur une table.
Il est expliqué dans la documentation (https://github.com/cybertec-postgresql/pg_squeeze), qu'il faut renseigner la table (squeeze.tables) surtout la colonne (schedule) qui contient la paramètre de la date(jour de la semaine)/heure
du déclenchement.
Pour ma part j'ai renseigner cette table mais rien ne se passe.
Je surveille le log PostgreSQL (log_min_duration_statement='0'), je n'ai rien vu et la taille de la table bloatée est toujours le même?!
en revanche quand j’exécute la fonction "SELECT squeeze.squeeze_table('squeeze', 't_test', null, null, null);" ça fonctionne et la taille de la table diminue.
les paramètres :
squeeze.worker_autostart = 'ma_base'
squeeze.worker_role = 'postgres'
sont bien renseignés
J'ai aussi modifié ces paramètres "free_space_extra,min_size et vacuum_max_age" dans (tables) en diminuant leurs valeurs toujours rien ne se d’éclanche; en tout cas la table est toujours bloatée et je ne voit d'erreur
Est ce que j'ai oublié une/des étapes
Par avance Merci
Merci beacoups à vous pour ces informations précieuses.
Merci Julien
* Pour la compatibilité logicielle, j'ai compris en revanche pour éviter une éventuelle confusion, qu'est ce que tu entends dire par "compatibilité matérielle" (entre anciens et nouveaux serveurs?)
* il faut bien la même version glibc et librairies sur l'ensemble des serveurs? (ancien et nouveaux)?
Par avance merci
Merci Julien pour ta réponse et ta disponibilité.
L'idée est de faire une migration Matériel en douceur.
* Les deux serveurs actuels en streaming réplication doivent être remplacés.
* On compte brancher un NOUVEAU troisième puis un quatrième "Standby".
* Débrancher les anciens UN par UN après un FailOver sur un des des nouveaux.
==> Une idée pour limiter le temps d'indisponibilité applicatif.
Je vais poser la question autrement. Faut il prendre des mesures particulières (pendant cette période; deux trois jours) permettant de réussir au maximum cette opération.
S'il y a un retour d'expérience je suis preneur (par avance merci) et surtout si l'opération est trop risquée c.à.d. une chance sur deux de tout casser me le dire. La base est volumineuse puis une restauration en PITR pourra prendre 5h application arrêtée.
En attente de vous lire, merci
Bonjour,
J'aimerai bien rebondir sur ce sujet pour demander est ce qu'il y a un retour d'expérience pour une réplication PostgreSQL en streaming entre deux serveurs en RedHat l'un en version 7.1 et Noyau 3.10.0-514 et l'autre en 7.4 et Noyau 3.10.0-693.
Par avance merci
Bonjour,
Si quelqu'un a une idée, merci de bien vouloir m’aiguiller.
Bonjour,
Depuis qu'on a commencer les mises à jour PostgreSQL de 9.X vers 11.X (11.5, 11.7 et 11.9), on a constaté un message d'erreur à répétions:
"FATAL: unsupported frontend protocol 1234.5680: server supports 2.0 to 3.0"
Ce que je peux voir, c'est que ce message vient des serveurs apache.
J'ai vu sur le net qu'il concerne la connexion avec encryption "GSSAPI" et qu'il suffit de mettre:
GSSENCMODE=disable dans les variables d'environnement PostgreSQL sinon dans la chaine de connexion à la base.
J'ai vu même que c'est faisable lors de la compilation des binaires PostgreSQL. Pour nous c'est les RPMs qu'on utilise pour l'installation de PostgreSQL.
Pour moi cette recommandation n'a pas marché! Soit je n'ai pas bien fait les choses ou j'ai manqué une étape!
Est ce que quelqu'un a une idée SVP.
Par avance merci.
Donc au final si on a besoin de regagner de l'espace disque occupé par des lignes "vides" dans les tables, il faut faire un VACUUM FULL.
1- De ce fait, même avec un paramétrage bien fait de l'autovacuum, on est obligé de faire le VACUUM FULL; même avec espacement important 1 fois par mois, trimestre...?
et si l'autovacuum ralenti la vitesse du "bloat" s'il est bien paramétré?
2- Si on se concentre sur la question de l'autovacuum et le faire d'une façon optimale est ce qu'on aura le résultat attendu au niveau performance? (bien évidemment associé avec le tuning ressources matériel, moteur BDD, code SQL...etc.)
Merci Guillaume merci Julien d'avoir pris le temps pour me répondre.
Par ailleurs, dans le cas d'une base volumineuse ou une autre qui devra être disponible 7/24, Comment peut-on pallier aux problème de fragmentation et l'organisation des lignes mortes des tables.
Comment prévoyez vous la récupération la récupération de l'espace disque?
@Julien, est ce que je comprend qu'une bonne configuration d'autuvacuum est capable de nous épargner tout ça?
Par avance meci.
Bonjour,
Si quelqu'un pourra me dire quelque chose à ce sujet.
Par avance merci