Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1115668
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2013-12-04 15:38:49

从ORACLE 10G开始,ORACLE增强了CBO,收集统计信息,更有效的生成准确的执行计划。
 
10g版本中,默认有一个数据库schedular task,可以自动收集统计信息。名为GATHER_STATS_JOB
可以查看视图看到该job的情况
SELECT job_name,program_name,enabled,state,last_start_date,last_run_duration FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_STATS_JOB';
如果想要将其禁止,可以使用以下命令:

BEGIN
DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
END;
/

最常用的分析是对表进行统计分析,并且级联分析索引,例如:
 
begin
dbms_stats.gather_table_stats (
 ownname          => 'TEST',
 tabname          => 'EMP',
 estimate_percent => dbms_stats.auto_sample_size,
 method_opt       => 'for all columns size auto',
 cascade          => true,
 degree           => 5
);
end;
/

关于统计收集,还有一些其他用法:
1.删除收集信息
 
BEGIN
DBMS_STATS.LOCK_TABLE_STATS('OE','ORDERS');
END;
/
 
2.锁定分析数据
 
BEGIN
DBMS_STATS.DELETE_TABLE_STATS('OE','ORDERS');
END;
/
 
3.导出导入分析信息
 
begin
DBMS_STATS.create_stat_table(
ownname => 'TEST',
stattab => 'EMP_STAT_TAB',
tblspace => 'USERS');
end;
/

select * from EMP_STAT_TAB;
 
begin
DBMS_STATS.EXPORT_TABLE_STATS(
ownname => 'TEST',
tabname => 'EMP',
stattab => 'EMP_STAT_TAB',
cascade => true);
end;
/

begin
DBMS_STATS.IMPORT_TABLE_STATS(
ownname => 'TEST',
tabname => 'EMP',
stattab => 'EMP_STAT_TAB',
cascade => true,
no_invalidate => true);
end;
/


 

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