您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

如何删除statspack生成的历史数据

2024/4/7 22:02:01发布10次查看
当用$oracle_home/rdbms/admin/spauto.sql创建一个默认的job以后,数据库中会每1个小时收集一次快照,方便我们可以随时用$oracle
当用$oracle_home/rdbms/admin/spauto.sql创建一个默认的job以后,数据库中会每1个小时收集一次快照,方便我们可以随时用$oracle_home/rdbms/admin/spreport.sql产生report诊断分析报告,但是采样的数据量是相当惊人的,如果忽略了这个job,或者没有定期的检查剩余空间大小,有的生产环境很可能会由于空间不足到导致其它的不可预测状况,所以我们要定期的删除statspack收集的历史数据,前提条件是要做好备份,然后删除不再需要的历史数据,删除方法有2种:手工删除和自动脚本删除。
1.备份perfstat用户下的对象
[oracle@rac1 ~]$ export nls_lang=american_america.zhs16gbk
 [oracle@rac1 ~]$ cd /data
 [oracle@rac1 ~]$ exp perfstat/oracle@orcl file=./perfstat_backup.dmp wner=perfstat
 [oracle@rac1 ~]$ ll -t
 -rw-r--r--  1 oracle    dba        1893620736 apr 27 10:40 perfstat_backup.dmp
2.删除statspack生成的历史数据
  a:手工删除statspack中的历史记录
        1)保留最近1个月的数据
            delete from perfstat.stats$snapshot where snap_time             --2520条记录
            --1313.869s
      备注:删除2520条记录,需要25分钟,这是因为delete from stats$snapshot会及联删除代snap_id的所有表中相关snap_id的记录,所以需要的时间会很长(但是stats$undostat,stats$sqltext除外:
    删除statspack数据可以使用delete stats$snapshot的方法,除了stats$undostat之外,其他的包含snap_id的表都会被清除掉。不过perfstat用户下还有一些表不包含snap_id:
  select b.segment_name, sum(b.bytes)/1024/1024
    from user_segments b
    where b.segment_name in (select table_name from user_tables
    minus
    select table_name from user_tab_columns where column_name = 'snap_id')
    group by b.segment_name
    order by 2
    table_name                                                m
    ------------------------------------------------      ------
      stats$idle_event                              0.125
      stats$level_description            0.125
      stats$statspack_parameter    0.125
      stats$seg_stat_obj                        1
      stats$sqltext                                    176
        2)清空非关联删除表(stats$undostat,stats$sqltext)
            truncate table perfstat.stats$undostat
            --19440条记录
          truncate table perfstat.stats$sqltext
            --8060778条记录
          备注:由于perfstat.stats$sqltext中的记录数量很大,所以一般选择truncate,当然也可以delete一个月前的数据,但是速度会相当的慢。
      delete from stats$undostat where begin_time         delete from stats$sqltext bb  where hash_value in (select a.hash_value from stats$sqltext  a,stats$sql_summary b where a.hash_value = b.hash_value(+) and b.hash_value is null )
b:oracle提供自动脚本删除statspack中的历史记录
      除了手工删除历史记录以外,oracle还提供了系统脚本用户truncate这些统计信息表,
      $oracle_home//rdbms/admin/sptrunc.sql
      truncate table stats$filestatxs;
        truncate table stats$tempstatxs;
        truncate table stats$latch;
        truncate table stats$latch_children;
        truncate table stats$latch_misses_summary;
        truncate table stats$latch_parent;
        truncate table stats$librarycache;
        truncate table stats$buffer_pool_statistics;
        truncate table stats$rollstat;
        truncate table stats$rowcache_summary;
        truncate table stats$sga;
        truncate table stats$sgastat;
        truncate table stats$sysstat;
        truncate table stats$sesstat;
        truncate table stats$system_event;
        truncate table stats$session_event;
        truncate table stats$bg_event_summary;
        truncate table stats$waitstat;
        truncate table stats$enqueue_statistics;
        truncate table stats$sql_summary;
        truncate table stats$sql_statistics;
        truncate table stats$sqltext;
        truncate table stats$parameter;
        truncate table stats$resource_limit;
        truncate table stats$dlm_misc;
        truncate table stats$undostat;
        truncate table stats$sql_plan;
        truncate table stats$sql_plan_usage;
        truncate table stats$seg_stat;
        truncate table stats$seg_stat_obj;
        truncate table stats$db_cache_advice;
        truncate table stats$pgastat;
        truncate table stats$instance_recovery;
        truncate table stats$java_pool_advice;
        truncate table stats$thread;
        truncate table stats$cr_block_server;
        truncate table stats$current_block_server;
        truncate table stats$instance_cache_transfer;
        truncate table stats$file_histogram;
        truncate table stats$temp_histogram;
        truncate table stats$event_histogram;
        truncate table stats$time_model_statname;
        truncate table stats$sys_time_model;
        truncate table stats$sess_time_model;
        truncate table stats$streams_capture;
        truncate table stats$streams_apply_sum;
        truncate table stats$propagation_sender;
        truncate table stats$propagation_receiver;
        truncate table stats$buffered_queues;
        truncate table stats$buffered_subscribers;
        truncate table stats$rule_set;
        truncate table stats$osstat;
        truncate table stats$osstatname;
        truncate table stats$process_rollup;
        truncate table stats$process_memory_rollup;
        truncate table stats$streams_pool_advice;
        truncate table stats$sga_target_advice;
        truncate table stats$mutex_sleep;
        truncate table stats$dynamic_remaster_stats;
delete from stats$snapshot;
        delete from stats$database_instance;
commit;
此时,与statspack相关的大部分系统表都会被清空,如果采样了大量的数据,,直接delete是非常缓慢的,所以可以考虑使用oracle提供的默认脚本清空perfstat中的历史记录。
本文永久更新链接地址:
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product