APP下载
报价宝  ›  科技  › 

Oracle实验--检视表、索引统计资讯是否收整合功

报价宝 来源:baojiabao.com 发布时间:2019-07-15 11:05:00 10月06日更新
报价宝综合消息Oracle实验--检视表、索引统计资讯是否收整合功

概述

统计资讯对于表的执行效率不言而喻,那么我们怎么去看这个表统计资讯是否收集了,最后收集的时间又是什么时候呢?

查看表的统计资讯是否收集其实可通过dba_ind_statistics和dba_tab_statistics中的LAST_ANALYZED字段,观察是否完成了统计资讯的收集,只有完成的收集工作才会记录在这两个检视中。

下面用实验来测试一下。

测试过程如下(测试环境为Oracle11.2.0.1):

1 、 建立一个200w行左右的测试表,资料为dba_objects。

SQL> drop table t;

Table dropped.

SQL> create table t as select * from dba_objects;

Table created.

SQL> insert into t select * from t;

87392 rows created.

SQL> /

174784 rows created.

SQL> /

349568 rows created.

SQL> /

699136 rows created.

SQL> /

1398272 rows created.

SQL> select count(*) from t;

COUNT(*)

----------

2796544

2、 检视检视中统计资讯:

select a.OWNER,a.INDEX_NAME,a.TABLE_NAME,a.LAST_ANALYZED from dba_ind_statistics a where table_name='T' and table_owner='SCOTT';

select b.TABLE_NAME,b.OWNER,b.LAST_ANALYZED from dba_tab_statistics b where table_name='T' and owner in ('SCOTT');

通过观察得到,索引的统计资讯为索引建立时自动收集,表的统计资讯为空。

3 、手工收集统计资讯,在执行约38秒时手工中断(已通过测试,此表收集统计资讯约需要60秒)

begin

dbms_stats.gather_table_stats(ownname => 'SCOTT',tabname => 'T' ,estimate_percent => 100 ,cascade => true);

end;

/

4 、检视检视中统计资讯:

select a.OWNER,a.INDEX_NAME,a.TABLE_NAME,a.LAST_ANALYZED from dba_ind_statistics a where table_name='T' and table_owner='SCOTT';

select b.TABLE_NAME,b.OWNER,b.LAST_ANALYZED from dba_tab_statistics b where table_name='T' and owner in ('SCOTT');

因为统计资讯并未收集完全,所以此二表中的资料并无变化。

5、再次收集统计资讯

begin

dbms_stats.gather_table_stats(ownname => 'SCOTT',tabname => 'T' ,estimate_percent => 100 ,cascade => true);

end;

/

可以发现分析结果出来了。

6、建立索引

SQL> create index idx_id on scott.T(object_id);

SQL> select a.OWNER,a.INDEX_NAME,a.TABLE_NAME,a.LAST_ANALYZED from dba_ind_statistics a where table_name='T' and table_owner='SCOTT';

SQL> select b.TABLE_NAME,b.OWNER,b.LAST_ANALYZED from dba_tab_statistics b where table_name='T' and owner in ('SCOTT');

可以看到一建立索引就自动收集统计资讯了。

那么,为什么索引一建立会自动收集统计资讯呢?

7、隐含引数_optimizer_compute_index_stats

SQL> col KSPPDESC for a80

SQL> col KSPPINM for a30

SQL> col KSPPSTVL for a20

SQL> SELECT ksppinm, ksppstvl, ksppdesc FROM x$ksppi x, x$ksppcv y WHERE x.indx = y.indx AND ksppinm='_optimizer_compute_index_stats';

可以看到隐含引数_optimizer_compute_index_stats会强制建立过引时自动收集统计资讯,预设为true。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 数码相机价格 手机价格 汽车价格 笔记本电脑价格 电视机价格