5

我在 Tridion 2009 SP1 上。在某一时刻,查看所有用户(即不是过滤器)的发布队列的功能刚刚停止工作。在 CM GUI 中收到超时错误:

(80040E31) Timeout expired
Unable to get list of publishing queue items.

SQLUtilities.OpenRecordsetByStoredProcedure
SystemDAL.GetListData
SystemBLST.lObjListPublishTransactions
SystemBLST.IBLSystemST_GetListData
ManagementInfo.GetListPublishQueue
Request.GetList

所以我尝试使用 Publication Queue Manager Powertool 清理队列,但这只会引发 500 错误,这与队列中的项目太多是一致的。

然后我尝试使用 Tridion Purge Tool 清除队列,但它会运行几秒钟并返回相同的错误:

14-May-2012 21:10:12 Log cleared.
14-May-2012 21:10:12 Purge action started at 14-May-2012 21:10:12
14-May-2012 21:10:12 Keeping the last 5 versions.
14-May-2012 21:10:12 Recursive mode: False
14-May-2012 21:11:12 FAILED: <?xml version="1.0"?>
<tcm:Error xmlns:tcm="http://www.tridion.com/ContentManager/5.0" ErrorCode="80040E31" Category="7" Source="Kernel" Severity="1">
    <tcm:Line ErrorCode="80040E31" Cause="false" MessageID="4613"><![CDATA[Unable to get list of publishing queue items.]]>
        <tcm:Token>RESID_4485</tcm:Token>
        <tcm:Token>RESID_15821</tcm:Token>
    </tcm:Line>
    <tcm:Line ErrorCode="80040E31" Cause="true">
        <![CDATA[Timeout expired]]>
    </tcm:Line>
    <tcm:Details>
        <tcm:CallStack>
            <tcm:Location>SQLUtilities.OpenRecordsetByStoredProcedure</tcm:Location>
            <tcm:Location>SystemDAL.GetListData</tcm:Location>               
            <tcm:Location>SystemBLST.lObjListPublishTransactions</tcm:Location>
            <tcm:Location>SystemBLST.IBLSystemST_GetListData</tcm:Location>
            <tcm:Location>ManagementInfo.GetListPublishQueue</tcm:Location>
        </tcm:CallStack>
     </tcm:Details>
</tcm:Error>

事件日志都显示完全相同的错误。哦,是的,我已经尝试重新启动 COM+、Publisher 和 Transport 服务。

因此,发布队列似乎处于不可访问状态。请您建议可能是什么原因或我的下一步?

4

6 回答 6

5

也许您可以查询发布事务表以获取所有事务的 tcm uri 列表,将其移动到自定义数据库中并使用 TOM.NET API / 核心服务单独打开每个事务并根据状态删除它使用API。

这样,您可以以受控方式删除事务,而无需直接处理数据库。

于 2012-05-15T04:20:19.993 回答
4

SQLServer 和 Internet Information Server 的超时设置是什么?如果它们处于股票违约状态(无法立即记住它们是什么),那么可能值得尝试增加它们。

如果它仍然失败,也许在数据库上放一个跟踪,看看为什么它花了这么长时间。

于 2012-05-15T03:17:25.303 回答
4

您可以尝试很多事情;

在代码中:

  1. 将数据集减少到可能的特定时间段(每周、每月)
  2. 一一选择特定的统计类型(失败、成功等)

关于基础设施:

  1. 我不确定您要做什么,但是如果您只是删除事务,也许只需使用清除工具(但是当您编码时,我假设它对于您的用例来说不够聪明)
  2. 使用清除工具删除与您的用例无关的旧事务
  3. 确保数据库完全优化
  4. (如前所述)增加 Tridion 配置管理单元中的超时时间
  5. 确保您拥有适用于您的 Tridion 版本的最新补丁(2009 GA 和 SP1 的队列性能发生了许多变化
  6. 通常确保硬件正在执行
于 2012-05-15T08:11:24.087 回答
3

除了此处列出的所有优点之外,您是否优化了数据库?您应该计划定期更新数据库统计信息并重新索引。请与您的 DBA 联系以安排维护计划。

除了定期清理/清除您的事务之外,快速更新 CM DB (MSSQL: sp_updatestats) 上的统计信息将有助于提高 GUI 的性能。

您可以在此处查看 Tridion 维护文档

于 2012-05-15T13:33:47.000 回答
0

我认为,这可能是由于发布队列'N'中的项目数量所致。In-Progress

不要试图一次删除所有项目。

最好按此顺序删除队列项目:-

  1. 失败的
  2. 进行中

除此之外,刚才我看到了一个 Hotfix。

Hotfix: CM_2009.1.74381

看看这个。

于 2012-05-15T08:13:40.560 回答
0

从您在队列中转储大量项目之前恢复 CM 数据库的备份。不漂亮,但它可能会让你到达那里。

否则,请与 Tridion 支持人员讨论他们可能愿意批准哪些数据库脚本来解决此问题。

于 2012-05-15T21:23:35.353 回答