managed oracle statistics

本文详细介绍如何使用Oracle的dbms_stats包进行表和索引的统计信息收集、删除及复制操作,并对比analyze命令,讨论两者的优缺点。通过具体示例说明如何调整参数以优化统计信息收集过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

收集表的统计信息

收集索引的统计信息

删除表的统计信息

删除索引的统计信息

导出导入统计信息

不同的数据库间统计信息的复制

dbms_stats 和 analyze 的优点和缺点

对柱状图的理解和常用的统计信息,柱状图的视图

[@more@]


常用的 analyze ,dbms_stats 包的使用


dbms_stats.gather_table_stats 的使用

1 统计表名是 wrj 的统计信息,不统计索引的信息,同时,是自动确定histograms size 的最优值,也是默认值
SQL> exec dbms_stats.gather_table_stats(ownname=>'test',tabname=>'wrj',cascade=>true,method_opt=>dbms_stats.auto_sample_size);

PL/SQL procedure successfully completed.

2.
统计表名是 wrj 的统计信息,不统计索引的信息,同时确定并行度是4

SQL> exec dbms_stats.gather_table_stats(ownname=>'test',tabname=>'wrj',cascade=>true,degree=>4);

PL/SQL procedure successfully completed.

3.
SQL>exec dbms_stats.gather_table_stats(ownname=>'test',tabname=>'wrj',method_opt=>'for columns size 5 object_id');


exec dbms_stats.gather_table_stats('WRJ','AGENT_INFO',method_opt => 'FOR ALL INDEXES FOR ALL INDEXED COLUMNS',cascade => true);

4. SQL> exec dbms_stats.gather_table_stats(ownname=>'test',tabname=>'wrj',estimate_percent=>30);

PL/SQL procedure successfully completed.

5. 分析索引信息

SQL> execute dbms_stats.gather_index_stats(ownname=>'test',indname=>'idx_wrj');

PL/SQL procedure successfully completed.

6 单独删除索引信息
SQL> execute dbms_stats.delete_index_stats(ownname=>'test',indname=>'idx_wrj');

PL/SQL procedure successfully completed.

7. 删除表的统计信息(把索引的统计信息一块删除掉)
exec dbms_stats.delete_table_stats(ownname=>'test',tabname=>'wrj');

8. lock unlock 表的信息
SQL> execute dbms_stats.lock_table_stats(ownname=>'test',tabname=>'wrj');

PL/SQL procedure successfully completed.

SQL>
SQL> execute dbms_stats.unlock_table_stats(ownname=>'test',tabname=>'wrj');

PL/SQL procedure successfully completed.

9. analzye 常用语句


analyze table wrj compute statistics for table for all indexes for all indexed columns

analyze table wrj delete statistics


analyze table wrj compute statistics for table for columns record_sn size 50;

复制表的信息:
1. 在产品库上
exec dbms_stats.export_table_stats(ownname=>'test1',tabname=>'wrj',stattab=>'STAT_WRJ',cascade=>true);

PL/SQL procedure successfully completed.


exp test1/test1 file=test1.dmp tables=wrj,stat_wrj


第二


SQL> exec dbms_stats.create_stat_table(ownname=>'test1',stattab=>'stat_wrj');

PL/SQL procedure successfully completed.

SQL>
SQL> exec dbms_stats.export_table_stats(ownname=>'test1',tabname=>'wrj',stattab=>'stat_wrj');

PL/SQL procedure successfully completed.

SQL>
SQL> exec dbms_stats.delete_table_stats(ownname=>'test1',tabname=>'wrj');

PL/SQL procedure successfully completed.

SQL> exec dbms_stats.import_table_stats(ownname=>'test1',tabname=>'wrj',stattab=>'stat_wrj');

PL/SQL procedure successfully completed.

SQL> select num_rows,blocks
2 , empty_blocks
3 , avg_space
4 , avg_row_len
5 , sample_size
6 from user_tables
7 where table_name = upper('wrj');

NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE AVG_ROW_LEN SAMPLE_SIZE
---------- ---------- ------------ ---------- ----------- -----------
29441 822 0 0 92 29441



不同schema 的统计信息的复制

在test2 用户内
imp test2/test2 file=test1.dmp tables=wrj,stat_wrj commit=y ignore=y


sqlplus test2/test2
sql>update STAT_WRJ set c5='TEST2';
sql>execute dbms_stats.import_schema_stats(ownname=>'test2',stattab=>'stat_wrj');
SQL> select num_rows,blocks
2 , empty_blocks
3 , avg_space
4 , avg_row_len
5 , sample_size
6 from user_tables
7 where table_name = upper('wrj');

NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE AVG_ROW_LEN SAMPLE_SIZE
---------- ---------- ------------ ---------- ----------- -----------
29441 822 0 0 96 29441

统计信息需要的查询语句


select num_rows,blocks
, empty_blocks
, avg_space
, avg_row_len
, sample_size
from dba_tables
where table_name = upper('CDR_WRJ_1021')
and owner = 'CRBT'

select uniqueness
, blevel
, leaf_blocks
, distinct_keys
, clustering_factor
from user_indexes
where index_name = upper('IDX_WRJ')

select
column_name,
num_distinct,
num_buckets,
low_value,
high_value,
num_nulls,
histogram
from user_tab_col_statistics
where
table_name = 'WRJ' and column_name = 'OBJECT_ID'


select
column_name,
num_distinct,
num_buckets,
histogram
from user_tab_col_statistics
where
table_name = 'WRJ' and column_name = 'OBJECT_ID'




select endpoint_number -- demo08_09.sql
, endpoint_value
from user_histograms
where table_name = 'WRJ'
and column_name = 'RECORD_SN'
order by endpoint_number




select *
from user_tab_histograms
where table_name = 'WRJ'
and column_name = 'RECORD_SN'
order by endpoint_number

analyze 和dbms_stats 的优缺点 :

1. dbms_stats 可以并行
2. dbms_stats 可以保存统计信息 (export ,import,lock )
3. 可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区
4. 分区表建议用 dbms_stats
5. dbms_stats 可以一次执行一个用户的统计信息

dbms_stats.gather_schema_stats(User,estimate_percent=>100,cascade=> TRUE);
dbms_stats.gather_table_stats(User,TableName,degree => 4,cascade => true);


2、DBMS_STATS的缺点
a) 不能Validate Structure
b) 不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍旧需要使用Analyze语句。
c) DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True

3、对于oracle 9里面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息。

histograms


Height-Balanced Histograms和Frequency Histograms 的区别

distinct columns 值的大小大于 num_buckets 的大小的时候,就是 Height-Balanced Histograms,
反之,则是 Frequency Histograms

num_buckets大小在0-254中间




select
column_name,
num_distinct, --------------
num_buckets, --------------
histogram
from user_tab_col_statistics
where
table_name = 'WRJ' and column_name = 'OBJECT_ID'

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

转载于:http://blog.itpub.net/66233/viewspace-1023249/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值