【问题标题】:Unable to get list of publishing queue items. Timeout expired无法获取发布队列项目的列表。超时已过
【发布时间】:2012-05-15 02:40:10
【问题描述】:

我正在使用 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 清除工具清除队列,但它会运行几秒钟并返回相同的错误:

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 服务。

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

【问题讨论】:

  • 当您过滤列表时,您确实得到了正确的结果吗?
  • 大多数用户 - 是的。但是,当我过滤自己(通过批处理作业发布一百万个项目而搞砸队列的人)时 - 它也会超时。
  • 数据库维护(或缺乏维护)通常应归咎于此类错误。

标签: tridion tridion2009


【解决方案1】:

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

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

【讨论】:

  • 谢谢阿杰。在 Tridion 2009 中,核心服务不存在。使用 TOM COM+ API 是我根据您的建议尝试过的一个选项。简单的程序遍历每个 Tridion 用户 [foreach(User u in tdse.GetUsers()],获取他们的交易列表并一一删除交易。但是,当尝试检索任何有方法的用户的列表时许多项目,GetListPublishTransactions(queueFilter) 函数因超时而失败。这会导致 SQL Server 查询超时设置,我将在获得 DBA 后尝试。
  • 通过直接数据库查询获取发布事务的 TCM URI 列表怎么样?然后您仍然可以通过 API 删除它们(因此不会在 DB 上遇到支持问题)。
【解决方案2】:

你可以尝试很多事情;

在代码中:

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

关于基础设施:

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

【讨论】:

  • +1 表示“使用清除工具删除旧事务”,尽管我怀疑它会遇到相同的超时。
  • 你好尼科利。您知道列出的哪些项目或哪些项目组合解决了问题吗?我们遇到了同样的问题,我怀疑优化数据库和清除发布队列会有所帮助,但希望您能提供反馈。谢谢,
【解决方案3】:

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

如果仍然失败,也许可以在数据库上进行跟踪,看看为什么需要这么长时间。

【讨论】:

    【解决方案4】:

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

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

    您可以查看 Tridion 维护文档here

    【讨论】:

      【解决方案5】:

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

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

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

      1. 失败
      2. 进行中

      除此之外,刚才我看到了一个修补程序。

      Hotfix: CM_2009.1.74381

      看看这个。

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多