Bonjour,
Dans le cadre d'un stage, je dois réaliser du monitoring sur plusieurs bases de données. Une de leurs demandes étant d'avoir un historique intégral des requêtes qui sont exécutées (avec le temps d'exécution, les ressources consommées, ...) sur une base de données.
Les seules choses que j'ai pu trouver dans mes recherches qui se rapprochent le plus de leur besoin est :
Vue dynamique v$sql
Les données des requêtes :
- sont de type SELECT, INSERT, UPDATE, DELETE
- sont agrégées par SQL_ID : L'exécution d'une même requête
- sont monitorées sur le nombre d'EXECUTIONS et l'ELAPSED_TIME passés pour l'agrégation des exécutions. Il est possible de remonter la moyenne de temps d'exécution d'une requête
- sont tronquées sur 100 caractères dans SQL_TEXT
Les informations complémentaires sont :
- Le nom du schéma PARSING_USER_NAME et PARSING_USER_ID (lien vers DBA_USERS)
- Le nom du MODULE qui permet de différencier ce qui est utilisé depuis l'application de ce qui est exécuté depuis SQLDeveloper
- La dernière exécution de la requête LAST_LOAD_TIME
Conclusion
Cette vue dynamique ne me permet pas d'avoir un réel historique puisque :
- elle ne possède que des requête de type: SELECT, INSERT, UPDATE, DELETE
- elle ne garde pas en mémoire chaque instance d'une requête : elle n'indique que la dernière fois qu'une même requête à été chargée
- si une requête est utilisée plusieurs fois dans un délai très court sans qu'une autre requête soit faite en parallèle alors la vue v$sql ne la garde pas en mémoire (du moins ne change pas la date du dernier chargement).
Vue dynamique v$active_session_history
Les données des requêtes :
- sont de tout type (SELECT, INSERT, UPDATE, ...) et définies dans SQL_OPNAME
- sont agrégées par SAMPLE_ID
- sont identifiables par SQL_ID
- sont issues de v$session (si session active)
Les informations complémentaires sont :
- Le nom de l'utilisateur peut être récupérable avec USER_ID (lien avec dba_user)
- La date et l'heure à laquelle la session était active: SAMPLE_TIME
- Le nom du MODULE et de la MACHINE permettent de spécifier l'utilisateur
Conclusion
Cette vue dynamique ne me permet pas d'avoir un réel historique puisque :
- elle ne récupère les données que sur les sessions actives à un instant T. Conséquence: Toutes les 'petites' requêtes ne sont pas enregistrées
- pour chaque temps de rafraîchissement (1s), une ligne est écrite pour chaque session active (même si elle l'était déjà à la seconde précédente). Conséquence: On ne peut pas savoir si c'est la même instance d'une requête ou une nouvelle.
Les autres pistes (non concluantes) que j'ai pu chercher sont :
Rapport AWR: Uniquement des statistiques, pas d'historique réel + non automatisable pour du monitoring
CDC (Change Data Capture) : Soit sur la vue v$sql (impossible sur une vue au final). Soit sur toutes les tables (Beaucoup trop de tables pour être viable)
Aspirer les données sur le réseau / application: Pas d'information sur le temps d’exécution et autres...
Je commence a être à court d'idées. Etant plutôt novice, j'ai surement du passer à coté d'une spécificité ou d'un autre outil. J'espère que vous saurez m'éclairer.
Merci d'avance !
Partager