J'ai eu un article précédent sur les routines définies par l'utilisateur avec DBMS_STATS. Après quelques recherches supplémentaires, j'ai déterminé comment cela fonctionnait. J'ai des données dans ma base de données qui sont stockées dans un type défini par l'utilisateur. Si vous avez un type défini par l'utilisateur, vous pouvez associer votre routine de collecte de statistiques définie par l'utilisateur à l'interface Oracle Data Cartridge Interface (ODCI). La routine ODCIStatsCollect est appelée automatiquement lorsque DBMS_STATS est appelé sur la table qui contient ce type défini par l'utilisateur.
Dans mon cas, j'ai suivi l'utilisation élevée du processeur dans une instruction SQL que le fournisseur d'applications tierces a insérée dans sa routine ODCIStatsCollect. À ce stade, cela devient simplement un problème de réglage des requêtes. Comment pouvons-nous écrire la requête pour qu'elle utilise moins de CPU ? Après avoir examiné le problème, j'ai pensé que le moyen le plus simple était de supprimer la sous-requête et de placer les résultats dans une table temporaire globale. Ensuite, faites en sorte que le reste de la requête se joigne au GTT au lieu de se joindre à la sous-requête elle-même. Ce faisant, l'utilisation du processeur a été considérablement réduite. J'ai envoyé le correctif au fournisseur de l'application et j'attends de voir ce qu'il dit.