9iDBMS_STATS包收集统计信息

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

作者: 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的总裁。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航