Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Use the pg_profile extension to collect statistics on resource-intensive activities

Dernière mise à jour :Aug 08, 2026

L'extension pg_profile capture des instantanés des statistiques d'activité de la base de données à intervalles réguliers et génère des rapports de performance au format HTML. Utilisez-la pour identifier les instructions SQL gourmandes en ressources et optimiser les performances de votre base de données sur ApsaraDB RDS for PostgreSQL.

Fonctionnement

pg_profile s'appuie sur une architecture à deux bases de données :

  • Base de données serveur : la base de données surveillée. Elle exécute pg_stat_statements et pg_stat_kcache pour exposer les statistiques des requêtes.

  • Base de données de profil : la base de données qui gère la surveillance. Elle se connecte à la base de données serveur, récupère les instantanés de statistiques via dblink et les stocke localement. Générez les rapports de performance depuis la base de données de profil.

La base de données de profil et la base de données serveur peuvent s'exécuter sur la même instance RDS ou sur des instances distinctes.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

Notes d'utilisation

  • pg_profile nécessite l'extension pg_stat_statements. Installez-la avant pg_profile. Vous pouvez également installer pg_stat_kcache pour collecter des statistiques d'E/S au niveau du noyau.

  • Les instantanés consomment de l'espace disque. pg_profile inclut un mécanisme de nettoyage automatique ; surveillez l'utilisation du disque et ajustez les paramètres de rétention si nécessaire.

  • Chaque instantané prend un certain temps pour se terminer. Collectez les instantanés une ou deux fois par heure.

Installer et désinstaller pg_profile

Exécutez les instructions suivantes avec un compte privilégié :

-- Install
CREATE EXTENSION pg_profile;

-- Uninstall
DROP EXTENSION pg_profile;

Configurer la surveillance

Cette section décrit la configuration d'une base de données serveur nommée server et d'une base de données de profil nommée profile sur la même instance RDS. Les mêmes étapes s'appliquent lorsque les bases de données se trouvent sur des instances distinctes ; seuls les paramètres de connexion diffèrent.

Configurer la base de données serveur

Exécutez les instructions suivantes avec un compte privilégié.

  1. Créez la base de données serveur.

    CREATE DATABASE server;
  2. Connectez-vous à la base de données serveur et installez les extensions requises.

    pg_stat_statements et pg_stat_kcache doivent être chargés au démarrage de la base de données. Ajoutez les deux au paramètre shared_preload_libraries avant de créer ces extensions. pg_stat_kcache dépend de pg_stat_statements, donc les deux doivent être présents dans shared_preload_libraries . Pour obtenir des instructions, consultez la page Set parameters .
    \c server
    CREATE EXTENSION pg_stat_statements;
    CREATE EXTENSION pg_stat_kcache;
  3. Vérifiez que les extensions sont installées.

    \dx

    Sortie attendue :

    Name                | Version |   Schema   |                              Description
    --------------------+---------+------------+------------------------------------------------------------------------
     pg_stat_kcache     | 2.2.1   | public     | Kernel statistics gathering
     pg_stat_statements | 1.9     | public     | track planning and execution statistics of all SQL statements executed
     ...

Configurer la base de données de profil

Exécutez les instructions suivantes avec un compte privilégié.

  1. Créez la base de données de profil.

    CREATE DATABASE profile;
  2. Connectez-vous à la base de données de profil et installez les extensions requises.

    \c profile
    CREATE EXTENSION plpgsql;
    CREATE EXTENSION dblink;
    CREATE EXTENSION pg_profile;
  3. Vérifiez que les extensions sont installées.

    \dx

    Sortie attendue :

    Name        | Version |   Schema   |                         Description
    ------------+---------+------------+--------------------------------------------------------------
     dblink     | 1.2     | public     | connect to other PostgreSQL databases from within a database
     pg_profile | 4.0     | public     | PostgreSQL load profile repository and report builder
     plpgsql    | 1.0     | pg_catalog | PL/pgSQL procedural language
     ...

Enregistrer la connexion à la base de données serveur

Depuis la base de données de profil, enregistrez la base de données serveur en tant que cible de surveillance. Exécutez l'instruction suivante avec un compte privilégié.

SELECT create_server('server', 'host=<host> dbname=server port=<port> user=<user> password=<password>');
Paramètre Exemple Description
host 127.0.0.1 Endpoint de l'instance RDS où s'exécute la base de données serveur. Consultez le tableau ci-dessous pour connaître les valeurs selon la topologie réseau.
dbname server Nom de la base de données serveur.
port 3002 Port de l'instance RDS où s'exécute la base de données serveur. Exécutez SHOW PORT; pour obtenir le port.
user test_user Nom d'utilisateur du compte privilégié pour l'instance de la base de données serveur.
password T123456! Mot de passe du compte.

Valeurs de host selon la topologie réseau :

Topologie **Valeur pour host**
Même instance RDS 127.0.0.1
Instances différentes, même VPC Endpoint interne de l'instance de la base de données serveur
Instances différentes, VPC différents Endpoint public de l'instance de la base de données serveur. L'instance de la base de données de profil doit être configurée avec une passerelle NAT et une adresse IP publique.
Pour obtenir les endpoints internes et publics d'une instance, consultez la page View and modify the endpoint and port number of an instance .

Sortie attendue :

show_servers
---------------------------------------------------------------------------------------
 (local,"dbname=profile port=3002",t,)
 (server,"host=127.0.0.1 dbname=server port=3002 user=test_user password=****",t,)
(2 rows)
La création d'une connexion serveur crée également une connexion local représentant la base de données de profil elle-même. Vous pouvez la voir dans la sortie ci-dessus.

Configurer la connexion à la base de données de profil

Une fois la connexion local créée, configurez ses identifiants. Exécutez l'instruction suivante avec un compte privilégié.

SELECT set_server_connstr('local','host=127.0.0.1 dbname=profile port=<port> user=<user> password=<password>');
Paramètre Exemple Description
host 127.0.0.1 Définissez sur 127.0.0.1.
dbname profile Nom de la base de données de profil.
port 3002 Port de l'instance de la base de données de profil. Exécutez SHOW PORT; pour obtenir la valeur.
user test_user Nom d'utilisateur du compte privilégié pour l'instance de la base de données de profil.
password T123456! Mot de passe du compte.

Collecter des instantanés et générer des rapports

Collecter un instantané

Depuis la base de données de profil, exécutez take_sample() pour collecter un instantané à partir de tous les serveurs enregistrés. Utilisez un compte privilégié.

SELECT take_sample();

Sortie attendue :

 take_sample
-------------------------
 (server,OK,00:00:00.52)
 (local,OK,00:00:00.51)
(2 rows)

Collectez au moins deux instantanés avant de générer un rapport ; le rapport couvre l'activité entre deux points d'instantané.

Afficher les instantanés collectés

SELECT * FROM show_samples('server');

Exemple de sortie :

 sample |      sample_time       | sizes_collected | dbstats_reset | bgwrstats_reset | archstats_reset
--------+------------------------+-----------------+---------------+-----------------+-----------------
      1 | 2022-09-30 02:14:07+00 | t               |               |                 |
      2 | 2022-09-30 02:16:59+00 | t               |               |                 |
      3 | 2022-09-30 02:17:58+00 | t               |               |                 |

Générer un rapport

Un rapport couvre l'activité entre deux instantanés ; spécifiez les numéros d'échantillon de début et de fin.

Option 1 : Depuis psql dans la base de données de profil

\o report_2_3.html
SELECT get_report('server',2,3);

Option 2 : Depuis l'interface de ligne de commande (CLI)

psql -Aqtc "SELECT profile.get_report('server',2,3)" \
  -o report_server_2_3.html \
  -d profile \
  -h <endpoint of the profile database instance> \
  -p 5432 \
  -U <privileged account of the profile database instance>

Les deux méthodes exportent le rapport sous forme de fichier HTML sur votre machine locale.

Automatiser la collecte d'instantanés

Utilisez pg_cron pour exécuter take_sample() selon une planification. Collectez les instantanés une ou deux fois par heure afin de capturer des intervalles significatifs sans générer une quantité excessive de données.

Étapes suivantes