Oracle 统计信息

本文介绍了Oracle数据库中统计信息的收集与管理,包括使用dbms_stats包对schema、表和索引的统计信息进行更新,调整collect_stats_job的启用与禁用,以及查看和检查统计信息的时效性。此外,还探讨了统计信息参数如estimate_percent、degree、cascade和granularity的影响。

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

--统计信息


--收集schame的统计信息
begin
  dbms_stats.gather_schema_stats(ownname          => 'DATACHG',
                                estimate_percent => dbms_stats.auto_sample_size,
                                cascade          => true,
                                method_opt       => 'FOR ALL COLUMNS SIZE auto',
                                degree           => 8);
end;
/

--收集表统计信息
begin
  dbms_stats.gather_table_stats(ownname          => 'LIS',
                                tabname          => 'LACOMMISION',
                                estimate_percent => dbms_stats.auto_sample_size,
                                cascade          => true,
                                method_opt       => 'FOR ALL COLUMNS SIZE auto',
                                degree           => 8);
end;
/

--查看系统自动收集统计信息的job:
SELECT * FROM dba_scheduler_jobs WHERE job_name = 'GATHER_STATS_JOB';
--disable自动收集统计信息:
BEGIN
dbms_scheduler.disable('GATHER_STATS_JOB');
END;
--enable自动收集统计信息:
BEGIN
dbms_scheduler.enable('GATHER_STATS_JOB');
END;


--表统计; 
--行数,块数,行平均长度;all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN;

--列统计; 
--列中唯一值的数量(NDV),NULL值的数量,数据分布;
--DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM;

--索引统计;
--叶块数量,等级,聚簇因子;
--DBA_INDEXES:LEAF_BLOCKS,CLUSTERING_FACTOR,BLEVEL;

--查看统计信息的时间及表的记录数
select owner,table_name,last_analyzed,num_rows from dba_tables where owner='LIS' and table_name='LAAGENT';

--last_analyzed:相关表的信息最后被统计的时间
--num_rows:优化器中存放的 表中的 记录数(可能与实际情况不符)

--是否对表进行了分析(如果结果为空,说明没有对表进行分析)
select num_rows, avg_row_len, blocks, last_analyzed
from dba_tables
where table_name='SE_PAYMENTS';

--检查Oracle统计信息是否陈旧
select * from dba_tab_statistics order by last_analyzed desc;
select owner,table_name,num_rows,last_analyzed,stale_stats from dba_tab_statistics order by last_analyzed desc;

--查询统计信息时间
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
select table_name,last_analyzed from dba_tables where owner='LIS';


--收集全库的统计信息参数理解
exec dbms_stats.gather_database_stats(estimate_percent=>10,degree=>8,cascade=>true,granularity=>'ALL');

--统计信息收集:
--收集统计信息是一项复杂任务,需谨慎,示例对给出用户、索引名的对象采集统计信息
exec dbms_stats.gather_table_stats(ownname=>'&owner',tablename=>'&table_name');
exec dbms_stats.gather_index_stats(ownname=>'&owner',indexname=>'&index_name');

--创建指定方案的统计信息表
exec dbms_stats.create_stat_table(ownname => 'lis',stattab => 'stab_20180630');
--导出指定方案的统计信息
exec dbms_stats.export_schema_stats(ownname=> 'LIS',stattab=>'stab_20180630');
--收集指定表统计信息
SET TIMING ON;
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=> 'LIS',TABNAME=>'LJAGETENDORSE', CASCADE => TRUE, GRANULARITY=> 'AUTO',  FORCE=> TRUE,DEGREE=> 4);   
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=> 'LIS',TABNAME=>'LJAGET', CASCADE => TRUE, GRANULARITY=> 'AUTO',  FORCE=> TRUE,DEGREE=> 4);  
SET TIMING OFF;

--说明:
--默认及常用(表示对出现在where条件中的列自动判断是否收集直方图)
 method_opt       => 'FOR ALL COLUMNS SIZE auto'
--系统稳定(表示前面哪些列收集了直方图,现在就收集哪些列的直方图)
 method_opt       => 'FOR ALL COLUMNS SIZE repeat'
--不用(表示对表中所有列收集直方图)
 method_opt       => 'FOR ALL COLUMNS SIZE skewonly'
--不用(表示删除表中所有列的直方图)
 method_opt       => 'FOR ALL COLUMNS SIZE 1'

--1)estimate_percent:
--这个参数表示选择的采样比例,如果太低,收集速度会快,但可能不会很准确,如果太高,收集速度会慢,但比较准确,各有利弊。表示选择的采样比例,如果太低,收集速度会快,但可能不会很准确,如果太高,收集速度会慢,但比较准确,各有利弊,默认是100%。

--2)degree
--并行统计信息收集,应该根据对象的大小和并行性初始化参数的设置选择恰当的并行度,默认为null

--3)cascade
--这个参数表示是否收集表对应的索引、列等的统计信息

--4)granularity
--这个参数有四个值
--① ALL:采集Global、partition、subpartition等粒度统计信息
--② AUTO:根据分区类型,由Oracle确定统计信息采集粒度
--③ PARTITION:只采集partition粒度统计信息
--④ SUBPARTITION:只采集subpartition粒度统计信息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值