暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 传递给DBMS_STAT的参数

askTom 2013-10-09
212

问题描述

嗨,汤姆,

我想在一个大表上收集统计信息,因此我想编写一个过程,根据存储在配置表中的参数来收集统计信息。
以下版本是否会产生相同的结果?

版本1 :
==========
过程收集统计信息
(
所有者IN varchar2 ,
table_name IN VARCHAR2 ,
part_name IN varchar2 ,
百分比数字,
不使BOOLEAN默认值为TRUE ,
varchar2中的粒度默认为“Auto”,
in_方法_opt IN varchar2默认值“FOR所有列大小AUTO”
)是
w_%数字;
w_度数;
开始
DBMS_STATS.SET_ TABLE_PREFS (所有者, table_name,'INCREMAL','TRUE') ;
w_% := DBMS_STATS.TO_ESTIATE_PERCOR_TYPE ('DBMS_STATS.AUTO_SAMLE_S大小') ;
w_度:= DBMS_STATS.TO_DEGREE_TYPE ('DBMS_STATS.AUTO_DEGREE') ;

dbms_stats.gather_table_stats
(
所有者,
table_name ,
粒度=>上(粒度) ,
部件名称=>部件名称,
级联=>真,
估计百分比=>w_percent ,
no_in无效=>no_in无效,
方法_opt=>in_方法_opt ,
度=>w_°
);

例外
当别人那么
areamer_appal_错误(-20001,'遇到错误-'||SQLCODE||'-错误-'||SQLERRM) ;
结束;

版本2 :
==========
过程收集统计信息
(
所有者IN varchar2 ,
table_name IN VARCHAR2 ,
part_name IN varchar2 ,
百分比数字,
不使BOOLEAN默认值为TRUE ,
varchar2中的粒度默认为“Auto”,
in_方法_opt IN varchar2默认值“FOR所有列大小AUTO”
)是
w_%数字;
w_度数;
开始
DBMS_STATS.SET_ TABLE_PREFS (所有者, table_name,'INCREMAL','TRUE') ;
dbms_stats.gather_table_stats
(
所有者,
table_name ,
粒度=>上(粒度) ,
部件名称=>部件名称,
级联=>真,
估测百分比=>DBMS_STATS.AUTO_SAMLE_SZ ,
no_in无效=>no_in无效,
方法_opt=>in_方法_opt ,
度=>DBMS_STATS.AUTO_DEGREE
);

例外
当别人那么
areamer_appal_错误(-20001,'遇到错误-'||SQLCODE||'-错误-'||SQLERRM) ;
结束;

我的怀疑
=========
如果我使用版本1 , w_percent和w_°的值将分别始终为0和32768 ,因为我在触发以下查询时看到这一点:

SQL>从对偶选择DBMS_STATS.TO_DEGREE_TYPE ('DBMS_STATS.AUTO_DEGREE') ;

DBMS_STATS.TO_DEGREE_TYPE('DBMS_STATS.AUTO_DEGREE')
---------------------------------------------------
32768

SQL>从双通道中选择DBMS_STATS.TO_ESTIATE_PERC_TYPE ('DBMS_STATS.AUTO_SAMLE_SS的大小') ;

DBMS_STATS.TO_ESTIATE_PERCOR_TYPE ('DBMS_STATS.AUTO_SAMLE_S大小')
--------------------------------------
0

而在版本2中, DBMS_STATS.AUTO_DEGREE和DBMS_STATS.AUTO_SAMLE_SZ的值将根据对象的大小、CPU数量和初始化参数来设置?

如果有意义的话,请告诉我

谢谢
卓扬

专家解答

我建议在11g和更高版本中,只使用所有者、table_name和可选的程度。


然后,您只需为该阶数set_table_prefs即可:

http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_stats.htm#sthref8804

然后,您又回到仅仅声明所有者和table_name。

不要设置估计百分比,如果您这样做-它将使用旧的(较慢,较不精确) 10g方法计算统计数据。在11g中,您会发现自动示例几乎总是执行一个计算,它获得的统计信息等于计算统计信息-比10g中的估计更快。


只需启用一次增量统计信息-当您创建表,然后直接调用dbms_stats时。没有理由通过一个存储过程来隐藏调用,该存储过程只是在出错时在字符串中隐藏真正的错误消息(为什么当其他人??????????为什么从调用例程中删除信息??? )


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论