要用CBO,但是统计太麻烦.请指点!

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
要用CBO必须要对表有分析,但是如果是比较大的生产库,你对表做analyze或用dbms_stats包来收集统计信息这个工作量太大了,好长时间都没有做完,难道除了这条路优化器就无法走CBO了吗?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
可以部分分析
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
1、可以安排在机器比较空闲的时候运行,做个JOB即可。
2、可以只分析表的部分数据,而不是全部分析。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
生成一个脚本就可以拉,定期运行,运行最好是空闲时候运行,要花些时间,不过根本不用人监控阿,何来工作量大?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
用 dbms_stats 不需要生成脚本。这是ORACLE推荐的方法。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
我直接用analyze table sdsd compute .......
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
一点不麻烦,大表可以分析部分。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 lfree 发布
[B]一点不麻烦,大表可以分析部分。 [/B]

谢谢楼上几位,还有两个问题不太明白,请指点!
1.如何对表数据进行部分的分析?
2.如果是部分分析,那么优化器生成的执行计划能准确吗?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
1、analyze table [table] ESTIMATE STATISTICS SAMPLE 5 PERCENT;
取5%的记录作为样本,进行分析。
2、oracle 参考大全推荐分析15%,也有些书推荐5%,看你能承受的时间了。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
1.如果可以某个sql语句的执行计划是最优的,可以用存储大纲把执行计划固化起来.那么统计信息均可以忽略.
2.对于数据变化比较大的表,通过dbms_stats统计信息:
比如统计表信息:
exec dbms_stats.gather_table_stats(OWNNAME=>'SIDB',TABNAME=>'[table]',ESTIMATE_PERCENT=>15,DEGREE=>8,CASCADE=>TRUE);
比如统计索引信息:
exec dbms_stats.gather_index_stats(OWNNAME=>'',INDNAME=>'',ESTIMATE_PERCENT=>15,DEGREE=>8);
比如统计用户信息:
exec dbms_stats.gather_schema_stats(OWNNAME=>'',ESTIMATE_PERCENT=>5,DEGREE=>8,CASCADE=>TRUE);
note:用degree指定并行度可以有效的加快统计的速度.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行