Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    Homme Profil pro
    test
    Inscrit en
    octobre 2016
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : test
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2016
    Messages : 84
    Points : 42
    Points
    42

    Par défaut Détecter les requêtes lentes

    Bonjour à tous,

    Qui a une idée, dans postgres, de comment je peux détecter les requêtes lentes ?

    J'ai de la latence dans mes applications et je ne sais pas par où je peux commencer.

    Merci

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    avril 2002
    Messages
    5 798
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : avril 2002
    Messages : 5 798
    Points : 23 004
    Points
    23 004

    Par défaut

    Bonjour,

    La latence de vos applications peut résulter de plusieurs causes, pas nécessairement imputables à des requêtes lentes.
    Il peut, par exemple, y avoir des problèmes de réseau, des problèmes de configuration du serveur...
    Si vous utilisez un ORM, il peut aussi y avoir des problèmes liés aux requêtes qu'il génère (et qui surchargent le serveur).
    Bref, il convient, au départ, d'essayer d'éliminer les différentes causes possibles.

    Si c'est bien un problème de "requêtes lentes", une des meilleures solutions, sous PostgreSQL, est d'utiliser l'extension pg_stat_statements.
    Elle a l'avantage de collecter des statistiques sur toutes les requêtes exécutées sur le serveur. Ainsi, vous pouvez détecter les requêtes qui prennent un temps moyen d'exécution que vous jugeriez trop long, mais aussi de voir si ces requêtes sont souvent exécutées ou pas.
    Par ailleurs, elle permet de détecter des requêtes qui, prises isolément, ont un temps d'exécution qui vous paraîtrait acceptable, mais qui sont exécutées tellement souvent qu'elles finissent par poser problème (ce qui est le cas le plus complexe à identifier).

    Une fois que vous avez identifié une ou plusieurs requêtes potentiellement problématiques, il n'y a "plus qu'à" passer par EXPLAIN (ANALYZE) pour étudier le plan d'exécution de la requête et tenter de l'optimiser. Attention, ça n'est pas non plus quelque chose d'évident.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    18 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 18 898
    Points : 44 200
    Points
    44 200

    Par défaut

    Comme le dit très bien CED, des requêtes "lentes" cela ne veut pas dire que c'est le serveur PG qui est lent.

    Par exemple l'usage du SELECT * systématique plombe dramatiquement les performances :
    1) la plupart du temps aucun index ne va être utilisé, même s'il y en a beaucoup, car récupérer toutes les colonnes nécessite une double lecture INDEX + TABLE souvent plus couteuses que de lire séquentiellement toutes les lignes de la table;
    2) en renvoyant toutes les colonnes, les lignes manipulées lors de l'exécution de la requête sont TRES longues… Donc, peut performantes. Sur le réseau ce sont des millions d'octets inutiles qu'il faut véhiculer entre le serveur et le client;
    3) si le poste client est lent ou que les ressources sont faiblement dimensionnées (RAM en particulier), le flux entre le serveur et l'application finale, peut être ralenti par le simple fait que le poste n'absorbe pas aussi vite les octets que le serveur les envoie (attentes dit d'IO asynchrone sur le réseau).

    Malheureusement, PG ne dispose pas d'outils pour mesurer finement toutes ces attentes.

    Dans les grands SGBDR (SQL Server, Oracle, DB2) il existe de nombreux outils systèmes capable de mesurer toutes les temps de réponses d'une requête ou d'un lot afin d'en déduire rapidement ou ça pêche !
    Exemple avec SQL Server : https://blobeater.blog/2017/01/16/lo...with-sql-2016/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

Discussions similaires

  1. [9.1] Détecter les requêtes le plus consommatrices
    Par NULL008 dans le forum Administration
    Réponses: 1
    Dernier message: 19/07/2017, 11h02
  2. Sur mobile, les Data URI sont 6 fois plus lentes que les requêtes HTTP
    Par rodolphebrd dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 30/07/2013, 10h32
  3. Détecter les requêtes sans index
    Par max-mag dans le forum Outils
    Réponses: 2
    Dernier message: 11/06/2009, 15h39
  4. coment détecter les positions des cotés d'un rectangle?
    Par einegel dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 18/01/2005, 10h26
  5. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo