PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 15/12/2023 12:32:46

AnkyFive
Membre

Modification de log_min_duration_statement ne fonctionne pas

Bonjour,

Sur une base de données de prod nous avions des problèmes de perf et avons activé la journalisation des requêtes pour chercher des requetes lentes.

Nous n'arrinvons plus à désactiver cette fonctionnalité, l'idée serait maintenant de ne logguer que les requetes dont les temps d'exec dépassent 1 seconde

Dans postgresql.conf nous avons mis :

log_statement = 'none'
log_min_duration_statement = 1000

Or toutes les requetes sont logguées.

Merci d'avance pour votre aide...

Hors ligne

#2 15/12/2023 12:34:59

rjuju
Administrateur

Re : Modification de log_min_duration_statement ne fonctionne pas

Bonjour,


Avez-vous rechargé la configuraiton après avoir modifié le postgresql.conf?  Si oui, que renvoie la requête

SELECT * FROM pg_settings WHERE name = 'log_min_duration_statement';

Hors ligne

#3 26/12/2023 09:25:09

AnkyFive
Membre

Re : Modification de log_min_duration_statement ne fonctionne pas

Bonjour,

Désolé pour lé raponse tardive j'étais en vacances big_smile

Voici le résultat de la requete :

            name            | setting | unit |              category               |                                 short_desc                                 |                     extra_desc                      |  context  | vartype |       source       | min_val |  max_val   | enumvals | boot_val | reset_val |            sourcefile             | sourceline | pending_restart
----------------------------+---------+------+-------------------------------------+----------------------------------------------------------------------------+-----------------------------------------------------+-----------+---------+--------------------+---------+------------+----------+----------+-----------+-----------------------------------+------------+-----------------
log_min_duration_statement | 1000    | ms   | Reporting and Logging / When to Log | Sets the minimum execution time above which all statements will be logged. | Zero prints all queries. -1 turns this feature off. | superuser | integer | configuration file | -1      | 2147483647 |          | -1       | 1000      | /data/biohub/postgresql.auto.conf |          6 | f


Oui j'ai bien rechargé la config et aussi redémarré la base....

Dernière modification par AnkyFive (26/12/2023 09:25:31)

Hors ligne

#4 26/12/2023 10:07:52

rjuju
Administrateur

Re : Modification de log_min_duration_statement ne fonctionne pas

La configuration actuelle provient du fichier postgresql.auto.conf, c'est-à-dire une configuration effectuée via ALTER SYSTEM.  À noter que toute modification effectuée par ALTER SYSTEM est plus prioritaire qu'une simple modification dans le fichier postgresql.conf, il vous faut donc toujours effectuer des configuration via ALTER SYSTEM (ou jamais), mais ne pas mixer les deux.  Cela dit, la configuration montre bien que la valeur de log_mi_duration_statements est à 1000 ms, soit 1 seconde.  Peut être avez-vous également fait un ALTER SYSTEM pour logger toutes les requêtes (type log_statements = all) et avez essayé de remettre log_statements = none dans le postgresql.conf?



Si ce n'est pas le cas, avez-vous un exemple de ligne qui ne devrait pas se trouver dans les logs?  Pouvez-vous également montrer le résultat de la commande "\drds" sur psql ?

Hors ligne

#5 26/12/2023 14:15:55

AnkyFive
Membre

Re : Modification de log_min_duration_statement ne fonctionne pas

Il est possible qu'on ait melangé alter system et modification du fichier de conf.
log_statement est à none car :

     name      | setting | unit |              category               |             short_desc              | extra_desc |  context  | vartype |       source       | min_val | max_val |      enumvals      | boot_val | reset_val |               sourcefile                | sourceline | pending_restart
---------------+---------+------+-------------------------------------+-------------------------------------+------------+-----------+---------+--------------------+---------+---------+--------------------+----------+-----------+-----------------------------------------+------------+-----------------
log_statement | none    |      | Reporting and Logging / What to Log | Sets the type of statements logged. |            | superuser | enum    | configuration file |         |         | {none,ddl,mod,all} | none     | none      | /etc/postgresql/13/main/postgresql.conf |        562 | f


Et dans postgres.conf il est à none.

Voici un exemple de lignes de log que l'on obtient (il y en a beaucoup) :

2023-12-26 11:59:04.273 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 1.824 ms
2023-12-26 11:59:04.273 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.018 ms
2023-12-26 11:59:04.275 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 1.832 ms
2023-12-26 11:59:04.275 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.388 ms
2023-12-26 11:59:04.277 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.023 ms
2023-12-26 11:59:04.277 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.039 ms
2023-12-26 11:59:21.558 UTC [2274782] prtg@xxxxxxxx LOG:  duration: 9.205 ms
2023-12-26 11:59:21.631 UTC [2274782] prtg@xxxxxxxx LOG:  duration: 0.233 ms
2023-12-26 11:59:21.631 UTC [2274782] prtg@xxxxxxxx LOG:  duration: 0.047 ms
2023-12-26 11:59:21.631 UTC [2274782] prtg@xxxxxxxx LOG:  duration: 0.009 ms
2023-12-26 11:59:41.397 UTC [2274845] prtg@xxxxxxxx LOG:  duration: 7.892 ms
2023-12-26 11:59:41.466 UTC [2274845] prtg@xxxxxxxx LOG:  duration: 0.182 ms
2023-12-26 11:59:41.466 UTC [2274845] prtg@xxxxxxxx LOG:  duration: 0.064 ms
2023-12-26 11:59:41.466 UTC [2274845] prtg@xxxxxxxx LOG:  duration: 0.010 ms
2023-12-26 11:59:46.080 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.017 ms
2023-12-26 11:59:46.080 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.006 ms
2023-12-26 11:59:46.080 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.047 ms
2023-12-26 11:59:46.080 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.029 ms
2023-12-26 11:59:46.080 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.007 ms
2023-12-26 11:59:46.080 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.008 ms
2023-12-26 11:59:46.080 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.016 ms
2023-12-26 11:59:46.080 UTC [2269780] xxxxxxxx@xxxxxxxx LOG:  duration: 0.006 ms

Hors ligne

#6 26/12/2023 14:18:17

rjuju
Administrateur

Re : Modification de log_min_duration_statement ne fonctionne pas

Si seule la durée est affichée, sans le texte de la requête, alors c'est que vous avez activé log_duration.

Hors ligne

#7 26/12/2023 14:41:50

AnkyFive
Membre

Re : Modification de log_min_duration_statement ne fonctionne pas

Effectivement ça marche !
Merci beaucoup smile

Hors ligne

#8 26/12/2023 15:07:48

AnkyFive
Membre

Re : Modification de log_min_duration_statement ne fonctionne pas

En fait, je n'ai plus de log du tout, mais ce que je voulais faire c'est juste de logger les requetes qui dépassent 1 seconde.

Donc avec ça :
log_min_duration_statement = 1000
log_duration = off

Ca ne correspond pas vraiment à ce que je veux faire, j'ai juste tout désactivé non ?

Hors ligne

#9 26/12/2023 17:18:30

rjuju
Administrateur

Re : Modification de log_min_duration_statement ne fonctionne pas

Cela devrait faire exactement ce que vous voulez, en supposant qu'il s'agit bien de la configuration qui a été appliquée.

Hors ligne

#10 26/12/2023 17:26:18

AnkyFive
Membre

Re : Modification de log_min_duration_statement ne fonctionne pas

Ok merci

Hors ligne

Pied de page des forums