Pour identifier les causes de la latence du système et de l'utilisation élevée du processeur dans AlloyDB pour PostgreSQL, vous pouvez surveiller et résoudre les problèmes liés aux requêtes actives de longue durée dans votre base de données.
Vous pouvez afficher les requêtes actives sur la page Insights sur les requêtes de la consoleGoogle Cloud , classées par heure de début de la transaction. Si un grand nombre de requêtes sont en cours d'exécution, la page peut afficher un sous-ensemble du nombre total de requêtes en raison des limites de mémoire de la collecte de données.
Avant de commencer
Pour commencer à afficher les requêtes actives, vous devez activer les fonctionnalités avancées d'insights sur les requêtes et l'analyse des requêtes actives pour votre instance, comme suit :
Dans la console Google Cloud , accédez à la page Clusters.
Dans la liste des clusters et des instances, cliquez sur une instance principale ou de pool de lecture.
Cliquez sur Insights sur les requêtes.
Cliquez sur Edit settings (Modifier les paramètres).
Dans la fenêtre Modifier les paramètres d'insights sur les requêtes, sélectionnez Activer les fonctionnalités avancées d'insights sur les requêtes pour AlloyDB > Analyse des requêtes actives.
Cliquez sur Enregistrer les modifications.
Facultatif : Si vous y êtes invité, pour PostgreSQL 17 ou version antérieure, dans la fenêtre Les modifications nécessitent un redémarrage, cliquez sur Confirmer et redémarrer.
Vous pouvez bénéficier de l'assistance de Gemini Cloud Assist pour vous aider à surveiller et à résoudre les problèmes liés à vos ressources AlloyDB. Pour en savoir plus, consultez Surveiller et résoudre les problèmes avec l'assistance IA.
Afficher les requêtes actives
Pour afficher vos requêtes actives, procédez comme suit :
Demandez à votre administrateur de vous accorder le rôle Lecteur de surveillance des insights sur les bases de données (
roles/databaseinsights.monitoringViewer) ou créez un rôle personnalisé avec l'autorisation IAMdatabaseinsights.activeQueries.fetch.Attribuez ce rôle à chaque utilisateur qui consulte des requêtes actives.
Dans la console Google Cloud , ouvrez la page AlloyDB.
Cliquez sur le nom d'un cluster pour ouvrir sa page Présentation.
Sélectionnez l'onglet Insights sur les requêtes. Le tableau de bord d'Insights sur les requêtes affiche des détails sur le cluster sélectionné.
Cliquez sur l'onglet Vue des requêtes actives. L'onglet contient un résumé des requêtes actives en cours d'exécution, ainsi que les 50 transactions les plus longues.
Vous pouvez filtrer les informations selon l'un des critères suivants :
- Bases de données : permet de filtrer la charge des requêtes sur une base de données spécifique ou sur toutes les bases de données.
- Utilisateur : permet de filtrer la charge des requêtes à partir d'un utilisateur de base de données spécifique ou de tous les utilisateurs.
- ID de nœud : s'affiche uniquement pour les instances de pool de lecture. Permet de filtrer la charge des requêtes sur un nœud d'instance de pool de lecture spécifique ou sur tous les nœuds.
Tableau de données récapitulatif de toutes les requêtes actives normalisées : fournit un aperçu de toutes les requêtes actives en affichant le nombre total de connexions en fonction des paramètres suivants :
- Répartition des connexions actives classées par état de connexion.
- Répartition des connexions actives en fonction de différents types d'événements d'attente.
- Distribution des durées de transaction pour les requêtes qui ne sont pas inactives.
Transactions les plus longues : fournit une vue d'ensemble des 50 requêtes en cours les plus fréquentes (à l'état
activeetidle in transaction) par ordre de durée d'exécution décroissante.
Vous pouvez afficher la liste des 50 requêtes actives normalisées les plus fréquentes dans le tableau de bord Insights sur les requêtes.
Une requête active normalisée supprime les données sensibles et renvoie un condensé. Deux requêtes identiques, à l'exception des valeurs de la clause WHERE, ont le même condensé. Prenons l'exemple des trois requêtes suivantes :
select * from my_table where id = 1;select * from my_table where id = 2;select * from my_table where id = 100;
La version normalisée de ces requêtes est le condensé suivant :
select * from my_table where id = ?;
Une requête exécutée dans différentes sessions s'affiche sous la forme d'entrées différentes dans le tableau de bord.
Afficher les transactions les plus longues
Le tableau suivant décrit les colonnes de la table Transactions les plus longues du tableau de bord Insights sur les requêtes :
| Nom de la colonne | Description |
|---|---|
| ID du processus | L'ID de processus est l'identifiant unique de la connexion à la base de données. |
| ID de nœud | L'ID de nœud est l'identifiant unique du nœud d'instance du pool de lecture sur lequel une requête est exécutée. |
| Requête | Texte de requête SQL normalisé. |
| État | État actuel de la connexion. Les valeurs d'état incluent active et idle in transaction. |
| Durée de la session (secondes) | Durée de la session en cours. |
| Durée de la transaction (secondes) | Durée de la transaction actuelle. |
| Durée de la requête (secondes) | Durée de la requête active actuelle. La durée des requêtes à l'état idle in transaction est de 0, car elles ne sont pas en cours d'exécution. |
| Type d'événement d'attente | Type d'événement d'attente en cours lors de l'exécution de la requête. |
| Événement d'attente | Événement d'attente en cours lors de l'exécution de la requête. |
| Base de données | Nom de la base de données sur laquelle cette connexion est exécutée. |
| Nom de l'application | Nom de l'application sur laquelle cette connexion est exécutée. |
| Nom d'utilisateur | Nom de l'utilisateur de la base de données connecté à la base de données. |
| Adresse du client | Adresse IP spécifique du client qui a envoyé la requête. |
| Action | Contient un lien permettant de mettre fin à une transaction. |
L'écran est actualisé automatiquement toutes les 60 secondes.
L'utilisation des champs Base de données et Utilisateur pour le filtrage actualise les données de la page.
Pour analyser des données statiques, désactivez l'actualisation automatique et utilisez le champ Filtre du tableau Transactions les plus longues si nécessaire.
Mettre fin à une requête ou à une transaction
Pour mettre fin à une requête ou à une transaction, vous devez disposer du rôle roles/databaseinsights.operationsAdmin. Pour en savoir plus, consultez la page Rôles IAM de base et prédéfinis.
Une transaction peut contenir plusieurs requêtes. Pour identifier les requêtes actives, consultez la colonne Requête du tableau Transaction la plus longue.
Pour mettre fin à une requête ou à une transaction, procédez comme suit :
- Sélectionnez la requête dans le tableau Transaction la plus longue.
- Faites défiler l'écran vers la droite jusqu'à la colonne Action.
- Cliquez sur Mettre fin à la connexion.
Dans la fenêtre Arrêter la connexion, cliquez sur Confirmer.
La page s'actualise après le lancement de la résiliation. Si l'arrêt échoue, il est silencieux et la requête continue de s'afficher dans la liste des requêtes actives. Si l'arrêt a abouti, la requête ne s'affiche plus dans la liste.
Analyse des requêtes bloquées
Si une requête active spécifique est bloquée ou s'exécute beaucoup plus longtemps que prévu, elle peut bloquer d'autres requêtes dépendantes.
Vous pouvez utiliser l'analyse des requêtes bloquées pour identifier et arrêter les requêtes qui s'exécutent depuis longtemps ou qui conservent des verrous plus longtemps que nécessaire et bloquent d'autres requêtes.
Identifier et arrêter une requête active bloquée
Pour identifier et arrêter une requête active spécifique susceptible de bloquer d'autres requêtes, procédez comme suit :
Dans la console Google Cloud , ouvrez la page AlloyDB.
Cliquez sur le nom d'un cluster pour ouvrir sa page Présentation.
Sélectionnez l'onglet Insights sur les requêtes.
Cliquez sur l'onglet Requêtes actives. Si vous n'avez pas encore de requêtes actives en cours d'exécution, accédez à AlloyDB Studio et exécutez les requêtes que vous souhaitez examiner.
Accédez à la section Transactions dont l'exécution prend le plus de temps. Vous pouvez afficher jusqu'aux 50 requêtes actives de longue durée les plus fréquentes dans chaque catégorie. Chaque entrée affichée comporte des détails sur la requête active, y compris les éléments suivants :
- ID de processus : ID de processus de la requête. Cliquez sur Développer pour afficher l'entrée. Deux icônes peuvent s'afficher :
- Icône de sablier : cette icône indique que le processus attend qu'une autre requête se termine. Si un nombre est inclus à côté de l'icône, il indique le nombre de requêtes dépendantes qui attendent la fin de ce processus.
- Icône de blocage : cette icône indique que le processus bloque d'autres requêtes.
- Requête : requête en cours d'exécution, telle que
SELECT ...ouUPDATE .... - État : état de la requête active, par exemple
ACTIVE. - Durée de la session (secondes) : durée de la session en cours.
- Durée de la transaction (secondes) : durée de la transaction active en cours.
- Durée de la requête (en secondes) : durée de la requête active actuelle.
- Type d'événement d'attente : type d'événement d'attente en cours lors de l'exécution de la requête, tel que Délai avant expiration ou Verrouillage.
- Événement d'attente : événement d'attente en cours lors de l'exécution de la requête.
- Base de données : nom de la base de données sur laquelle la connexion est exécutée.
- Nom de l'application : nom de l'application sur laquelle la connexion est exécutée.
- Nom d'utilisateur : nom de l'utilisateur de la base de données connecté à la base de données.
- Adresse du client : adresse IP du client qui a envoyé la requête.
- Action : actions possibles, telles que Mettre fin à la connexion.
Cliquez pour développer l'ID de processus que vous souhaitez examiner. Vous pouvez développer les processus sous-jacents jusqu'à trois niveaux dans l'arborescence d'investigation.
- ID de processus : ID de processus de la requête. Cliquez sur Développer pour afficher l'entrée. Deux icônes peuvent s'afficher :
Identifiez la requête spécifique qui est bloquée, puis cliquez sur Arrêter la connexion. Une fois la connexion interrompue, vous pouvez accéder à AlloyDB Studio pour exécuter à nouveau vos requêtes actives.