Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

2

主题
1#
发表于 2013-1-18 13:33:15 | 查看: 5233| 回复: 7
    网上看了一些关于analyze和dbms_stat搜集统计信息的文章。可以看懂,但要自己去收集数据库统计信息变化为10%的操作时。不知到从哪里下手。。。。
2#
发表于 2013-1-18 13:40:36
取一下目前的行数和之前dba_tables中的行数对比一下,超过10%的
dbms_stats.gather_table_stats

回复 只看该作者 道具 举报

3#
发表于 2013-1-18 13:42:35
查 DBA_TAB_MODIFICATIONS 视图,这个视图记录表的inserts,updates,deletes操作及最后一次修改时间

回复 只看该作者 道具 举报

4#
发表于 2013-1-18 13:43:16
嗯!但要对dml操作分开统计怎么办?

回复 只看该作者 道具 举报

5#
发表于 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 函数随机去的采样数据。

回复 只看该作者 道具 举报

6#
发表于 2013-1-18 13:49:08
,method_opt=>'FOR ALL INDEXED COLUMNS' 这个参数好象议论的比较多

回复 只看该作者 道具 举报

7#
发表于 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等操作。

  1. SQL> create table t as select * from dba_objects where rownum<100;

  2. 表已创建。

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

  4. PL/SQL 过程已成功完成。

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

  7. TABLE_NAME                     STA
  8. ------------------------------ ---
  9. T                              NO  --统计信息是新鲜的

  10. SQL> insert into t select * from t;

  11. 已创建99行。

  12. SQL> commit;

  13. 提交完成。

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

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

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

  20. PL/SQL 过程已成功完成。

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

  22. TABLE_NAME                     PARTITION_NAME
  23. ------------------------------ ------------------------------
  24. SUBPARTITION_NAME                 INSERTS    UPDATES    DELETES TIMESTAMP
  25. ------------------------------ ---------- ---------- ---------- --------------
  26. TRU DROP_SEGMENTS
  27. --- -------------
  28. T
  29.                                        99          0          0 26-6月 -12    --99表明插入了99行
  30. NO              0


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

  33. TABLE_NAME                     STA
  34. ------------------------------ ---
  35. T                              YES  -- 此表的统计信息标记为 过时
复制代码

点评 回复 只看该作者 道具 举报

FirstBlood 发表于 2013-1-18 18:27
嗯!谢谢你的实例,让我对oracle统计信息收集更近了一步!
8#
发表于 2013-1-18 16:43:59
psufnxk2000 发表于 2013-1-18 14:17
缺少统计信息的对象很容易理解,就是尚未收集过统计信息的对象,如新创建的表和索引等。统计信息已过时的对 ...

好同志!

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-20 03:18 , Processed in 0.055163 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部