2012-05-15 50 views
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 

所以我尝试使用公开队列管理器工具机智能无极清理队列,但只是抛出一个500错误,这是具有在太多的项目一致队列。

然后我试图清除使用外表套上清除工具队列,但仰卧起坐几秒钟,并返回相同的错误:

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 +,发布服务和传输服务。

因此看起来发布队列处于不可访问状态。您能否提出原因可能是什么或我的下一步?

+1

当你过滤列表,你确实得到它? –

+1

大部分用户 - 是的。但是,当我对自己进行过滤时(通过批量发布一百万件物品来搞砸队列的人) - 它也超时了。 –

+0

数据库维护(或缺乏)通常是造成这种类型的错误的原因。 –

回答

4

有很多事情可以尝试;

在代码:

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

在基础设施:

  1. 我不知道你正在尝试做的,但如果你只是删除交易,可能只是使用清除工具(但随后您正在编码,我假设它对于您的用例来说不够聪明)
  2. 使用清除工具删除与您的用例无关的旧事务
  3. 确保数据库完全优化
  4. (如上所述)增加Tridion配置管理单元中的超时值
  5. 确保您拥有适用于您的Tridion版本的最新修补程序(2009 GA版本的队列性能发生了许多变化和SP1
  6. 一般情况下确保硬件正在执行
+0

+1“使用清除工具删除旧事务”,尽管我怀疑它会遇到同样的超时。 –

+0

嗨尼科利。你知道哪些项目,或哪些项目的组合,从列出的问题解决问题吗?我们遇到同样的问题,我怀疑优化数据库和清除发布队列将有助于实现这一目标,但希望得到您的反馈。谢谢, –

4

对于SQLServer和Internet Information Server,您的超时设置是什么?如果他们处于股票违约状态(不记得他们是什么),可能值得尝试增加它们。

如果它仍然失败,可能在数据库上留下痕迹,看看它为什么要花这么长时间。

5

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

这样,您可以以受控方式删除交易,而无需直接在数据库上工作。

+0

谢谢Arjen。在Tridion 2009中,核心服务不存在。使用TOM COM + API是我根据您的建议尝试的一个选项。简单的程序循环遍历每个Tridion用户[foreach(tdse.GetUsers()中的用户u)),获取他们的事务列表并逐个删除事务。但是,当尝试为任何也有路的用户检索列表时很多项目,GetListPublishTransactions(queueFilter)函数失败并导致超时,这会导致SQL Server查询超时设置,一旦我获得了DBA的支持,我将尝试这些设置。 –

+1

如何获取发布事务的TCM URI列表通过直接的数据库查询?然后你仍然可以通过API删除它们(因此不会在DB上得到支持问题) –

+0

这就是我所建议的:) –

0

我想,这可能是由于'N'In-Progress项数位于发布队列上造成的。

不要尝试移除所有物品。顺序

更好删除队列项目: -

  1. 失败
  2. 在进步

除了这个,刚才我看到一个修补程序。

Hotfix: CM_2009.1.74381

看一看这一点。

3

除了这里列出的所有优点之外,您是否优化了数据库?您应该计划定期更新数据库统计信息并重新编制索引。请咨询您的DBA以安排维护计划。

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

您可以检查外表套上维护文档here

0

从你在排队甩一个极大的项目之前恢复CM数据库的备份。不漂亮,但它可能会让你在那里。

否则,请咨询Tridion支持他们可能愿意采取哪些数据库脚本来解决此问题。

相关问题