Diagnostiquez et gérez les connexions d'une instance Hologres.
Gestion des connexions et des requêtes
Hologres est compatible avec PostgreSQL. Interrogez la vue pg_stat_activity pour inspecter les connexions et diagnostiquer les requêtes en cours d'exécution. Principales opérations :
Consultez le nombre maximal de connexions par défaut : chaque spécification d'instance possède une limite de connexion par défaut. Exécutez une commande pour connaître votre limite.
Gérez les connexions dans HoloWeb : consultez, gérez et arrêtez les connexions actives dans la console HoloWeb.
Interrogez les connexions via SQL : interrogez les nombres de connexions, vérifiez les états et arrêtez les connexions inactives.
Arrêtez les connexions : utilisez des fonctions SQL pour libérer les ressources détenues par des connexions spécifiques.
Connexions réservées aux superutilisateurs : utilisez les connexions réservées pour la gestion lorsque la limite de connexion est atteinte.
Limitez les connexions par utilisateur : définissez une limite de connexion par utilisateur afin d'éviter une surutilisation des ressources.
Arrêtez automatiquement les connexions inactives : fermez automatiquement les connexions restées inactives au-delà d'une durée spécifiée.
Bonnes pratiques d'utilisation des connexions : bonnes pratiques relatives à la gestion des connexions Hologres.
Interroger la vue pg_stat_activity
La vue pg_stat_activity fournit des informations d'exécution sur les connexions et les requêtes de l'instance. Exécutez la commande suivante pour l'interroger.
select * from pg_stat_activity ;
Le tableau suivant décrit les champs de pg_stat_activity.
|
Champ |
Description |
|
datid |
ID d'objet (OID) de la base de données à laquelle le backend est connecté. |
|
datname |
Nom de la base de données à laquelle le backend est connecté. |
|
pid |
ID de processus (PID) du backend Hologres. |
|
usesysid |
OID de l'utilisateur connecté au backend Hologres. |
|
usename |
Nom d'utilisateur de la connexion actuelle. |
|
application_name |
Type d'application cliente. Les types d'application courants incluent :
|
|
client_addr |
Adresse IP du client. Il peut s'agir d'une adresse résolue et non de l'adresse IP source d'origine. |
|
client_hostname |
Nom d'hôte du client. |
|
client_port |
Port du client. |
|
backend_start |
Heure de démarrage du processus backend. |
|
xact_start |
Heure de début de la transaction actuelle du processus.
|
|
query_start |
Heure de début de la requête actuellement active. Si l'état de la connexion n'est pas |
|
state_change |
Heure du dernier changement d'état de la connexion. |
|
wait_event_type |
Type d'événement pour lequel le backend est en attente, ou NULL en l'absence d'attente. Les valeurs possibles incluent :
|
|
wait_event |
Nom de l'événement d'attente si le backend est actuellement en attente, sinon NULL. |
|
state |
État actuel de la connexion. Les états courants incluent :
|
|
backend_xid |
Identifiant de transaction de niveau supérieur du backend Hologres. |
|
backend_xmin |
Horizon xmin du backend actuel. |
|
query |
Dernière requête exécutée sur le backend. Affiche la requête en cours d'exécution si state est |
|
backend_type |
Type de backend. Valeurs possibles : autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, startup, walreceiver, walsender, walwriter et composants d'exécution backend tels que PQE. Remarque
Le type |
Notes d'utilisation
Seuls les superutilisateurs peuvent consulter toutes les connexions. Les utilisateurs standard ne voient que leurs propres connexions.
Nombre maximal de connexions par défaut
La limite de connexion par défaut varie selon la spécification de l'instance. Exécutez les commandes suivantes pour l'interroger. Chaque commande renvoie la limite par nœud FE. Multipliez cette valeur par le nombre de nœuds FE pour obtenir la limite totale de l'instance. Les nombres de nœuds FE sont répertoriés dans la rubrique Gestion des instances.
-
Interrogez le nombre maximal de connexions pour l'ensemble de l'instance (Hologres V1.3.23 et versions ultérieures).
select instance_max_connections(); -
Interrogez le nombre maximal de connexions pour un seul nœud FE. Multipliez cette valeur par le nombre de nœuds FE pour obtenir la limite totale de l'instance.
show max_connections;
Gérer les connexions dans HoloWeb
Consultez et gérez les connexions actives dans la console HoloWeb.
Connectez-vous à la console HoloWeb. Se connecter à HoloWeb et exécuter des requêtes SQL.
Dans la barre de navigation supérieure, cliquez sur Diagnostics and Optimization.
Dans le volet de navigation de gauche, cliquez sur Connections.
-
Sur la page Connections, configurez les paramètres pour afficher les connexions et les informations associées de votre instance.
RemarqueSeuls les superutilisateurs peuvent consulter toutes les connexions. Les utilisateurs standard ne voient que leurs propres connexions.
Le tableau suivant décrit les paramètres.
Paramètre
Description
Instance name
Nom de l'instance Hologres.
Database
Base de données Hologres. Laissez ce champ vide pour afficher les connexions vers toutes les bases de données.
Database
Nom de la base de données connectée.
RemarqueSi le nom de la base de données est Postgres, cela indique une connexion de maintenance backend, qui peut être ignorée.
User Name
Compte utilisateur associé à la connexion.
Client Address
Il peut s'agir d'une adresse IP sortante acheminée et non de l'adresse IP source d'origine.
Application Name
Nom de l'application ayant établi la connexion.
State
État de la connexion. Les états courants incluent :
-
active : la connexion est active.
-
idle : la connexion est inactive.
-
idle in transaction : la connexion est inactive au sein d'une transaction de longue durée.
-
idle in transaction (Aborted) : la connexion est inactive au sein d'une transaction ayant échoué.
Query Start
Heure de début de la requête.
Query
Requête exécutée.
RemarqueLes requêtes longues peuvent être tronquées.
PID
ID de processus (PID) de la requête.
Operation
-
Kill : arrêtez individuellement ou par lot les connexions inattendues.
-
Details : cliquez pour afficher les informations détaillées sur la connexion.
-
Interroger les connexions avec SQL
Utilisez les instructions SQL suivantes pour interroger les informations de connexion.
-
Interrogez le nombre de connexions vers la base de données actuelle.
Exécutez les commandes suivantes pour afficher le nombre de connexions pour la base de données actuelle. Les descriptions des champs figurent dans la section Interroger la vue pg_stat_activity.
-
Pour Hologres V1.1 et versions ultérieures :
SELECT datname::TEXT ,COUNT(1) AS COUNT FROM pg_stat_activity WHERE backend_type = 'client backend' AND application_name != 'hologres' GROUP BY datname::TEXT; -
Pour Hologres V0.10 et versions antérieures :
SELECT datname ,COUNT(1) AS COUNT FROM pg_stat_activity WHERE backend_type = 'client backend' AND application_name != 'hologres' GROUP BY datname;
-
-
Affichez l'état de chaque connexion.
Utilisez HoloWeb dans la console Hologres pour afficher l'état des connexions, ou exécutez l'instruction suivante pour interroger tous les états de connexion JDBC ou PSQL.
select * from pg_stat_activity where backend_type = 'client backend' and state = '<statename>';Remplacez
<statename>par l'un des états suivants :idle : le processus attend de nouvelles commandes clientes.
active: connexion active, le processus exécute une requête.idle in transaction: le processus se trouve dans une transaction mais n'exécute actuellement aucune requête.idle in transaction (aborted): le processus se trouve dans une transaction ayant échoué et n'exécute actuellement aucune requête.fastpath function call : indique qu'un processus exécute une fonction
fast-path.disabled : indique que le suivi des activités
track activitiespour le processus est désactivé.
Par exemple, interrogez les connexions inactives :
select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';Les composants Hologres tels que HoloWeb utilisent JDBC et consomment des connexions. Si le nombre approche constamment
max_connections, vérifiez votre application pour détecter d'éventuelles fuites de connexions et configurez un pool de connexions approprié. Libérez les connexions. -
Affichez le nombre de connexions sur chaque nœud d'accès
Interrogez le nombre de connexions sur chaque nœud FE (Hologres V1.3.23 et versions ultérieures). Les nœuds FE sans connexions actives sont omis des résultats.
select * from hologres.hg_connections;Le tableau suivant décrit les champs du résultat de la requête.
fe_id: ID du nœud FE.used_connections: nombre de connexions actuellement utilisées sur le nœud FE.max_connections : nombre maximal de connexions pour un nœud FE, identique à la valeur renvoyée par la commande
show max_connections.
Arrêter les connexions
Les symptômes suivants indiquent que la limite de connexion a été atteinte :
Le nombre de connexions atteint ou dépasse
max_connections, comme indiqué sur la page Monitoring and Alarms de la console Hologres.L'erreur
FATAL: sorry, too many clients already connection limit exceeded for superusersse produit.L'erreur
FATAL: remaining connection slots are reserved for non-replication superuser connectionsest signalée.
Pour résoudre ces problèmes, connectez-vous avec un compte superutilisateur et exécutez l'instruction suivante pour vérifier la présence de connexions inactives.
select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';
Si les résultats montrent un excès de processus inactifs, utilisez le pid issu des résultats pour libérer les connexions à l'aide des instructions suivantes. Les descriptions des champs figurent dans la section Interroger la vue pg_stat_activity.
select pg_cancel_backend(<pid>); -- Cancels the query on the connection.
select pg_terminate_backend(<pid>); -- Terminates the corresponding backend connection process.
-- Terminate backend IDLE connection processes in a batch to release connections.
SELECT pg_terminate_backend(pid)
,query
,datname
,usename
,application_name
,client_addr
,client_port
,backend_start
,state
FROM pg_stat_activity
WHERE length(query) > 0
AND pid != pg_backend_pid()
AND backend_type = 'client backend'
AND state = 'idle'
AND application_name != 'hologres'
AND query not like '%pg_cancel_backend%';
Connexions réservées aux superutilisateurs
Hologres réserve des connexions pour les superutilisateurs ; le nombre varie selon la spécification de l'instance (Gestion des instances). Ces connexions permettent d'effectuer des tâches de gestion, telles que l'arrêt des connexions inactives lorsque la limite est atteinte. Les utilisateurs standard peuvent utiliser max_connections moins le nombre de connexions réservées. N'utilisez pas de comptes superutilisateurs pour les opérations courantes, car cela pourrait épuiser toutes les connexions et bloquer l'accès administratif.
Limites de connexion par utilisateur
Définir une limite de connexion par utilisateur
Définissez une limite de connexion par utilisateur afin d'éviter une consommation excessive de ressources.
Exécutez l'instruction suivante pour limiter les connexions d'un utilisateur sur un seul nœud d'accès. Pour les instances multinœuds, la limite totale est égale à (connexions par nœud) * (nombre de nœuds).
-
Syntaxe
ALTER ROLE "Alibaba Cloud account ID" CONNECTION LIMIT <number>; -
Paramètres
Paramètre
Description
ID du compte Alibaba Cloud
ID du compte à limiter. Pour un utilisateur RAM, préfixez l'UID du compte par
p4_.number
Limite de connexion.
La valeur doit se situer dans la plage [-1, N]. Une valeur de -1 supprime la limite de connexion de l'utilisateur.
-
Exemple
Cet exemple limite l'utilisateur RAM
283813xxxxà une connexion par nœud.ALTER ROLE "p4_283813xxxx" CONNECTION LIMIT 1;
Afficher les limites de connexion par utilisateur
Exécutez l'instruction suivante pour afficher les limites de connexion par nœud pour les utilisateurs de l'instance.
SELECT rolname, rolconnlimit
FROM pg_roles
WHERE rolconnlimit <> -1;
Exemple de résultat de requête :
rolname | rolconnlimit
---------------+--------------
p4_283813xxxx | 1
(1 row)
Arrêt automatique des connexions inactives
Si les connexions de l'instance approchent constamment de la limite, votre application présente peut-être des fuites de connexions. Activez l'arrêt automatique des connexions inactives pour libérer des ressources. Les connexions restées inactives au-delà de la durée spécifiée sont automatiquement déconnectées.
-
Limitations
Prise en charge à partir de Hologres V0.10.25. Pour les versions antérieures, consultez la rubrique Erreurs courantes lors d'une mise à niveau ou rejoignez le groupe DingTalk Hologres pour demander une mise à niveau. Comment obtenir davantage d'assistance en ligne ?
-
Syntaxe
-
Niveau session
-- Automatically disconnect a connection if it has been idle for 10 minutes (600,000 milliseconds). SET idle_session_timeout = 600000; -
Niveau base de données
-- Automatically disconnect connections to this database if they have been idle for 10 minutes (600,000 milliseconds). ALTER DATABASE <db_name> SET idle_session_timeout = 600000;Remplacez
<db_name>par le nom de la base de données pour laquelle vous souhaitez activer l'arrêt automatique des connexions inactives.
-
Bonnes pratiques relatives aux connexions
Suivez ces bonnes pratiques pour utiliser les connexions Hologres.
-
Utilisez judicieusement le compte superutilisateur
N'utilisez pas de comptes superutilisateurs pour les connexions applicatives ou les opérations courantes. Si le nombre de connexions dépasse la limite, même les superutilisateurs pourraient ne plus pouvoir se connecter.
Créez un compte superutilisateur dédié pour les situations d'urgence, telles que l'épuisement de la limite de connexions ou le blocage de requêtes.
-
Configurez un pool de connexions approprié
Hologres n'arrête pas automatiquement les connexions inactives par défaut. Utilisez un pool de connexions pour libérer rapidement les connexions inactives.
Nettoyez régulièrement les connexions inactives afin de libérer des ressources.
Erreurs courantes
Un message d'erreur est renvoyé lors de l'exécution SQL :
terminating connection due to idle state timeout.Cause : la connexion a été automatiquement arrêtée car elle a dépassé le délai d'inactivité configuré.
Solution : reconnectez-vous à l'instance ou augmentez le délai d'expiration des connexions inactives. Pour savoir comment modifier le délai d'expiration des connexions inactives, consultez la section Arrêt automatique des connexions inactives.