我们知道从oracle8i开始﹐analyze语句和dbms_stats包都可以收集相关对象(Tables﹑Indexes﹑Clusters and Materialized Views)的statistics。那哪些statistics的收集应该使用analyze语句﹐哪些statistics的收集应该使用dbms_stats包呢﹖
对于使用哪个去收集statistics﹐应该把一个原则﹐凡是与cost-based optimizer相关的statistics﹐都应通过dbms_stats包收集。与cost-based optimizer无关的statistics(如empty blocks﹐average space等)都应通过analyze语句去收集。
之所以要用dbms_stats包去替代analyze收集优化器statistics﹐是因为dbms_stats包能收集并行statistics和分区对象的全局statistics。
当然analyze语句在其它方面的statistics收集﹐是dbms_stats所无法取代的﹐如﹕
1. 收集在freelist上的blocks信息
2. 检验存储格式的合法性
analyze table bk_test_t validate structure cascade online;
3. 识别表或cluster的行迁移与行链接
为了能使用analyze….list chained rows语句识别行迁移与行链接﹐必须先在执行analyze语句所在的schema内执行$ORACLE_HOME/rdbms/admin/utlchain.sql(或utlchn1.sql)脚本建立chained_rows表。在chained_rows建立之后﹐就可以执行下面的语句﹕
analyze table bk_test list chained rows into chained_rows;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/33600/viewspace-266418/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/33600/viewspace-266418/