如何删除过期的业务监控数据
1、星空系统自带一套业务监控表,保存系统近期分析出来的一批业务监控数据,正常情况下,这批数据被保留2个月,2个月前的数据被认为过期了,将被系统的定时作业删除,如下图:
T_BAS_WARNMOBILEMESSAGE --云之家消息
T_BAS_WARNINSIDEMESSAGE --明细消息
T_BAS_WARNMERGEMESSAGE --合并消息
T_BAS_WARNINSIDEMESSAGE_L --明细消息多语言
T_BAS_WARNMERGEMESSAGE_L --合并消息多语言
T_BAS_WARNMSGDISPLAYDATA --监控消息列表
T_BAS_WARNLIGHTAPPMSG --轻应用消息
T_BAS_WARNLIGHTAPPMSGGROUP --轻应用消息分组
T_BAS_WARNUSERMESSAGE --用户消息
T_BAS_WARNCARDDISPLAYDATA --卡片消息
T_BAS_WARNEXECUTERESULTBK --执行情况历史表
T_BAS_WARNEXECUTEDETAILBK --执行情况详细历史表
T_BAS_WARNEXECUTERESULTBK_L --执行情况历史多语言表
T_BAS_WARNEXECUTEDETAILBK_L --执行情况详细历史多语言表
2、但有时候,可能是删除时系统碰上异常,或者系统上的执行计划被关闭,导致过期数据没能及时被删除,进而逐步累计过期数据,把相关表的尺寸膨胀巨大,成为数据库的负担,如下图,第1个表尺寸达63G
下图,系统中,删除业务监控表的执行计划:
3、为确保能正常地删除这些历史数据,可以在数据库里再定义一套辅助脚本,每天执行,删除2个月前的业务监控数据。
4、在上述的14个业务监控表中,有5个表是表头,剩下的9个表是表体,表头表带了日期字段,可以做为判断数据是否过期的依据;如下语句,使用了日期字段做为判断依据:
delete from t_bas_warnmergemessage where fcreatetime < v_rmdate and rownum <= 10000;
delete from t_bas_warnmsgdisplaydata where fcreatetime < v_rmdate and rownum <= 10000;
delete from t_bas_warnusermessage where fcreatetime < v_rmdate and rownum <= 10000;
delete from t_bas_warncarddisplaydata where fcreatetime < v_rmdate and rownum <= 10000;
delete from t_bas_warnexecuteresultbk where fexecuteendtime < v_rmdate and rownum <= 10000;
表体则根据和表头的关联关系去删除数据,因此,在删除数据时,需要先删除表体数据,再删除表头数据。
5、下面附件,是删除业务监控的脚本的ORACLE版,需要注意的是:
5.1、脚本需要以数据中心账号,用SQLPLUS工具登录数据库执行。
5.2、部署前,最好对5个表头表做按月分区,以便分区过期后(数据被清空)被删除。
5.3、脚本默认每天6点半执行,若不合适,请自行修改。
5.4、若对5个表头表做了分区,则脚本将自动删除那些过期的,被清空了数据的分区,此时,表头表不存在碎片(高水位问题,分区被删除后,磁盘自动回收)。但表体由于未能被改造成分区表,在多次插入删除操作后,将存在磁盘碎片/高水位问题,需要定期处理,处理方法,请看文档:《如何持续滚动地消除表的高水位问题》。
如何删除过期的业务监控数据
本文2024-09-23 01:17:01发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-144959.html