学无止境
分类: 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;
/