在Oracle 数据库中,我们经常需要去手工分析表和索引,还有某个模式下所有的表和索引等等。oracle 提供了两种分析方法,分别是dbms_stats 包和analyze 命令。这些是我们在日常项目管理中的真实使用的方法,供参考。
成都创新互联公司专注于且末网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供且末营销型网站建设,且末网站制作、且末网页设计、且末网站官网定制、小程序开发服务,打造且末网络公司原创品牌,更为您提供且末网站排名全网营销落地服务。
在10g 中分析某一个用户下所有的对象,如user_miki 用户
Sql代码 收藏代码
sys.dbms_stats.gather_schema_stats(ownname = 'user_miki',estimate_percent = 30,method_opt = 'FOR ALL INDEXED COLUMNS SIZE AUTO',cascade = true,options = 'GATHER');
这是我在项目中分析一个用户所有对象的分析方法,取样比例为30% ,分析所有索引字段,生成柱形图,并且也分析索引。
(miki西游 @mikixiyou 文档,原文链接: )
在10g 中分析某一个用户下某一个表及其索引,如user_miki 用户下info 表和它的索引
Sql代码 收藏代码
execute dbms_stats.gather_table_stats(ownname = 'user_miki',tabname = 'info',estimate_percent = 30,method_opt = 'for all indexed columns size auto');
这是我在项目中单独分析一个用户中一张表的分析方法,取样比例为30% ,分析所有索引字段,生成柱形图,并且也分析索引。
我们在google 时,还能看到使用analzye 命令分析表的方法。
Sql代码 收藏代码
analyze table table_name compute statistics;
这个会将索引和表一起分析;
Sql代码 收藏代码
analyze table table_name compute statistics for table;
这个仅分析表;
analyze table table_name compute statistics for all columns;
这个仅分析表,和上面所有的字段,生成柱形图
analyze table table_name compute statistics for all indexed columns;
这个仅分析表,和上面所有建立索引的字段,生成柱形图
在9i 中,我们常常使用analyze 方法,在10g 以后,就改为dbms_stats.gather_schema_stats 类似的包来分析数据库对象了。
10g 的分析函数包比9i 的analyze 方法更灵活一些。
在10g 中,会有个系统的计划任务,每天10 点和周末两天都自动分析新的数据库对象和它认为统计信息已经过期的数据库对象。这个分析结果有时候不靠谱。
因此,我都采用10g 中提供的dbms_stats.gather_schema_stats 方法作为补充,设置一个计划任务定期去分析业务用户下所有数据库对象。
Sql代码 收藏代码
variable job number;
begin
sys.dbms_job.submit(job = :job,
what = 'sys.dbms_stats.gather_schema_stats(ownname = ''USR_MIKI'',estimate_percent = 30,method_opt = ''FOR ALL INDEXED COLUMNS SIZE AUTO'',cascade = true,options = ''GATHER'');',
next_date = to_date('16-12-2012 00:56:24', 'dd-mm-yyyy hh24:mi:ss'),
interval = 'sysdate+7');
commit;
end;
/
例如,设置为每周六运行一次。
1。如果你的表经常由几千万变成几百万,又变成几千万那么需要制定分析计划定期表分析,同时可以一并分析索引,计算索引中数据的分布情况,这样CBO会选择更加准确的执行计划。
2。如果表结构变化了也要做下,也就是经常对表做dml就需要分析,现在推荐使用dbms_stats包。
analyze table 表名 compute statistics
analyze index 索引ID compute statistics
如果想分析所有的表名和index名可以从视图user_tables,user_indexes取得相关的信息,自动生成SQL命令