Oracle半小时统计拨开神秘的面纱(oracle以半小时统计)

Oracle半小时统计:拨开神秘的面纱

相信不少人都对Oracle数据库的性能分析和优化有所经验,但是对于Oracle的统计信息却可能不甚清楚。统计信息是 Oracle 数据库的基础,它是用来描述对象、表和索引等数据库元数据的一些数据,无论是基于CBO还是RBO的执行计划都需要依赖这些信息来做出正确的决策,这些信息包括表记录数、列的值域(进行直方图统计用的数据)界限值,索引等等。因此,构建一个完美的统计信息库至关重要。

在本文中,我们将介绍一种快速生成Oracle统计信息的方法,而且只需半小时即可完成,令人倍感心旷神怡。

【前置知识】

为了更好地理解本文中的概念,我们需要了解Oracle数据库中与统计相关的四个参数:

– TIMED_STATISTICS:为TRUE时,Oracle将统计信息和时间统计信息写入数据字典。在使用awrrpt.sql脚本生成Oracle数据库性能分析报告时,该参数必须为TRUE.

– STATISTICS_LEVEL:用于控制Oracle运行时的统计信息级别。其取值为ALL、TYPICAL或BASIC。默认值为TYPICAL.

– DBMS_STATS.AUTO_STATS_JOB_ENABLED:如为TRUE,则开启一个后台任务,每晚1点开始重新收集统计信息。

– DBMS_STATS.GATHER_TABLE_STATS(schema name=>table name):该过程可以重新生成数据表统计信息。

【方法】

1.启动统计信息收集

打开SQL*PLUS,运行以下命令:

EXEC DBMS_STATS.SET_TABLE_PREFS(‘SCOTT’,’EMP’,’ESTIMATE_PERCENT’,11);

EXEC DBMS_STATS.GATHER_TABLE_STATS(‘SCOTT’,’EMP’,CASCADE=>TRUE,GRANULARITY=>’ALL’,METHOD_OPT=>’FOR ALL COLUMNS SIZE 1′);

2.等待统计信息生成

我们需要预留一定时间,确保 Oracle 完成统计信息的生成。对于小型数据库,建议等待10分钟。同时,使用以下SQL语句检查统计信息的实时更新情况:

SELECT OWNER,TABLE_NAME,LAST_ANALYZED,NUM_ROWS,LAST_SAMPLE_SIZE FROM DBA_TABLES WHERE OWNER = ‘SCOTT’ AND TABLE_NAME = ‘EMP’;

如果统计信息还在生成中,可使用以下命令查看:

SELECT COUNT(*) FROM DBA_TAB_STATS_HISTORY WHERE OWNER = ‘SCOTT’ AND TABLE_NAME = ‘EMP’;

3.查看表的统计信息

完成统计信息的生成,我们可以通过以下两种方式查看统计信息:

方式1 :使用 Oracle SQL Developer中的表属性窗口

在此窗口中,我们可以查看对象(表)的统计信息,并导出生成的HTML报表。

PS:SQL Developer 是 Oracle 官方提供的功能强大,广泛使用的免费 GUI 工具,用于开发、测试、调试和部署 Oracle 数据库。

方式2 :通过 Direct Path Load

运行以下代码(前提是需要将表空间设置为无限的):

INSERT /*+ APPEND */ INTO t1 SELECT ROWNUM, TRUNC(DBMS_RANDOM.VALUE(1,1000)) FROM dual CONNECT BY LEVEL

接下来,通过以下查询语句可以查看表自动收集的统计信息:

SELECT * FROM DBA_TAB_STATISTICS WHERE TABLE_NAME = ‘T1’;

4.刷新统计信息

如果需要更改数据库的统计信息,可以使用以下SQL命令:

SELECT DBMS_STATS.GET_PREFS(‘SCOTT’);

EXEC DBMS_STATS.SET_TABLE_PREFS(‘SCOTT’,’EMP’,’ESTIMATE_PERCENT’,50);

SELECT DBMS_STATS.GET_PREFS(‘SCOTT’);

EXEC DBMS_STATS.GATHER_TABLE_STATS(‘SCOTT’,’EMP’,CASCADE=>TRUE,GRANULARITY=>’ALL’,METHOD_OPT=>’FOR ALL COLUMNS SIZE 1′);

再次等待更新后,我们又可以查看新的统计信息了。

【注意事项】

还需要了解以下几点:

– 对于大型数据库,一般应选择自动收集统计信息并创建计划任务,以便它们在后台运行。

– 统计信息需要持续更新,否则会导致性能下降。建议对频繁使用的表进行一些定制,以根据情况决定何时更新统计信息。

– 统计信息的生成可能影响I/O性能,因此最好单独在非繁忙时段进行收集。

以上是本文的全部内容,Oracle的统计信息并不神秘,只要你掌握正确的方法,就能轻易实现快速生成,并大大提高数据库性能的效率。


数据运维技术 » Oracle半小时统计拨开神秘的面纱(oracle以半小时统计)