首页 > 开发 > 综合 > 正文

9iDBMS_STATS包收集统计信息

2024-07-21 02:35:24
字体:
来源:转载
供稿:网友

  作者: Builder.com
  
  在9i中,Oracle增强了SQL的基于开销的优化器(CBO),从而在决定SQL语句的最优执行计划时采用I/O和CPU使用率统计信息。
   
  Oracle使用新的Oracle9i DBMS_STATS包来收集这些信息。然而,这个包的功能非常有限,而且因为大多数系统有多种操作模式,所以说在考虑Oracle收集系统统计信息的时候你必须格外小心。
  
  典型地,假如选择使用DBMS_STATS,最好的办法是在数据库进行某种类型的处理时进行采样。例如,假设我们有一个白天运行于OLTP模式下而晚上运行于决策支持系统(DSS)模式下的数据库。
  
  在下面的例子中,白天Oracle在运行于OLTP模式下时收集统计信息;而在晚上,Oracle在运行批处理操作时收集统计信息。
  
  -- Create the table to hold the stats
  dbms_Stats.Create_Stat_Table (
   ownname => 'PROD',
   stattab => 'dbastats',
   tblspace => 'perfstat');
  
  -- Run during the day; gather stats for when the system is in OLTP mode
  BEGIN
   dbms_Stats.Gather_System_Stats(
    interval => 300,
    stattab => 'dbastats',
    statid => 'OLTP');
  END;
  /
  
  -- Start at night to gather stats during batch Operations
  BEGIN
   Dbms_Stats.Gather_System_Stats(
    interval => 300,
    stattab => 'mystats',
    statid => 'DSS');
  END;
  /
  
  在已经收集了系统统计信息的采样之后,我们就可以在系统改变处理模式的时候动态地切换系统统计。
  
  execdbms_stats.import_system_stats('dbastats','OLTP');
  exec dbms_stats.import_system_stats('dbastats','BATCH');
  
  当然,这个特性对于双峰Oracle数据库来说是很基本的,因为对于这种数据库的处理特点变化很大。而对于查询模式恒定的均匀型数据库来说,这个特性与你自己的查询执行计划区别不大。
  
  ---------------------------------------------------
  
  本文作者: Donald Burleson是有23年经验的数据库治理员,他出版过14本数据库专著,发表论文达100多篇。Donald Burleson是Oracle Internals的主编和Burleson Oracle Consulting的总裁。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表