Chinaunix首页 | 论坛 | 博客
  • 博客访问: 735055
  • 博文数量: 803
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 5015
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-28 10:29
文章分类

全部博文(803)

文章存档

2011年(1)

2008年(802)

我的朋友

分类:

2008-10-29 11:49:57


  作者: Builder.com
  
  在9i中,增强了SQL的基于开销的优化器(CBO),从而在决定SQL语句的最优执行计划时采用I/O和CPU使用率统计信息。
   
  使用新的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的总裁。
  
【责编:admin】

--------------------next---------------------

阅读(575) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~