Que faire de pg_stat_monitor ?

Meetup PostgreSQL Lille

Florent Jardin

1er juin 2022

Annonce de Percona

pg_stat_monitor est disponible en version 1.0

  • Fork de pg_stat_statements (et auto_explain)
  • Composant de supervision pour la solution PMM

Nouvelles fonctionnalités

(par rapport à pg_stat_statements…)

Regroupement des requêtes en time series buckets

  • Par défaut, un bucket toutes les 60 secondes
    • pg_stat_monitor.pgsm_max_buckets (max: 10)
    • pg_stat_monitor.pgsm_bucket_time (min: 1sec)

Relations de la requêtes

  • Champ relations
    • Liste les tables rattachées aux requêtes
    • Parcours la définition des vues

Types des requêtes

  • Catégorise les requêtes selon leur type
    • SELECT, INSERT, UPDATE, DELETE
    • (empty), UTILITY, NOTHING
  • Champs cmd_type et cmd_type_text
    • Fonction get_cmd_type(integer)

Requêtes en erreur

  • Capte les requêtes en erreur
  • Champs state, elevel, sqlcode, message

Histogramme d’exécution

  • Expose les requêtes selon leur temps d’éxecution

  • Champ resp_calls

  • Fonction histogram(bucket, queryid)

Plans d’éxecution

  • Champs planid et query_plan
    • Affecte les performances de l’instance
    • pg_stat_monitor.pgsm_enable_query_plan (no)
  • Équivalent de auto_explain mais en mémoire
    • pas d’options EXPLAIN supplémentaires

Consommation CPU

  • Champs cpu_user_time et cpu_sys_time
    • Consommation CPU du tracking de requêtes
    • S’appuient sur la fonction getrusage()
    • Décorrélés de la valeur total_exec_time

Métadonnées de requête

  • Spécification « Sqlcommenter » de Google
  • Extrait le bloc de commentaire
    • et maintient le queryid intact

Requêtes dénormalisées

  • Désactiver la normalisation des requêtes
    • Afficher les valeurs réelles
    • … Seule la première occurrence est tracée
  • Facilite l’analyse des performances d’une requête
    • pg_stat_monitor.pgsm_normalized_query

Différences mineures

  • queryid de type TEXT au lieu de BIGINT
  • userid de type REGROLE au lieu de OID
  • datname de type NAME au lieu de dboid de type OID
  • bucket_start_time de type TEXT au lieu de TIMESTAMPTZ dans la documentation
  • rows_retrieved au lieu de rows
  • Colonnes inédites application_name, client_ip

Limites actuelles

  • Cohabitation difficile entre pgss et pgsm
    • pgss doit être chargé avant pgsm
    • En version 14, compute_query_id = true
  • Les statistiques ne sont pas conservées après un redémarrage
  • Un bucket n’est pas limité en nombre de requêtes distinctes
    • pg_stat_monitor.pgsm_max est exprimé en MB et non en quantité de requêtes

Démonstrations

Conclusion

  • pg_stat_monitor est fortement couplé à PMM
  • De bonnes idées pour pg_stat_statements
  • Si vous ne connaissiez pas, essayez pg_stat_statements

Questions