On peut savoir le nombre d'insert, delete, update depuis les dernières stats.
Je ne garantis pas la fiabilité à 100% .. J'entends par là, que si des stats sont lancées par la procédure, tu ne verras pas les impacts sur les tables statées.
Et aussi que ceci ne fonctionne que sur les tables monitorées. "tables with the MONITORING attribute"
Ce code te donne les insert/delete/update sur les tables depuis leur dernière analyse.
1 2 3 4 5 6 7
| SELECT m.table_owner, m.table_name, m.inserts, m.updates, m.deletes,
m.TIMESTAMP AS last_modif, m.truncated, t.num_rows, t.BLOCKS, t.last_analyzed,
TRUNC(GREATEST(inserts, updates, deletes) * 100 / DECODE(t.num_rows, 0, NULL, t.num_rows)) AS Pct
FROM all_tab_modifications m, all_tables t
WHERE m.table_name = t.table_name
AND m.table_owner = t.owner
ORDER BY GREATEST(inserts, updates, deletes) DESC |
Attention ce n'est pas en temps réel, faut faire un flush pour avoir les infos actualisées.
dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
Donc,
1/ Arrêter les stats (si elles sont lancées automatiquement par cron)
2/ dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
3/ Tu lances la requête sur all_tab_modifications et tu exportes le résultat
4/ Tu lances ta procédure
5/ dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
6/ Tu relances la requête sur all_tab_modifications et tu exportes le résultat
7/ Tu compares les 2 résultats.
8/ Tu réactives les stats
Bien sur, si quelqu'un d'autre modifie une ligne pendant ton traitement, tu le verras.
Partager