It's quite tricky to decide what ANALYZE is doing, since it uses back-door methods to visit the data, but if you enable sql_trace for dbms_stats, you will find that the whole thing is done through SQL. The extra time could come from: some of the dictionary-related SQL that checks for things like 'is this index monitored', 'is this table monitored'. some of the dynamic sampling that takes place on the data dictionary before the above SQL is executed the extra tablescans that take place (select count(*)) to check whether to repeat the stats collection query with a higher sample because the sample used was unsafe the 100% compute of statistics on indexes that seems to take place sometimes even when the sample percent is only (say) 20. and so on... The figure of 3 to 4 is probably not "typical". If your ANALYZE time is low, then a large fraction of the extra time may be a fairly static overhead due to the data dictionary activity. But the extra 'per table' cost could make a factor of 2 quite likely. People frequently expend too much effort generating statistics - if you've got the time window it doesn't usually do any damage; if you haven't then you need to know your data better, and avoid gathering statistics too frequently, or with too high a percentage. Regards Jonathan Lewis http://www.jlcomp.demon.co.uk http://www.jlcomp.demon.co.uk/faq/ind_faq.html The Co-operative Oracle Users' FAQ http://www.jlcomp.demon.co.uk/seminar.html Optimising Oracle Seminar - schedule updated May 1st ----- Original Message ----- From: "Charlotte Hammond" <charlottejanehammond@xxxxxxxxx> To: "ORACLE-L" <oracle-l@xxxxxxxxxxxxx> Sent: Wednesday, May 19, 2004 6:18 PM Subject: Performance of DBMS_STATS vs ANALYZE Hi All, Could I ask people's experience with DBMS_STATS with regard to performance. When I run this: DBMS_STATS.GATHER_SCHEMA_STATS( OWNNAME=>'myschema', ESTIMATE_PERCENT=>'<<n>>', CASCADE=>TRUE); It is anywhere between 3 and 4 times slower than a script containing ANALYZE TABLE myschema.<table> ESTIMATE STATISTICS SAMPLE <<n>> PERCENT FOR TABLE FOR ALL INDEXES; for all the tables in my schema. There are approx. 1000 tables, many of which are empty. I have tried this on 9.2.0.4 and 9.2.0.5 with similar results. Is this typical? Thanks - Charlotte --------------------------------- Do you Yahoo!? SBC Yahoo! - Internet access at a great low price. ---------------------------------------------------------------- Please see the official ORACLE-L FAQ: http://www.orafaq.com ---------------------------------------------------------------- To unsubscribe send email to: oracle-l-request@xxxxxxxxxxxxx put 'unsubscribe' in the subject line. -- Archives are at //www.freelists.org/archives/oracle-l/ FAQ is at //www.freelists.org/help/fom-serve/cache/1.html ----------------------------------------------------------------- ---------------------------------------------------------------- Please see the official ORACLE-L FAQ: http://www.orafaq.com ---------------------------------------------------------------- To unsubscribe send email to: oracle-l-request@xxxxxxxxxxxxx put 'unsubscribe' in the subject line. -- Archives are at //www.freelists.org/archives/oracle-l/ FAQ is at //www.freelists.org/help/fom-serve/cache/1.html -----------------------------------------------------------------