首页 > Linux操作系统 > Linux操作系统 > Oracle统计信息管理和维护
Table statistics
Number of rows
Number of blocks
Average row length
Column statistics
Number of distinct values (NDV) in column
Number of nulls in column
Data distribution (histogram)
Index statistics
Number of leaf blocks
Levels
Clustering factor
System statistics
I/O performance and utilization
CPU performance and utilization
从上面的注释可以看到,统计信息的范围是很广的,典型的包括表的总行数,存储所占用的数据块数以及平均行的长度。
我们最常用到的无外乎表,列以及索引的统计信息。
其中,对于红字标识部分也就是通常所说的直方图要深刻理解。
直方图又称为数据分布,其标明了该列数据的分布区间,如下图所示:
Consider a column C with values between 1 and 100 and a histogram with 10 buckets.
![]()
SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_STATS_JOB';
如果想将此作业停止,可执行以下命令:
BEGIN DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB'); END; /
以下命令用于收集或更新一个表的统计信息:
BEGIN
DBMS_STATS.GATHER_TABLE_STATS('TEST','T1',10);
END;
/
以下命令用于删除一个表的统计信息:
BEGIN
DBMS_STATS.DELETE_TABLE_STATS('TEST','T1');
END;
/
以下命令用于锁定一个表的统计信息:
BEGIN
DBMS_STATS.LOCK_TABLE_STATS('TEST','T1');
END;
/
注:如果执行了锁定操作,那么这个表或对象的统计信息将无法被更新,直到执
行解锁命令。
注:更新以及删除模式或数据库的统计信息同上。
还原统计信息
默认情况下,数据库会保留最近31天的统计信息,可以通过以下语句查询:
SELECT * FROM DBA_OPTSTAT_OPERATIONS;
以上结果记录着Oracle自动创建的更新数据库统计信息的作业在最近31天的执行情况,
默认情况下可以将任意对象的统计信息还原至这段时间内。
一个典型的还原统计信息的例子如下:
begin
dbms_stats.restore_table_stats(ownname => 'BOLAN',tabname => 'IEA_CWFXCPB',as_of_timestamp => to_date('2012-05-14 22:00:49','yyyy-mm-dd hh24:mi:ss'));
end;
导入和导出统计信息
除了可以通过系统自动备份的统计信息来还原之前的记录,还可以手工来管理统计信息。
首先需要调用dbms_stats.create_stat_table来创建一张用来存放统计信息的表,如下:
begin
dbms_stats.create_stat_table(ownname=>'SCOTT',stattab=>'STATTAB');
end;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22166274/viewspace-729949/ ,如需转载,请注明出处,否则将追究法律责任。