ITPub博客

首页 > Linux操作系统 > Linux操作系统 > exec dbms_stats.gather_schema_stats 手动优化统计[final]

exec dbms_stats.gather_schema_stats 手动优化统计[final]

原创 Linux操作系统 作者:tolywang 时间:2009-04-23 05:41:06 0 删除 编辑


Oracle10g或以上版本。

exec dbms_stats.gather_schema_stats(ownname => 'DFMS', ptions => 'GATHER AUTO',
estimate_percent => dbms_stats.auto_sample_size,  -- -- 11g取样值比较大,可以使用samplesize,10g好像是5~20%,可以根据需要调整 
method_opt => 'for all columns size auto', -- 一般第一次收集的时候使用 'for all columns size 1' 删除所有列上的直方图,之后可以使用 size auto , 逐渐调整,稳定后推荐使用 'for all columns size repeat'
cascade=>TRUE,
degree => 8 ) ;


转帖自: http://www.dbform.com/html/category/oracledb/page/6
...

收集直方图信息是耗费资源的,因此SKEWONLY不推荐使用。实际上经历了这么多版本,SKEWONLY的算法一直很奇怪,我没有找到一份文档描述Oracle到底是如何定义SKEWONLY的收集凭据的。
 
method_opt=>’for columns size auto [column_name]‘
 什么是AUTO?再看一下Oracle官方文档中的定义。
 

Oracle determines the columns to collect histograms based on data distribution and the workload of the columns.
 
也就是在SKEWONLY的基础上额外增加了workload限制,何谓workload?实际上就是我们前面提到的是否在where条件中出现。如果一个列从来没有出现在where条件中,Oracle就认为是没有workload的,那么即使此列上的数据被认为是SKEW的,也不会收集直方图信息,只有出现过至少一次,Oracle才会收集。[via Comment by Dbsnake] 该workload信息可以从数据字典COL_USAGE$中获得,在数据字典中存在的列才是有workload的。


因此AUTO也是有问题的,N2字段上的直方图信息仍然会收集,这是我们不需要的。注意,在Oracle10g之后的自动统计信息收集任务中,默认的是FOR ALL COLUMNS SIZE AUTO,这是很有问题的,因此即使是不禁用自动统计信息收集,也应该通过DBMS_STATS.SET_PARAM存储过程(在11gR2版本中被SET_GLOBAL_PREFS存储过程替代)来修改该默认值。通常我们经历的执行计划莫名其妙改变,很多场合都是因为Oracle10g之后的这个统计信息自动收集任务导致的。关于自动统计信息收集,可以参看:Automatic Statistics Gathering
method_opt=>’for columns size repeat [column_name]‘
 只有在已有直方图信息的列上再次收集直方图信息。这是我们推荐设置为默认值的方式。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/35489/viewspace-629066/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    14695628