管理日志文件

为日志文件分配足够的空间。 对于线性日志记录,您可以在不再需要旧日志文件时将其删除。

特定于循环日志记录的信息

如果使用循环日志记录,请确保在配置系统时有足够的空间存放日志文件(请参阅 mqs.ini文件的LogDefaults节 qm.ini文件的 Log 节)。 日志所使用的磁盘空间量不会超出配置的大小,包括需要时要创建的辅助文件的空间。

特定于线性日志记录的信息

如果您正在使用线性日志,那么日志文件会随着数据的记录而不断添加,并且使用的磁盘空间量会随着时间而增加。 如果记录数据的速率很高,那么新的日志文件将快速使用磁盘空间。

随着时间的推移,不再需要线性日志的较旧日志文件来重新启动队列管理器或对任何损坏的对象执行介质恢复。 以下方法确定仍需要哪些日志文件:
记录器事件消息
发生重要事件 (例如,记录媒体图像) 时,将生成记录器事件消息。 记录器事件消息的内容指定队列管理器重新启动和介质恢复仍需要的日志文件。 有关记录器事件消息的更多信息,请参阅 记录器事件
队列管理器状态
运行 MQSC 命令, DISPLAY QMSTATUS 或 PCF 命令, INQUIRE QUEUE MANAGER STATUS 将返回队列管理器信息,包括所需日志文件的详细信息。 有关 MQSC 命令的更多信息,请参阅 使用 MQSC 命令管理 IBM® MQ,有关 PCF 命令的信息,请参阅 自动化管理任务
队列管理器消息
队列管理器定期发出一对消息以指示需要哪些日志文件:
  • 消息 AMQ7467I 给出了重新启动队列管理器所需的最旧日志文件的名称。 此日志文件和所有更新的日志文件必须在队列管理器重新启动期间可用。
  • 消息 AMQ7468I 提供了介质恢复所需的最旧日志文件的名称。

要确定 "较旧" 和 "较新" 的日志文件,请使用日志文件号而不是文件系统应用的修改时间。

适用于两种类型的日志记录的信息

只有队列管理器重新启动所需的日志文件,活动日志文件才需要联机。 可以将不活动的日志文件复制到归档介质 (例如用于灾难恢复的磁带) ,并从日志目录中除去这些文件。 介质恢复不需要的不活动日志文件可被视为多余的日志文件。 如果您的操作不再关注多余的日志文件,那么可以将其删除。

如果找不到需要的任何日志文件,那么将发出操作员消息 AMQ6767E 。 使日志文件和所有后续日志文件可供队列管理器使用,然后重试该操作。

[UNIX、Linux、Windows、IBM i]

自动清除日志扩展数据块-仅线性日志记录

您可以选择使用恢复不再需要的线性日志扩展数据块的自动管理。

您可以使用 qm.ini 文件的 Log 节中的 LogManagement 属性,或者使用 IBM MQ Explorer来设置自动管理。 更多信息,请参阅 qm.ini文件的日志节

请参阅 DISPLAY QMSTATUSLOG 参数,以获取有关日志操作的更多详细信息,以及有关使用日志的以下命令:

自动获取介质映像-仅线性日志记录

有一个整体开关来控制队列管理器是否自动写入介质映像,缺省情况是尚未设置该开关。

您可以使用以下队列管理器属性来控制是否发生自动介质成像以及进程的频率:
IMGSCHED
队列管理器是否自动写入介质映像
IMGINTVL
写入媒体图像的频率 (以分钟计)
IMGLOGLN
自对象的先前介质映像以来写入的日志兆字节数。

如果您在工作负载非常繁重的白天有一个关键时间,并且希望确保系统吞吐量不会因获取自动介质映像而受到影响,那么您可能希望通过设置 IMGSCHED(MANUAL)来临时关闭自动介质映像。

您可以在工作负载期间随时切换 IMGSCHED
注意: 如果未采用介质映像,那么不会向前移动 MEDIALOG ,因此必须归档扩展数据块或确保有足够的磁盘空间。
您还可以使用 IMGRCOVO 属性来控制其他用户定义对象的自动和手动介质映像:
  • 认证信息
  • 通道
  • 客户机连接
  • 侦听器
  • 名称列表
  • 进程
  • 别名队列
  • 本地队列
  • 服务
  • Topic

对于内部系统对象 (例如对象目录和队列管理器对象) ,队列管理器会根据需要自动写入介质映像。

有关属性的更多信息,请参阅 ALTER QMGR

您还可以仅对本地和永久动态队列启用或禁用自动和手动介质映像。 您可以使用 IMGRCOVQ 队列属性来执行此操作。

有关 IMGRCOVQ 属性的更多信息,请参阅 ALTER QUEUE

注:
  1. 仅当使用线性日志记录时,才支持介质映像。 如果已启用自动介质映像,但正在使用循环日志记录,那么将发出错误消息并禁用队列管理器的自动介质映像属性。
  2. 如果已启用自动介质映像,但未指定日志的频率 (分钟或兆字节) ,那么将发出错误消息,并且不会写入自动介质映像。
  3. 如果需要,可以使用 rcdmqimg 在设置 IMGSCHED(AUTO)时手动记录介质映像。

    这使您能够在适合您企业的时间 (例如,当您的系统安静时) 拍摄媒体图像。 自动媒体成像会考虑这些手动媒体图像,因为采用手动媒体图像会重置时间间隔和日志长度,在此之前会拍摄下一个自动媒体图像。

  4. 队列管理器仅在介质映像中写入持久消息,而不写入非持久消息。 当迁移到更高的 IBM MQ 版本时,这可以减小介质映像的大小。

决定如何设置 IMGLOGLNIMGINTVL

[MQ 9.4.0 2024 年 6 月]默认情况下,对于 Native HA 队列管理器以外的队列管理器, IMGLOGLN 设置为 off 。 (在创建本机 HA 队列管理器时,将 IMGLOGLN 设置为要写入恢复日志的卷上可用空间的 25% 的值。)

[MQ 9.4.0 2024 年 6 月]默认情况下, IMGINTVL 设置为 60 分钟。 当在队列管理器上执行了足够多的新工作以使其值得记录新映像时,将采用 IMGINTVL 指定的时间间隔。 否则,将延迟获取新映像。

您可以更改 IMGLOGLNIMGINTVL 的值,以实现最佳的配置解决方案。 使 IMGLOGLNIMGINTVL 足够大,因此队列管理器仅花费一小部分时间来记录介质映像,但足够小,以便:
  • 损坏的物体可以在合理的时间内恢复,并且
  • 足够小,以便您的日志适合您的磁盘,而不会耗尽空间。

如果设置 IMGLOGLN,那么最佳做法是使 IMGLOGLN 是队列上的数据量的许多倍,是工作负载的数据率的许多倍。 使 IMGLOGLN越大,队列管理器记录介质映像所花费的时间越少。

同样,如果设置 IMGINTVL,那么最佳实践是使 IMGINTVL 是队列管理器记录介质映像所花费的时间量的很多倍。 您可以通过手动记录介质图像来了解记录介质图像所需的时间。

如果使 IMGLOGLNIMGINTVL 过大,那么恢复受损对象可能需要很长时间,因为必须重放自上次介质映像以来的所有扩展数据块。

使 IMGLOGLNIMGINTVL 足够小,以便您可以接受恢复受损对象所花费的最大时间。

使 IMGLOGLNIMGINTVL 非常大,意味着日志会非常大,因为很少记录介质图像。
注意: 确保此大小的日志适合您的日志文件系统,因为如果日志文件系统完全填满,那么您的工作负载将回退。

您可以同时设置 IMGINTVLIMGLOGLN。 这可能有助于确保在繁重的工作负载 (由 IMGLOGLN控制) 期间定期获取自动介质映像,但在工作负载非常轻 (由 IMGINTVL控制) 时仍会偶尔获取自动介质映像。

IMGINTVLIMGLOGLN 是获取自动介质映像的时间间隔和日志数据长度的目标。

不应将这些属性视为固定最大值或最小值。 事实上,如果队列管理器认为这是一个非常好的时机,那么队列管理器可能会决定提前调度自动介质映像:
  • 因为队列是空的,所以取介质映像在性能方面是最高效的,并且
  • 一段时间未记录媒体图像

有时,自动介质映像之间的间隔可能比 IMGINTVL 和/或 IMGLOGLN之间的间隔长一些。

如果队列上的数据量接近 IMGLOGLN,那么介质映像之间的间隔可能大于 IMGLOGLN 。 如果记录介质映像所需的时间几乎与 IMGINTVL 相同,那么介质映像之间的间隔可能大于 IMGINTVL

这是糟糕的做法,因为队列管理器将花费大量时间记录介质图像。

当使用自动媒体图像记录时,队列管理器为每个对象和队列分别记录一个媒体图像,因此队列管理器为每个对象分别跟踪图像之间的时间间隔和日志长度。

随着时间的推移,媒体图像的记录变得交错,而不是同时记录所有对象的媒体图像。 这一惊人的传播了记录媒体图像的性能影响,是使用自动记录媒体图像比人工记录的另一个优势。

手动获取介质映像-仅线性日志记录

记录队列的介质映像涉及将该队列中的所有持久消息写入日志。 对于包含大量消息数据的队列,这涉及将大量数据写入日志,此过程会在系统发生时影响其性能。

记录其他对象的媒体图像可能比较快,因为其他对象的媒体图像不包含用户数据。

您需要仔细考虑何时记录队列的介质映像,以便该过程不会干扰您的峰值工作负载。

必须定期记录所有对象的介质映像,以便更新介质恢复所需的最早日志扩展数据块。

记录队列的介质映像的良好时间是在其为空时,因为此时不会将任何消息数据写入日志。 反之,一个不好的时间是当队列很深或上面有非常大的消息时。

记录队列的介质映像的最佳时间是在系统处于静默状态时; 而错误时间是在峰值工作负载期间。 例如,如果您的工作负载在午夜时始终处于安静状态,那么您可能决定在每晚的午夜记录媒体图像。

交错记录每个队列可将性能影响传播出去,从而降低其效果。 自上次记录介质映像以来的时间越长,记录这些映像就越重要,因为介质恢复所需的日志扩展数据块数量正在增加。

注: 执行介质恢复时,必须同时在日志文件目录中提供所有必需的日志文件。 确保获取您可能想要恢复的任何对象的常规介质映像,以避免耗尽磁盘空间来存放所有必需的日志文件。
例如,要获取队列管理器中所有对象的介质映像,请运行 rcdmqimg 命令,如以下示例中所示:
[Windows]打开 Windows
rcdmqimg -m QMNAME -t all *
[AIX][Linux]关于 AIX® and Linux®
rcdmqimg -m QMNAME -t all "*"

运行 rcdmqimg 会将介质日志序号 (LSN) 向前移动。 有关日志序列号的更多详情,请参阅使用 dmpmqlog 命令转储日志内容rcdmqimg 不会自动运行,因此必须手动或从您创建的自动任务运行。 有关此命令的更多信息,请参阅 rcdmqimgdmpmqlog

如果您已选择将线性日志记录与队列管理器控制的自动介质映像配合使用,那么不需要使用 rcdmqimg 手动记录介质映像来管理日志空间。

注: 在运行 rcdmqimg 命令时,还可以发出消息 AMQ7467 和 AMQ7468 。

部分媒体图像

最好仅将 IBM MQ 消息用于预期在不久的将来使用的数据,以便每条消息在队列中的时间相对较短。

相反,使用 IBM MQ 消息来长期存储数据 (如数据库) 的做法很差。

确保您的队列相对较浅也是好的做法,不好的做法是有深度队列,其消息已在队列中排了很长时间。

通过遵循这些准则,您可以使队列管理器优化自动记录媒体图像的性能。

记录空队列的媒体图像非常高效 (从性能角度来看) ,而获取队列上包含大量数据的媒体图像非常低效,因为所有这些数据都必须写入媒体图像中的日志。

对于最近在其上放置消息的浅层队列,队列管理器可以进行进一步优化。

如果队列上当前的所有消息都是在最近放入的,那么队列管理器可能能够在放入所有消息之前代表时间 (恢复点) 记录介质映像,因此能够记录空队列的映像。 在性能方面,此过程的成本非常低。

如果随后获取了位于恢复点的队列上的所有消息,那么无需将这些消息记录在介质映像中,因为它们不再位于队列上。

这称为 部分介质映像。 然后,在不太可能需要恢复队列的情况下,将重放自上次介质映像以来与此队列相关的所有日志记录,以便复原所有最近放入的消息。

即使在恢复点的队列上存在一些当前在队列上的消息 (因此必须记录在部分介质映像中) ,记录此较小的部分介质映像仍然比记录所有消息的完整介质映像更高效。

确保消息在队列中保留很短的时间可能会提高自动记录媒体图像的性能。