Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’APPLIQUE À : Azure Database pour PostgreSQL – Serveur flexible
Cet article vous montre comment identifier rapidement la cause racine de l’utilisation élevée d’opérations d’E/S par seconde (IOPS) et les actions correctives pour contrôler l’utilisation d’opérations d’E/S par seconde (IOPS) lors de l’utilisation du serveur flexible Azure Database pour PostgreSQL.
Dans cet article, vous apprendrez comment :
- Utiliser des guides de résolution des problèmes permettant d’identifier les causes racines et d’obtenir des recommandations afin de les atténuer.
- Utiliser des outils permettant d’identifier une utilisation élevée d’opérations d’E/S par seconde, comme les indicateurs de performance Azure, le Magasin des requêtes et pg_stat_statements.
- Identifier les causes racines, telles que les requêtes de longue durée, le minutage des points de contrôle, le processus de démon de nettoyage automatique disruptif et l’utilisation élevée du stockage.
- Résoudre une utilisation élevée d’E/S en utilisant Explain Analyze, optimiser les paramètres serveur liés aux points de contrôle et paramétrer le démon de nettoyage automatique.
Guides de résolution des problèmes
À l’aide des guides de résolution des problèmes de fonctionnalités, disponibles sur le portail du serveur flexible Azure Database pour PostgreSQL, il est possible de trouver la cause racine probable et les recommandations pour atténuer le scénario d’utilisation élevée des IOPS. Pour savoir comment configurer les guides de résolution des problèmes, consultez Configurer des guides de résolution des problèmes.
Outils permettant d’identifier une utilisation élevée d’E/S
Nous vous recommandons les outils suivants pour identifier une utilisation élevée d’E/S.
Indicateurs de performance Azure
Les indicateurs de performance Azure constituent un bon point de départ pour vérifier l’utilisation d’E/S pour la date et la période définies. Les métriques fournissent des informations sur la durée pendant laquelle l’utilisation d’E/S est élevée. Comparez les graphiques d’opérations d’E/S par seconde d’écriture et de lecture ainsi que ceux de débit de lecture et de débit d’écriture pour déterminer les heures où la charge de travail a provoqué une utilisation élevée d’E/S. Pour une surveillance proactive, vous pouvez configurer des alertes sur les indicateurs de performance. Pour obtenir des instructions pas à pas, consultez Métriques Azure.
Magasin des requêtes
La fonctionnalité Magasin des requêtes capture automatiquement l’historique des requêtes et les statistiques d’exécution, et les garde pour que vous les évaluiez. Elle découpe les données par durée pour distinguer des modèles d’utilisation temporels. Les données de l’ensemble des utilisateurs, des bases de données et des requêtes sont stockées dans une base de données nommée azure_sys dans l’instance du serveur flexible Azure Database pour PostgreSQL. Pour obtenir des instructions pas à pas, consultez Surveiller les performances avec le Magasin des requêtes.
Utilisez l’instruction suivante pour voir les cinq premières instructions SQL qui consomment des E/S :
select * from query_store.qs_view qv where is_system_query is FALSE
order by blk_read_time + blk_write_time desc limit 5;
Extension pg_stat_statements
L’extension pg_stat_statements
permet d’identifier les requêtes qui consomment des E/S sur le serveur.
Utilisez l’instruction suivante pour voir les cinq premières instructions SQL qui consomment des E/S :
SELECT userid::regrole, dbid, query
FROM pg_stat_statements
ORDER BY blk_read_time + blk_write_time desc
LIMIT 5;
Remarque
Lorsque vous utilisez le magasin de requêtes ou pg_stat_statements pour remplir les colonnes blk_read_time et blk_write_time, vous devez activer le paramètre de serveur track_io_timing
. Pour plus d’informations sur track_io_timing
, consultez Paramètres de serveur.
Identifier les causes racines
Si les niveaux de consommation d’E/S sont généralement élevés, les causes racines peuvent être les suivantes :
Transactions de longue durée
Les transactions de longue durée peuvent consommer des E/S, ce qui peut entraîner une utilisation élevée d’E/S.
La requête suivante permet d’identifier les connexions actives depuis le plus longtemps :
SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() and state IN ('idle in transaction', 'active')
ORDER BY duration DESC;
Minutages des points de contrôle
Une utilisation élevée d’E/S peut également être observée dans les scénarios où un point de contrôle est activé trop fréquemment. Un moyen d’identifier ce problème consiste à rechercher le texte de journal suivant dans le fichier journal du serveur flexible Azure Database pour PostgreSQL : « LOG: checkpoints are occurring too frequently ».
Vous pouvez également investiguer avec une approche consistant à enregistrer des captures instantanées régulières de pg_stat_bgwriter
avec une date et une heure précises. À l’aide des captures instantanées enregistrées, vous pouvez calculer l’intervalle moyen des points de contrôle, le nombre de points de contrôle demandés et le nombre de points de contrôle planifiés.
Interruption de service du processus de démon de nettoyage automatique
Exécutez la requête suivante pour surveiller le nettoyage automatique :
SELECT schemaname, relname, n_dead_tup, n_live_tup, autovacuum_count, last_vacuum, last_autovacuum, last_autoanalyze, autovacuum_count, autoanalyze_count FROM pg_stat_all_tables WHERE n_live_tup > 0;
La requête est utilisée pour vérifier la fréquence à laquelle les tables de la base de données sont nettoyées.
last_autovacuum
: date et heure auxquelles le dernier nettoyage automatique a été exécuté sur la table.autovacuum_count
: nombre de fois où la table a été nettoyée.autoanalyze_count
: nombre de fois où la table a été analysée.
Résoudre les problèmes d’utilisation élevée d’E/S
Pour résoudre une utilisation élevée des E/S, vous pouvez utiliser l’une des trois méthodes suivantes.
La commande EXPLAIN ANALYZE
Une fois que vous identifiez la requête qui consomme beaucoup d’E/S, utilisez EXPLAIN ANALYZE
pour investiguer davantage la requête et l’ajuster. Pour plus d’informations sur la commande EXPLAIN ANALYZE
, passez en revue le plan EXPLAIN.
Mettre fin aux transactions de longue durée
Vous pouvez envisager de tuer une transaction de longue durée le cas échéant.
Pour mettre fin au PID (ID de processus) d’une session, vous devez détecter le PID avec la requête suivante :
SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() and state IN ('idle in transaction', 'active')
ORDER BY duration DESC;
Vous pouvez également filtrer en fonction d’autres propriétés comme usename
(nom d’utilisateur) ou datname
(nom de la base de données).
Une fois que vous disposez du PID de la session, vous pouvez y mettre fin à l’aide de la requête suivante :
SELECT pg_terminate_backend(pid);
Optimiser les paramètres de serveur
Si vous observez que le point de contrôle est activé trop fréquemment, augmentez le paramètre de serveur max_wal_size
jusqu’à ce que la plupart des points de contrôle soient basés sur le temps, et non sur les requêtes. Au moins 90 % des points de contrôle doivent finir par être basés sur le temps, et l’intervalle entre deux points de contrôle doit se rapprocher de la valeur checkpoint_timeout
définie sur le serveur.
max_wal_size
: les heures de pointe constituent un bon moment pour arriver à la valeurmax_wal_size
. Pour atteindre une valeur, procédez comme suit :Exécutez la requête suivante pour obtenir le numéro séquentiel dans le journal WAL actuel, puis notez le résultat :
select pg_current_wal_lsn();
Attendez pendant
checkpoint_timeout
secondes. Exécutez la requête suivante pour obtenir le numéro séquentiel dans le journal WAL actuel, puis notez le résultat :select pg_current_wal_lsn();
Exécutez la requête suivante, qui utilise les deux résultats, pour vérifier la différence, en gigaoctets (Go) :
select round (pg_wal_lsn_diff ('LSN value when run second time', 'LSN value when run first time')/1024/1024/1024,2) WAL_CHANGE_GB;
checkpoint_completion_target
: une bonne pratique consisterait à définir la valeur sur 0,9. Par exemple, une valeur de 0,9 pour uncheckpoint_timeout
de 5 minutes indique que la cible pour effectuer un point de contrôle est de 270 secondes [0,9*300 secondes]. La valeur 0,9 fournit une charge d’E/S assez régulière. Une valeur agressive decheckpoint_completion_target
peut entraîner une charge d’E/S accrue sur le serveur.checkpoint_timeout
: vous pouvez augmenter la valeurcheckpoint_timeout
à partir de la valeur par défaut définie sur le serveur. Lorsque vous augmentez la valeur, tenez compte du fait que l’augmentation de la valeur entraîne aussi une augmentation du temps de récupération en cas d’incident.
Optimiser le nettoyage automatique pour réduire les interruptions
Pour plus d’informations sur la surveillance et l’optimisation dans les scénarios où le nettoyage automatique provoque trop d’interruptions, consultez Réglage du nettoyage automatique.
Augmenter le stockage
L’augmentation du stockage est utile lorsque vous ajoutez davantage d’opérations d’E/S par seconde au serveur. Pour plus d’informations sur le stockage et les opérations d’E/S par seconde associées, consultez Options de calcul et de stockage.
Contenu connexe
- Résoudre les problèmes d’utilisation élevée du processeur dans un serveur flexible Azure Database pour PostgreSQL.
- Résoudre les problèmes d’utilisation élevée de la mémoire dans un serveur flexible Azure Database pour PostgreSQL.
- Résolvez les problèmes et identifiez les requêtes en cours d’exécution lentes dans un serveur flexible Azure Database pour PostgreSQL.
- Paramètres de serveur dans un serveur flexible Azure Database pour PostgreSQL.
- Optimisation du nettoyage automatique dans Azure Database pour PostgreSQL – Serveur flexible