Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle11g 如何在收集统计信息时为方法_opt指定异常_Oracle11g - Fatal编程技术网

Oracle11g 如何在收集统计信息时为方法_opt指定异常

Oracle11g 如何在收集统计信息时为方法_opt指定异常,oracle11g,Oracle11g,我们的数据库设置为收集模式统计信息,如下所示 method_opt => 'for all columns size auto' 问题是,这种方式也为不应该生成直方图的列指定直方图。有没有办法为这些列设置异常(同时保留其他列的自动大小) 理由:我们的一些(索引)列是VARCHAR2(100),而前50个字符几乎相同-前50个字符之间的不同值不到10个。收集列统计信息时,将生成直方图。但是直方图生成只分析VARCHAR2列的前30个字符,这导致了完全错误的直方图。(事实上,这些值几乎是均匀

我们的数据库设置为收集模式统计信息,如下所示

method_opt => 'for all columns size auto'
问题是,这种方式也为不应该生成直方图的列指定直方图。有没有办法为这些列设置异常(同时保留其他列的自动大小)

理由:我们的一些(索引)列是VARCHAR2(100),而前50个字符几乎相同-前50个字符之间的不同值不到10个。收集列统计信息时,将生成直方图。但是直方图生成只分析VARCHAR2列的前30个字符,这导致了完全错误的直方图。(事实上,这些值几乎是均匀分布的。)


编辑:我的想法是使用类似“所有列的大小自动调整,但列(ECID)的大小为1”的内容。但我不知道这是否可行,方法的语法对我来说不是很清楚。

您可以尝试使用skewonly选项,该选项将仅对倾斜数据生成直方图:

method_opt => 'for all columns size skewonly'

您可以尝试使用skewonly选项,该选项将仅对倾斜数据生成直方图:

method_opt => 'for all columns size skewonly'

重复一下怎么样?与REPEAT一样:只在已经有直方图的列上收集直方图

那么
REPEAT
呢?重复:仅在已经有直方图的列上收集直方图

最终解决方案是使用

exec dbms_stats.set_table_prefs('schema','table','METHOD_OPT',''for all columns size auto for columns size 1 ECID');
然后使用gather_schema_stats正常收集统计信息。这样我就可以绕过上面提到的聚集模式统计方法的限制。当前首选项可通过以下方式查看:

select * from dba_tab_stat_prefs;

最终的解决办法是使用

exec dbms_stats.set_table_prefs('schema','table','METHOD_OPT',''for all columns size auto for columns size 1 ECID');
然后使用gather_schema_stats正常收集统计信息。这样我就可以绕过上面提到的聚集模式统计方法的限制。当前首选项可通过以下方式查看:

select * from dba_tab_stat_prefs;

我认为这不会有帮助,因为即使统计生成器只根据列的前30个字符来决定,从而决定列是倾斜的,需要柱状图。我认为这不会有帮助,因为即使在这种情况下,统计生成器也只能根据列的前30个字符来决定,从而决定列是倾斜的并且需要直方图。方法\u opt=>“所有列的大小自动为列的大小1 ECID”完全符合我的需要,但它只适用于聚集\u table\u stats,不适用于聚集\u架构\u统计信息。方法\u opt=>“适用于所有列大小自动适用于列大小1 ECID”完全符合我的需要,但它仅适用于聚集\u表\u统计信息,而不适用于聚集\u架构\u统计信息。