I upgraded an oracle 8i database to 10g. "Compile invalid objects" is very very slow comparing to when it was an 8i database. How can I solve this problem?
Maybe there is a problem with the performance of the dictionary views? The Compile Invalid Objects tool needs to determine the dependencies of all invalid objects, so if the performance of sys.all_dependencies is poor, the performance of this tool will be poor as well.
have you increased shared_pool_size, 10g needs a lot more of it then 8i.
i am not sure (Rule based optimizer is disabled in 10g) but sometimes it help to give a rule hint for the dictionary query.
you could also generate a trace of the recompiling session, and to see where the elapsed time is going, best is to acrivate trace with extended trace 10046 event; with this oracle can report waiting events. (tkprof option waits=yes)
if query is slow you could try to conatct metalink and post your performance issue.
We're dealing exactly with the same problem. The shared_pool_size was already significantly raised by our administrator.
The first (initial) query needs up to 60 seconds to show any invalid object.
Is there a solution to this problem in the meantime?
I am not quite sure why this query uses a filter for object_type as we want to query invalid objects. In fact this query takes much longer (10 seconds) compared to
select object_name, owner, object_type
from sys.all_objects
WHERE status 'VALID'
order by object_name
(0,5 seconds).
But nevertheless your query is much faster than the dialog "compile invalid objects". Using your query for each possible object_type would explain the long running quest for invalid objects, but would make no sense as there is one query to retrieve all candidates.