• /
  • EnglishEspañolFrançais日本語한국어Português
  • Se connecterDémarrer

Cette traduction automatique est fournie pour votre commodité.

En cas d'incohérence entre la version anglaise et la version traduite, la version anglaise prévaudra. Veuillez visiter cette page pour plus d'informations.

Créer un problème

Permissions du plan EXPLAIN pour le monitoring PostgreSQL

Aperçu

Nous travaillons toujours sur cette fonctionnalité, mais nous aimerions que vous l'essayiez !

Cette fonctionnalité est actuellement fournie dans le cadre d'un aperçu conformément à nos politiques de pré-sortie.

Par défaut, EXPLAIN s'exécute directement en tant qu'utilisateur de monitoring, et PostgreSQL vérifie les privilèges des tables au moment de la planification — les instructions de verrouillage de ligne ou d'écriture échouent donc avec permission denied à moins que l'utilisateur de monitoring n'ait un accès en écriture, ce qu'il ne devrait jamais avoir.

Créez la fonction d’aide EXPLAIN

Pour collecter des plans de requête pour les instructions de verrouillage ou d'écriture sans accorder d'accès en écriture à l'utilisateur de monitoring, créez la fonction suivante dans chaque base de données :

CREATE OR REPLACE FUNCTION otel.explain_statement(l_query text)
RETURNS json
LANGUAGE plpgsql
SECURITY DEFINER
AS $$
DECLARE
v_plan json;
v_param_count int;
v_nulls text := '';
i int;
BEGIN
SET TRANSACTION READ ONLY;
SET plan_cache_mode = force_generic_plan;
EXECUTE 'PREPARE otel_explain_stmt AS ' || l_query;
SELECT COALESCE(array_length(parameter_types, 1), 0) INTO v_param_count
FROM pg_prepared_statements WHERE name = 'otel_explain_stmt';
IF v_param_count > 0 THEN
FOR i IN 1..v_param_count LOOP
v_nulls := v_nulls || CASE WHEN i > 1 THEN ', ' ELSE '' END || 'null';
END LOOP;
v_nulls := '(' || v_nulls || ')';
END IF;
EXECUTE 'EXPLAIN (FORMAT JSON) EXECUTE otel_explain_stmt' || v_nulls INTO v_plan;
DEALLOCATE otel_explain_stmt;
RETURN v_plan;
EXCEPTION WHEN OTHERS THEN
IF EXISTS (SELECT 1 FROM pg_prepared_statements WHERE name = 'otel_explain_stmt') THEN
DEALLOCATE otel_explain_stmt;
END IF;
RAISE;
END;
$$;
GRANT EXECUTE ON FUNCTION otel.explain_statement(text) TO <YOUR_DB_USERNAME>;

Mécanismes de collecte du plan d’exécution

  • Limitation de débit : top_query_collection.max_explain_each_interval (par défaut 1000) limite les EXPLAINs par extraction.
  • Mise en cache : query_plan_cache_size / query_plan_cache_ttl (par défaut 1000 entrées/ 1h) met en cache un plan une fois obtenu, indexé par l'ID de requête.

Instrumentation dans les environnements auto-hébergés

Découvrez comment configurer le monitoring PostgreSQL dans des environnements auto-hébergés avec New Relic.

Référence des métriques

Découvrez les métriques disponibles collectées par le collecteur NRDOT.

Guide de dépannage

Apprenez à résoudre les problèmes courants liés au monitoring PostgreSQL.

Droits d'auteur © 2026 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.