天天看點

如何清除statspack相關表的曆史資料

本次想清除2014年以前statspack相關表的曆史資料。

1.找出2014年1月1日之前對應最大的SNAP_ID值

select Max(SNAP_ID)
  from stats$snapshot
 Where snap_time < to_date('2014-01-01', 'YYYY-MM-DD');
           
如何清除statspack相關表的曆史資料

2.根據Oracle DB環境的官方提供的腳本($ORACLE_HOME/rdbms/admin/sptrunc.sql)

Declare
  l_SNAP_ID Number := 103;
Begin
  Delete From STATS$FILESTATXS Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$TEMPSTATXS Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$LATCH Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$LATCH_CHILDREN Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$LATCH_MISSES_SUMMARY Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$LATCH_PARENT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$LIBRARYCACHE Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$BUFFER_POOL_STATISTICS Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$ROLLSTAT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$ROWCACHE_SUMMARY Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SGA Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SGASTAT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SYSSTAT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SESSTAT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SYSTEM_EVENT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SESSION_EVENT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$BG_EVENT_SUMMARY Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$WAITSTAT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$ENQUEUE_STAT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SQL_SUMMARY Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SQL_STATISTICS Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SQLTEXT Where LAST_SNAP_ID <= l_SNAP_ID;
  Delete From STATS$PARAMETER Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$RESOURCE_LIMIT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$DLM_MISC Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$UNDOSTAT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SQL_PLAN Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SQL_PLAN_USAGE Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$SEG_STAT Where SNAP_ID <= l_SNAP_ID;
  --Select * From STATS$SEG_STAT_OBJ
  Delete From STATS$DB_CACHE_ADVICE Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$PGASTAT Where SNAP_ID <= l_SNAP_ID;
  Delete From STATS$INSTANCE_RECOVERY Where SNAP_ID <= l_SNAP_ID;
  Delete from STATS$SNAPSHOT Where SNAP_ID <= l_SNAP_ID;
  Delete from STATS$DATABASE_INSTANCE Where SNAP_ID <= l_SNAP_ID;
  Commit;
Exception
  When Others Then
    Rollback;
End;
           

由于采用以上方法删除資料非常慢,通常是删除全部統計的曆史記錄。建議用Oracle DB使用者perfstat操作,具體方法如下:

SQL> @$ORACLE_HOME/rdbms/admin/sptrunc.sql

Warning
~~~~~~~
Running sptrunc.sql removes ALL data from Statspack tables.  You may
wish to export the data before continuing.


About to Truncate Statspack Tables
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If would like to exit WITHOUT truncating the tables, enter any text at the
begin_or_exit prompt (e.g. 'exit'), otherwise if you would like to begin
the truncate operation, press <return>


Enter value for begin_or_exit: 
           

在“Enter value for begin_or_exit: ”處無需求輸入,直接回車就即可。