FirstBlood 发表于 2013-1-18 13:33:15

求oracle用analyze和dbms_stat数据信息统计具体实例。

    网上看了一些关于analyze和dbms_stat搜集统计信息的文章。可以看懂,但要自己去收集数据库统计信息变化为10%的操作时。不知到从哪里下手。。。。

fiozhang 发表于 2013-1-18 13:40:36

取一下目前的行数和之前dba_tables中的行数对比一下,超过10%的
dbms_stats.gather_table_stats

tom0732 发表于 2013-1-18 13:42:35

查 DBA_TAB_MODIFICATIONS 视图,这个视图记录表的inserts,updates,deletes操作及最后一次修改时间

FirstBlood 发表于 2013-1-18 13:43:16

嗯!但要对dml操作分开统计怎么办?

lunar 发表于 2013-1-18 13:43:30

使用参数 estimate_percent参数设置,例如:
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'CLPMAPP',TABNAME => 'CORPORATION_CUSTOMER',DEGREE => 5,method_opt=>'FOR ALL INDEXED COLUMNS', CASCADE => TRUE,ESTIMATE_PERCENT =>10);


这里的取值,是根据sample 函数随机去的采样数据。

26856649 发表于 2013-1-18 13:49:08

,method_opt=>'FOR ALL INDEXED COLUMNS' 这个参数好象议论的比较多

psufnxk2000 发表于 2013-1-18 14:17:17

缺少统计信息的对象很容易理解,就是尚未收集过统计信息的对象,如新创建的表和索引等。统计信息已过时的对象在10g中定义为至少10%的数据行被更改过的对象。那么,Oracle是如何知道一个对象如表的数据更改超过了10%了呢?答案 是表监控(Table Monitoring),当STATISTICS_LEVEL参数为TYPICAL或ALL时,Oracle会启动表监控,将对表的更改操作记录到数 据字典中,在收集统计信息时查询这些数据字典来决定某个表的统计信息是否已过时。我们可以通过查询数据字典视图all_tab_modifications,dba_tab_modifications或user_tab_modifications来查看某个表的更改记录,包括insert,update,delete,truncate,drop segement等操作。
SQL> create table t as select * from dba_objects where rownum<100;

表已创建。

SQL> exec dbms_stats.gather_table_stats('SONG','T');      --收集表的统计信息

PL/SQL 过程已成功完成。

SQL> select TABLE_NAME, STALE_STATS from  user_tab_statistics where table_name =
'T';

TABLE_NAME                     STA
------------------------------ ---
T                              NO  --统计信息是新鲜的

SQL> insert into t select * from t;

已创建99行。

SQL> commit;

提交完成。

SQL> select TABLE_NAME, STALE_STATS from  user_tab_statistics where table_name =
'T';

TABLE_NAME                     STA
------------------------------ ---
T                              NO  --插入之后还是新鲜的,因为oracle内部收集的延时

SQL> exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO; --刷新上面提到的 延时收集

PL/SQL 过程已成功完成。

SQL> select * from user_tab_modifications where table_name='T';

TABLE_NAME                     PARTITION_NAME
------------------------------ ------------------------------
SUBPARTITION_NAME                 INSERTS    UPDATES    DELETES TIMESTAMP
------------------------------ ---------- ---------- ---------- --------------
TRU DROP_SEGMENTS
--- -------------
T
                                       99          0          0 26-6月 -12    --99表明插入了99行
NO              0


SQL> select TABLE_NAME, STALE_STATS from  user_tab_statistics where table_name =
'T';

TABLE_NAME                     STA
------------------------------ ---
T                              YES  -- 此表的统计信息标记为 过时

shunzi 发表于 2013-1-18 16:43:59

psufnxk2000 发表于 2013-1-18 14:17 static/image/common/back.gif
缺少统计信息的对象很容易理解,就是尚未收集过统计信息的对象,如新创建的表和索引等。统计信息已过时的对 ...

好同志!
页: [1]
查看完整版本: 求oracle用analyze和dbms_stat数据信息统计具体实例。