Имах предишна публикация за потребителски дефинирани рутини с DBMS_STATS. След още малко ровене установих как работи това. Имам някои данни в моята база данни, които се съхраняват в тип, определен от потребителя. Ако имате дефиниран от потребителя тип, можете да свържете вашата рутина за събиране на дефинирана от потребителя статистика с интерфейса на Oracle Data Cartridge Interface (ODCI). Подпрограмата ODCIStatsCollect се извиква автоматично, когато DBMS_STATS се извика в таблицата, която съдържа този дефиниран от потребителя тип.
В моя случай проследих високото използване на процесора до един SQL израз, който доставчикът на приложения от трета страна постави в своята рутина ODCIStatsCollect. В този момент това просто се превръща в проблем с настройката на заявката. Как можем да напишем заявката, така че да използва по-малко CPU? След като разгледах проблема, реших, че най-лесният начин е да извадя подзаявката и да сложа резултатите в глобална временна таблица. След това накарайте останалата част от заявката да се присъедини към GTT, вместо да се присъедини към самата подзаявка. По този начин използването на процесора беше драстично намалено. Изпратих поправката на доставчика на приложението и чакам да видя какво ще кажат.