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 jsonLANGUAGE plpgsqlSECURITY DEFINERAS $$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éfaut1000) limite lesEXPLAINs par extraction. - Mise en cache :
query_plan_cache_size/query_plan_cache_ttl(par défaut1000entrées/1h) met en cache un plan une fois obtenu, indexé par l'ID de requête.
Documentation associée
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.