RousselTMLEARNING

Observabilité

Dynatrace : analyser les requêtes de base de données (modifications, requêtes et procédures, transactions)

Comment Dynatrace capte les appels de base de données depuis l'application, les regroupe en services de base de données, les classe (modifications, requêtes ou procédures, transactions) et comment s'en servir pour diagnostiquer une lenteur.

1. D’où viennent les données #

Le point de vue de l’application.

Les services de base de données #

Le OneAgent instrumente les pilotes utilisés par l'application (JDBC, ADO.NET, pilotes Node.js, Python, Go…). Chaque appel devient un span rattaché à la requête qui l'a déclenché, et Dynatrace regroupe les appels vers une même base dans un service de base de données. Il mesure le temps vu par l'application, sans agent sur le serveur de base de données.

À savoir : L'état interne du serveur de base de données (plans d'exécution, attentes, verrous) relève des extensions de base de données ou des outils de l'éditeur ; le service de base de données montre l'impact de la base sur l'application.

2. Les trois catégories #

Comment Dynatrace classe les instructions.

Classement des instructions #

Dans l'analyse d'un service de base de données, les instructions sont réparties en trois catégories, qui permettent de filtrer les graphiques et la liste des requêtes :

CatégorieInstructionsCe qu’il faut surveiller
ModificationsINSERT, UPDATE, DELETE, MERGEcontention, verrous, volumes de mise à jour
Requêtes ou procéduresSELECT, appels de procédures stockéesnombre d’appels par requête, requêtes lentes
TransactionsCOMMIT, ROLLBACKtemps de validation, nombre de validations
Erreur courante : Lire « requêtes ou procédures » comme « lectures seules » : une procédure stockée peut modifier des données. Rappel des notions SQL dans Les types d’instructions SQL.

3. Diagnostiquer #

Des motifs fréquents.

Symptômes et causes #

Ce que l’on voitCause probable
des dizaines d’appels identiques par requêteproblème N+1 (boucle d’ORM)
les transactions pèsent lourd dans le temps totalun COMMIT par ligne, disque lent côté base
les modifications ralentissent aux heures de pointeverrous, contention sur les mêmes lignes
temps d’attente avant la requêtepool de connexions saturé
Bonne pratique : Partez de la requête utilisateur lente, ouvrez sa trace distribuée et regardez la part de la base de données : c'est plus fiable que de partir de la requête SQL la plus lente, qui peut être rare.

Requête DQL sur les spans #

Sur la nouvelle plateforme, les appels de base de données sont des spans stockés dans Grail :

fetch spans, from: -1h
| filter isNotNull(db.system) and span.kind == "client"
| summarize appels = count(), p90 = percentile(duration, 90), by: { db.system, db.statement }
| sort p90 desc
| limit 20
Selon la version : Les noms d'attributs suivent les conventions OpenTelemetry : selon la version, le texte de la requête est dans db.statement ou db.query.text. Vérifiez dans un notebook avant de construire un tableau de bord.

Articles liés

L'app QuickStart de Dynatrace : obtenir ses premières données en quelques minutes

Découvrir l'app QuickStart : ajouter des données avec Auto Discovery ou une tuile dédiée, lire les Findings, …

L'app Investigations de Dynatrace : mener une enquête sur les données de Grail

Découvrir l'app Investigations : requêtes DQL, extraction avec DPL Architect, enrichissement, arbre de requêt…

Site Reliability Guardian dans Dynatrace

Valider automatiquement une mise en production avec des objectifs de disponibilité, de performance et de capa…

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !