对保证送达消息暂存进行碎片整理
Solace PubSub+事件代理用于存储保证消息的池文件可能会随着时间的推移变得“碎片化”,尤其是当消费者频繁离线且不重新连接时。碎片化可能发生是因为等待离线消费者交付的少量消息被保留,这阻止了已经消费且也在池文件中的大量消息被移除。这导致了已交付给消费者的消息占用大量磁盘空间的不良效果。
要从池文件中移除已交付的消息并回收磁盘空间,您可以手动触发碎片整理(见手动碎片整理)或配置事件代理自动碎片整理消息池(见自动碎片整理)。
通常情况下:
- 所有手动和自动(基于计划和基于阈值规则)的碎片整理行为可以共存并一起工作。
- 如果碎片整理运行已经在进行中(无论由什么触发),任何自动碎片整理运行(自动或手动)都会被忽略(跳过)。
- 所有手动和自动碎片整理运行都可以被管理员手动停止。
手动碎片整理
要手动触发碎片整理,请输入以下命令。当开始后,消息池文件碎片整理将在后台运行。
solace(admin)# system message-spool
solace(admin/system/message-spool)# defragment-spool-files start
要停止活动的池文件碎片整理过程,请输入以下命令:
solace(admin/system/message-spool)# defragment-spool-files stop
- 如果存在与开放事务相关的入队消息,碎片整理可能无法完全碎片整理消息池。碎片整理从最旧的入队消息开始,并按它们到达的顺序整理消息,直到它到达最新的消息或一个开放事务的一部分消息。关于最近碎片整理的开放事务的信息可以在您发出
show message-spool
命令时的Exit Condition
字段中获得。一旦事务被提交或回滚,可以再次运行碎片 整理。在某些情况下,如果事务没有处于准备状态,可能无法提交或回滚事务。在这些情况下,可能需要客户端断开来解决阻塞的事务。 - 当使用HA冗余设备对时,只能在活动设备上执行消息池碎片整理。如果发生HA故障转移,消息池碎片整理将停止。要重新启动碎片整理过程,您必须再次使故障设备活动,然后再次执行
defragment-spool-files start
命令。要在备份设备上碎片整理消息池,发起HA故障转移以使备份设备活动。这只适用于设备。当在活动软件事件代理上发起碎片整理时,活动和备用的消息池都会被碎片整理。
以下是如何手动启动碎片整理池文件,以及检查其状态和停止运行的CLI示例:
solace(admin)# system message-spool
solace(admin/system/message-spool)# defragment-spool-files start
Defragmentation has been initiated.
solace# show message-spool detail
Config Status: Enabled (Primary)
Maximum Spool Usage: 60000 MB
. . .
Operational Status: AD-Active
Datapath Status: Up
Synchronization Status: Synced
. . .
Defragmentation:
Status: Active (8.8%)
Schedule Enabled: No
Days: daily
Times: 0:00
Threshold Enabled: No
Fragmentation: 50%
Spool Usage: 50%
Minimum Interval: 15 minutes
Estimated Fragmentation: 12%
Estimated Recoverable Space: 123 MB
Last Result:
Completed On: May 10 2020 10:11:12
Completion %: 100%
Exit Condition: Success
Number of delete in-progress: 0
. . .
ADB Disk Total
Current Persistent Store Usage (MB) 0.0000 0.0000 0.0000
Number of Messages Currently Spooled 0 0 0
. . .
solace(admin/system/message-spool)# defragment-spool-files stop
Defragmentation has been stopped.
solace# show message-spool detail
Config Status: Enabled (Primary)
Maximum Spool Usage: 60000 MB
. . .
Operational Status: AD-Active
Datapath Status: Up
Synchronization Status: Synced
. . .
Defragmentation:
Status: Idle
Schedule Enabled: No
Days: daily
Times: 0:00
Threshold Enabled: No
Fragmentation: 50%
Spool Usage: 50%
Minimum Interval: 15 minutes
Estimated Fragmentation: 12%
Estimated Recoverable Space: 123 MB
Last Result:
Completed On: May 10 2020 10:11:12
Completion %: 58%
Exit Condition: Unmovable XA Transaction
XID:XXX-XXXXXXX
Number of delete in-progress: 0
. . .
ADB Disk Total
Current Persistent Store Usage (MB) 0.0000 0.0000 0.0000
Number of Messages Currently Spooled 0 0 0
. . .
自动碎片整理
您可以配置事件代理自动碎片整理消息池,触发方式有两种:
- 基于固定时间计划,例如每天凌晨1点(见基于计划的碎片整理)。
- 基于碎片化和使用量超出阈值(见基于阈值的碎片整理)。
您可以配置事件代理执行计划和基于阈值的碎片整理,这两种选项并不互斥。
基于计划的碎片整理
要安排一周中触发碎片整理运行的日期,请输入以下命令:
solace(config)# hardware
solace(config/hardware)# message-spool
solace(config/hardware/message-spool)# defragment-spool-files
solace(.../message-spool/defragment-spool-files)# schedule
solace(...spool/defragment-spool-files/schedule)# days <days-of-week>
其中:
<days-of-week>
是daily
或一周中的日子或数字的逗号分隔列表,其中0是星期日,1是星期一,等等。
该命令的否定形式no days
将值返回到默认值,daily
。
要安排每天触发碎片整理运行的时间,请输入以下命令:
solace(...spool/defragment-spool-files/schedule)# times <times-of-day>
其中:
<times-of-day>
是hourly
或最多四个时间的逗号分隔列表,格式为hh:mm
,其中hh
在0到23之间,mm
在0到59之间。
该命令的否定形式no times
将值返回到默认值,0:00
。
默认情况下,基于计划的碎片整理是禁用的。要启用基于计划的碎片整理,请输入以下命令:
solace(...spool/defragment-spool-files/schedule)# no shutdown
要禁用基于计划的碎片整理,请输入以下命令:
solace(...spool/defragment-spool-files/schedule)# shutdown
基于阈值的碎片整理
一旦启用,基于阈值的碎片整理运行是由以下三个条件全部为真触发的:
- 碎片化量达到了某个百分比。
- 池使用量达到了某个百分比。
- 自上一次碎片整理运行以来,已经过去了最少的时间(无论其触发因素如何)。
要配置触发碎片整理运行的碎片化百分比,请输入以下命令:
solace(config)# hardware
solace(config/hardware)# message-spool
solace(config/hardware/message-spool)# defragment-spool-files
solace(.../message-spool/defragment-spool-files)# threshold
solace(...pool/defragment-spool-files/threshold)# fragmentation-percentage <percentage>
其中:
<percentage>
是30到100之间的碎片化百分比。
该命令的否定形式no fragmentation-percentage
将值返回到默认值,50百分比。
要配置触发碎片整理运行的池使用百分比,请输入以下命令:
solace(...pool/defragment-spool-files/threshold)# usage-percentage <percentage>
其中:
<percentage>
是30到100之间的池使用百分比。
该命令的否定形式no usage-percentage
将值返回到默认值,50百分比。
要配置自上次碎片整理运行以来必须经过的最短时间,请输入以下命令:
solace(...pool/defragment-spool-files/threshold)# min-interval <interval>
其中:
<interval>
是分钟数。
该命令的否定形式no min-interval
将值返回到默认值,15分钟。
默认情况下,基于阈值的碎片整理是禁用的。要启用基于阈值的碎片整理,请输入以下命令:
solace(...pool/defragment-spool-files/threshold)# no shutdown
要禁用基于阈值的碎片整理,请输入以下命令:
solace(...pool/defragment-spool-files/threshold)# shutdown