PO 系列之过期消息的删除

作者:ABAP技巧与实战 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Basis, Data Engineering, SD, 开发, 数据工程, 系统管理, 销售分销

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

**点击蓝字** 关注我们

前言

最近系统管理员监控表BC_MSG过快增长,HANA内存占用90% . 需要解决表BC_MSG 占用空间的问题. 加上之前公众号沟通群中也用人提出过这个问题.

所以借此机会详细说明一下

**PO消息过期机制及删除处理**

消息的记录

所有同步/异步的接口消息都会记录到PO的底层表中.

• BC_MSG which contains the main data for messages processed from Adapter Engine.(存在消息及消息内容)

• BC_MSG_LOG which contains the message versions created by logging(for both asynchronous and synchronous messages) 存放消息的日志信息

• BC_MSG_AUDIT which contains the audit log of the messages.存放消息的审计信息

这三个表是PO系统中占用空间最多,增长最快的表

空间占用统计

可以通过HANA SQL语句查询到表占用空间的情况

SELECT TOP 1000 "SCHEMA_NAME", "TABLE_NAME", "DISK_SIZE"

FROM (SELECT SCHEMA_NAME,TABLE_NAME,DISK_SIZE FROM

PUBLIC.M_TABLE_PERSISTENCE_STATISTICS ORDER BY DISK_SIZE DESC) TMP

PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图

PO消息保留期配置

PO的可以通过参数配置消息的保留时间

有两个地方可以定义保留期(优先级依次增高)

1. **参数定义** : NWA->JAVA系统属性(可以通过站点地图查找)->服务->XPI Adapter: XI -> 属性输入 *persistDuration* 这两个参数可以在线修改,直接生效. (但线修改的值重启系统会丢失,建议由管理员后台修改) 图一

2. **保留期定义** NWA->消息保留->创建一个保留规则 可以针对不同的接口设计不同的保留期规则(比如主数据设计为7天,交易数据设计为30天) 图二

PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图

图一

PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图

图二

**TIPS**

**SPRING**

上述设置的参数会在消息产生的时候,计算出消息的到期日 ,写入BC_MSG-PERSIST_UNTIL 字段.

所以改变参数,并不会改变旧消息, 只会影响新产生的消息的到期日期.

标准删除作业

PO通过后台作业定期删除过期的消息.通过下面的图可以找到后台作业管理页面

**系统只会删除状态是DLVD(成功处理的) 的消息**

PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图

日志信息中可以看到每次处理的统计情况

PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图

紧急处理方式

可以变更消息的到期日,让消息早点被作业删除

在HANA STUDIO 中用数据库管理员帐号登录后, 执行下面的SQL语句, 把到期日提前.

update bc_msg set persist_until = '20210414090000'

where to_dats(persist_until)<='20210416'

_上述语句把20210416 之前到期的消息调整到 20210414 到期_

_然后在PO后台作业处理监控器中手工执行删除操作._

PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图

可以在日志中发现成功删除的信息.

**日志中的条目数=SQL语句变更的条目数,验证通过**

PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图

几个有用的SQL语句

**统计到期日的消息条目数(用于推算每天预计删除的消息条目数)**

select to_dats(persist_until),STATUS,count( * ) from bc_msg

where to_dats(persist_until)<='20220328' and status <> 'NDLV'

group by to_dats(persist_until),STATUS --达到保留期的消息

ORDER BY to_dats(persist_until)

**统计总消息数**

select count( * ) from bc_msg

总结

• 建议对不同类型的消息设置不同的保留期. 通过PO的删除消息作业实现消息的删除.

• 修改保留期只对新产生的消息有效.

• **如果想紧急处理表的空间占用问题, 可以手工调整消息的到日期. 手工执行删除作业.**

** THE **

** END **

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图

**公众号 : syjf1976_abap**

**ABAP开发技巧**

**微信号 : 392077**

**公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群**

PO 系列之过期消息的删除 - 封面图
PO 系列之过期消息的删除 - 封面图
ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「PO系列之过期消息的删除.md」整理生成,仅用于内部技术分享与学习交流。