深入biztalk清理消息作业(job)

原创 2007年09月28日 13:44:00

Biztalk中消息保存在messagebox数据库的spool表和parts表中。SPOOL 表的内容是消息的总体性描述和消息的上下文属性,一条消息在此表中为一条记录。PARTS 表存放多部分消息的各个部分,一个部分在此表中占一条记录。哪一个是正文部分由spool表中的uidBodyPartID标识。

Biztalk保存每一条消息,不管这个消息是否已经不再有用。随着时间推移,消息会不断堆积,占用占用硬盘空间,给系统的性能带来负面影响。所以一般需要定期对messagebox数据库中的消息进行清理,把一些过期的无用的消息清理掉。

Biztalk 2006 提供了消息清理工具,帮助用户日常清理消息。清理消息的依据就是看这条消息是否被服务实例引用,如果这条消息已经不被任何实例引用,说明此条消息已经被使用完毕,在系统中不会再被使用,可以删除。

前一篇文章《深入biztalk消息引用和引用计数》中已经分析了biztalk中消息的引用机制,对此部分不了解的朋友可以参考此文章。

引用计数分为两种情况:

l         一个消息只有一个服务订阅:这种情况十分简单,引用计数保存在本地引用计数表BizTalkServerApplication_MessageRefCountLog中,因为只有一个服务实例使用这个消息,所以这个服务实例完成后直接把这个消息的guid存入MessageZeroSum表中,表示这条消息已可删除。

l         一个消息有多个服务订阅:这种情况比较复杂,把引用计数保存到全局消息引用计数表。清理消息作业大部分的工作就是根据全局消息引用表来计算判断哪些消息不再被引用了。

 

Biztalk2006中清理消息应该执行MessageBox_Message_ ManageRefCountLog_BizTalkMsgBoxD作业,在这个作业中会调用MessageBox_Message_ Cleanup_BizTalkMsgBoxDb作业,从而一同完成清理消息的任务。

MessageBox_Message_ManageRefCountLog_BizTalkMsgBox只有一个步骤,调用bts_ ManageMessageRefCountLog存储过程,下面消息分析这个存储过程的作用。

1.       清理非活动引用计数表

消息代理把消息引用计数记入到全局消息引用计数表MessageRefCountLog1或者MessageRefCountLog2中。这个过程是逐笔记录下一个消息被引用的次数,和被释放引用的次数的一个流水过程。

Biztalk还有一个全局引用计数汇总表MessageRefCountLogTotals,此表汇总两个全局引用计数表的引用计数。

MessageRefCountLogTotals表结构如下:

uidMessageID ―― 消息guid

snRefCount ―― 引用计数

tnLastTable ―― 最后更新总表的是哪个分表

根据ActiveRefCountLogtnActiveTable字段,获得当前非活动引用计数表,调用存储过程int_PurgeMessageRefCountLog清理非活动引用计数表。

int_PurgeMessageRefCountLog存储过程的作用:

l         把非活动引用计数表按照消息guid分组汇总每个消息的引用计数

l         把非活动引用计数表的消息计数跟全局引用计数汇总表相同guid的消息的引用计数相加更新到全局引用计数汇总表。

l         把非活动引用计数表中在全局引用计数汇总表中没有的消息计数插入到全局引用计数汇总表。

l         将所有此次汇总表中受影响的记录的tnLastTable设为这个非活动引用计数表的表号。

l         因为非活动引用计数表中的内容已经全部更新到全局引用计数汇总表,全部删除非活动引用计数表的记录。

l         将全局引用计数汇总表中最后更新为活动表号的,引用计数snRefCount为零的消息记录转存到MessageZeroSum表中,同时把这些记录在全局引用计数汇总表中删除。在MessageZeroSum表中的消息就表示是可以删除的了。

2.       交换活动表,再清理当前活动引用计数表

上一步处理了非活动引用计数表,此时非活动引用计数表应该为空。这一步把活动引用计数表和非活动引用计数表作个交换,通过重设ActiveRefCountLogtnActiveTable字段来完成。这样原来的活动引用计数表就变成了非活动引用计数表,同样调用int_PurgeMessageRefCountLog过程,来清理当前非活动引用计数表。过程同上一步骤一样。

通过这两个步骤,把两个全局引用技术表都进行了处理,同时也把不再被引用的消息从全局引用计数汇总表中删除,转存到了MessageZeroSum表中。MessageZeroSum表中的消息表示是可以删除消息,MessageZeroSum表主要字段就是一个消息的guid

3.       调用实际清理消息作业

这一步骤调用MessageBox_Message_ Cleanup_BizTalkMsgBoxDb作业,MessageBox_Message_ Cleanup_BizTalkMsgBoxDb作业也只有一个步骤,是调用bts_PurgeMessages存储过程,bts_PurgeMessages存储过程又调用int_PurgeMessageZeroSumTable存储过程。

下面看一下int_PurgeMessageZeroSumTable过程的功能:

l         spool表中跟MessageZeroSum表相关的消息删除。

l         清空MessageZeroSum表。

 

Biztalk 2010 的安装与配置

1.  软件安装 安装环境: Windows7 ultimate 版 SQL Server 2008 R2 Enterprise 版。注意:SQL Sever必须要用R2...
  • u011782991
  • u011782991
  • 2013年11月27日 15:11
  • 844

Biztalk中配置EDI消息交换

Biztalk对EDI的支持          EDI作为一项技术标准已经有几十年的历史了。从biztalk 2006R2版本以来,biztalk就能对EDI提供标准的支持。EDI与biztalk结...
  • u011782991
  • u011782991
  • 2013年12月09日 15:08
  • 993

Biztalk AS2开发经验总结

一、    准备证书    4 1、    升级win2008 R2证书服务    4 2、    申请证书    6 二、    配置证书    13 1、    为AS2配置证书   ...
  • j7lfhdxh
  • j7lfhdxh
  • 2017年02月10日 20:35
  • 392

Biztalk组件介绍

1.    biztalk的由来 没有任何应用程序是完全孤立的。无论我们喜欢与否,将系统整合在一起已成为必然。系统整合不仅仅是交换字节,随着应用软件的复杂化和面向服务的发展,其现实目标也即将实现...
  • u011782991
  • u011782991
  • 2013年10月24日 14:53
  • 830

Biztalk AS2开发经验总结

一、    准备证书    4 1、    升级win2008 R2证书服务    4 2、    申请证书    6 二、    配置证书    13 1、    为AS2配置证书   ...
  • swywkc2i
  • swywkc2i
  • 2017年02月11日 19:47
  • 83

MSSQL server触发器中新建作业(job),作业中5分钟后执行update column

/*新建job的sql语句可由sql server 对象资源管理器 Sql server代理中的作业->新建作业生成模板*/ /*sql server agent 服务要打开*/ create t...
  • lizhiqiang5846
  • lizhiqiang5846
  • 2016年12月04日 22:54
  • 428

Biztalk AS2开发经验总结

一、    准备证书    4 1、    升级win2008 R2证书服务    4 2、    申请证书    6 二、    配置证书    13 1、    为AS2配置证书   ...
  • x9llhpfx
  • x9llhpfx
  • 2017年02月08日 22:39
  • 163

Biztalk AS2开发经验总结

一、    准备证书    4 1、    升级win2008 R2证书服务    4 2、    申请证书    6 二、    配置证书    13 1、    为AS2配置证书   ...
  • tlrxt1xn
  • tlrxt1xn
  • 2017年02月09日 21:43
  • 298

AUD$ 引起的SYSTEM表空间过大

oracle 11g 默认审计开启DB,数据库在实际运行中,会将审计放入aud$ 中,因此SYSTEM表空间会出现的比较大,system表空间过大会影响数据库性能,因此处理方法是 (1) trunc...
  • ptzrbin
  • ptzrbin
  • 2014年01月23日 14:22
  • 5571

分区truncate操作的介绍

① 马上回收空间:   alter table table_name truncate partition partition_name drop storage;   ② 同时维护全局索引: ...
  • enenwenwen
  • enenwenwen
  • 2014年06月09日 11:33
  • 3053
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入biztalk清理消息作业(job)
举报原因:
原因补充:

(最多只允许输入30个字)