有同学在Oracle ALL STARS群中提问 如何通过AWR来查找一段时间内,数据库段对象(堆表、索引)等的空间增长信息。
在Oracle 10g开始awr自动负载仓库引入了dba_hist_seg_stat视图,该视图记录了快照时间内segment-level段级的历史统计信息:DBA_HIST_SEG_STAT displays historical information about segment-level statistics. This view captures the top segments based on a set of criteria and captures information from V$SEGSTAT. The total value is the value of the statistics since instance startup. The delta value is the value of the statistics from the BEGIN_INTERVAL_TIME to the END_INTERVAL_TIME in the DBA_HIST_SNAPSHOT view.
我们可以通过以下SQL脚本来列出相关段对象在 快照时间内的使用空间的历史变化信息:
column owner format a16 column object_name format a36 column start_day format a11 column block_increase format 9999999999 select obj.owner, obj.object_name, to_char(sn.BEGIN_INTERVAL_TIME,'RRRR-MON-DD') start_day, sum(a.db_block_changes_delta) block_increase from dba_hist_seg_stat a, dba_hist_snapshot sn, dba_objects obj where sn.snap_id = a.snap_id and obj.object_id = a.obj# and obj.owner not in ('SYS','SYSTEM') and end_interval_time between to_timestamp('01-JAN-2000','DD-MON-RRRR') and to_timestamp('02-FEB-2013','DD-MON-RRRR') group by obj.owner, obj.object_name, to_char(sn.BEGIN_INTERVAL_TIME,'RRRR-MON-DD') order by obj.owner, obj.object_name /
使用示例:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> conn maclean/maclean Connected. SQL> SQL> SQL> SQL> create table check_size tablespace users as select * from dba_objects where rownum=0; Table created. SQL> exec dbms_workload_repository.create_snapshot; PL/SQL procedure successfully completed. SQL> insert into check_size select * from dba_objects; 75536 rows created. SQL> insert into check_size select * from check_size; 75536 rows created. SQL> / 151072 rows created. SQL> commit; Commit complete. SQL> insert into check_size select * from check_size; 302144 rows created. SQL> insert into check_size select * from check_size; 604288 rows created. SQL> commit; Commit complete. SQL> alter system checkpoint; System altered. SQL> exec dbms_workload_repository.create_snapshot; PL/SQL procedure successfully completed. SQL> @seg_hist OWNER OBJECT_NAME START_DAY BLOCK_INCREASE ---------------- ------------------------------------ ----------- -------------- DBSNMP BSLN_STATISTICS 2012-MAR-18 224 DBSNMP BSLN_STATISTICS_PK1 2012-MAR-18 192 MACLEAN CHECK_SIZE 2012-MAR-22 96176 SH CUSTOMERS 2012-MAR-17 0 SQL> select data_object_id from dba_objects where object_name='CHECK_SIZE'; DATA_OBJECT_ID -------------- 78062 SQL> select seg.snap_id, 2 seg.ts#, 3 seg.space_used_total, seg.space_allocated_total, seg.SPACE_ALLOCATED_DELTA from dba_hist_seg_stat seg where seg.DATAOBJ#=78062 / 4 5 6 7 8 SNAP_ID TS# SPACE_USED_TOTAL SPACE_ALLOCATED_TOTAL SPACE_ALLOCATED_DELTA ---------- ---------- ---------------- --------------------- --------------------- 354 4 30909079 36700160 36700160 355 4 123645655 149946368 113246208 SPACE_USED_DELTA Delta value for space used SPACE_ALLOCATED_DELTA Delta value for space allocated