设为首页 加入收藏

TOP

数据库性能优化、统计信息与对象统计信息概述收集、扩展统计信息、dbms_stats.get_prefs(三)
2014-11-24 01:33:44 来源: 作者: 【 】 浏览:27
Tags:数据库 性能 优化 统计 信息 对象 概述 收集 扩展 dbms_stats.get_prefs
展,指的是列的组合,或者是基于列的表达式。
有如下的例子:
HR@ORCL> alter table hr.employees no flashback archive;

HR@ORCL> select dbms_stats.create_extended_stats('hr','employees','(first_name,last_name,job_id)') from dual;

HR@ORCL> exec dbms_stats.gather_table_stats('hr','employees',method_opt=>'for all columns size 1,for columns (first_name,last_name,job_id) size auto');

HR@ORCL> select * from user_stat_extensions where table_name='EMPLOYEES';

注:扩展统计信息中的列组,与复合索引;
扩展统计信息中的基于列的表达式,与函数索引
它们在影响执行计划的时候有何不同?

另注:自动收集统计信息时,不会收集扩展统计信息。

1.2.2.4 estimate_percent参数分析

GATHER_DATABASE_STATS
GATHER_DICTIONARY_STATS
GATHER_INDEX_STATS
GATHER_SCHEMA_STATS
GATHER_TABLE_STATS
以上五个收集统计信息的过程,都包含了estimate_percent这个参数。
在12.1的官方文档中,oracle对该参数的解释如下:
该参数指定了在收集统计信息时对行采样的百分比(NULL表示全部采样)。其可用值的范围为【0.000001,100】。
可以使用常量DBMS_STATS.AUTO_SAMPLE_SIZE来让oracle自己决定采取适当的数值来收集统计信息。这也是默认行为。
该默认值可以通过
SET_DATABASE_PREFS,
SET_GLOBAL_PREFS,
SET_SCHEMA_PREFS,
SET_TABLE_PREFS进行修改。

注:在设置这些默认项之后,也会作用于统计信息的自动收集。

可以使用dbms_stats.get_prefs获取当前系统与统计信息相关的参数的默认值。
可以获取的参数包括
■ AUTOSTATS_TARGET
■ CASCADE
■ CONCURRENT
■ DEGREE
■ ESTIMATE_PERCENT
■ METHOD_OPT
■ NO_INVALIDATE
■ GRANULARITY
■ PUBLISH
■ INCREMENTAL
■ INCREMENTAL_LEVEL
■ INCREMENTAL_STALENESS
■ STALE_PERCENT
■ GLOBAL_TEMP_TABLE_STATS
■ TABLE_CACHED_BLOCKS
■ OPTIONS

其中,
get_prefs用于获取全局的统计信息收集配置选项。
要获取对象级别的统计信息配置选项:
SELECT * FROM DBA_TAB_STAT_PREFS;


例子如下:
SQL> select dbms_stats.get_prefs('estimate_percent') name from dual;

NAME
--------------------------------------------------------------------------------
DBMS_STATS.AUTO_SAMPLE_SIZE

按照oracle的解释,AUTO_SAMPLE_SIZE为一个常量,其值可以通过如下方式获取:
Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.1.0
Connected as sys@ORCL AS SYSDBA

SQL> create table t_val (name varchar2(30),value number);

Table created

SQL> begin
2 insert into t_val values ('AUTO_SAMPLE_SIZE',DBMS_STATS.AUTO_SAMPLE_SIZE);
3 end;
4 /

PL/SQL procedure successfully completed

SQL> select * from t_val;

NAME VALUE
--------------------------- ----------
AUTO_SAMPLE_SIZE 0

显然这不是我们想要的值。
按照oracle的说明,该值的取值范围,也应该在【0.000001,100】之间。
我们可以设计一个实验,来获取该值的一个近似值。

SQL> create table t as select * from dba_objects;

Table created

SQL> set timing on;
SQL> exec dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T',estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE);

PL/SQL procedure successfully completed

Executed in 0.608 seconds

SQL> exec dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T',estimate_percent => NULL);

PL/SQL procedure successfully completed

Executed in 0.999 seconds

SQL> exec dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T',estimate_percent => 100);

PL/SQL procedure successfully completed

Executed in 0.889 seconds

SQL> exec dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T',estimate_percent => 50);

PL/SQL procedure successfully completed

Executed in 0.483 seconds

SQL> exec dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T');

PL/SQL procedure successfully completed

Executed in 0.234 seconds

SQL> exec dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T',estimate_percent => 60);

PL/SQL procedure successfully completed

Executed in 0.577 seconds

SQL> exec dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T',estimate_percent => 62);

PL/SQL procedure successfully co

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇全面解析Oracle数据库中管理实例.. 下一篇带你深入了解管理Oracle实例的相..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: