上传图片时超时

时间:2012-11-26 13:16:22

标签: tridion tridion-2011

我目前正在测试Tridion 2011,并且在创建包含上传内容的多媒体组件时遇到了问题(而不是外部)。

我填写标题,架构,多媒体类型,从我的系统中选择一个文件,然后单击“保存”。我收到Saving item...信息消息,大约30秒后我会收到The wait operation timed out消息。

C:\Program Files (x86)\Tridion\log目录中似乎没有任何错误消息。查看事件查看器,我看到以下与保存操作相关的信息

Unable to save Component (tcm:4-738361).
The wait operation timed out

Error Code:
0x8004033F (-2147220673)

Call stack:
System.Data.SqlClient.SqlConnection.OnError(SqlException,Boolean,Action`1)
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException,Boolean,Action`1)
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject,Boolean,Boolean)
System.Data.SqlClient.TdsParser.TryRun(RunBehavior,SqlCommand,SqlDataReader,BulkCopySimpleResultSet,TdsParserStateObject,Boolean&)
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader,RunBehavior,String)
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior,RunBehavior,Boolean,Boolean,Int32,Task&,Boolean)
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior,RunBehavior,Boolean,String,TaskCompletionSource`1,Int32,Task&,Boolean)
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1,String,Boolean,Int32,Boolean)
System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
Tridion.ContentManager.Data.AdoNet.Sql.SqlDatabaseUtilities.SetBinaryContent(Int32,Stream)
Tridion.ContentManager.Data.AdoNet.ContentManagement.ItemDataMapper.Tridion.ContentManager.Data.ContentManagement.IItemDataMapper.SetBinaryContent(Stream,TcmUri)
Tridion.ContentManager.ContentManagement.RepositoryLocalObject.SetBinaryContent(BinaryContent)
Tridion.ContentManager.ContentManagement.Component.OnSaved(SaveEventArgs)
Tridion.ContentManager.IdentifiableObject.Save(SaveEventArgs)
Tridion.ContentManager.ContentManagement.VersionedItem.Save(Boolean)
Tridion.ContentManager.ContentManagement.VersionedItem.Save()
Tridion.ContentManager.BLFacade.ContentManagement.VersionedItemFacade.UpdateAndCheckIn(UserContext,String,Boolean,Boolean)
XMLState.Save
Component.Save

由于another issue,我已将Content Manager管理单元中的超时设置设置为较高值(超过10分钟)。

如果有帮助,内容管理数据库中的BINARIES表格为25GB。

有什么想法吗?感谢。

编辑1

根据Bart Koopman的建议,我的DBA重建了索引,但并未认为事务日志对性能有任何影响。问题依然存在。

编辑2

我刚刚找到了错误的更多细节

Unable to save Component (tcm:0-0-0).
Timeout expired.
The timeout period elapsed prior to completion of the operation or the server is not responding.
A database error occurred while executing Stored Procedure "EDA_ITEMS_UPDATEBINARYCONTENT".EDA_ITEMS_UPDATEBINARYCONTENT

看了这个程序之后,看起来以下语句可能是根本原因

SELECT 1 FROM BINARIES WHERE ID = @iBINARY_ID AND CONTENT IS NULL

我手动执行它,@ iBINARY_ID为-1,2分钟后仍然没有完成。我假设当我插入一个新的多媒体组件时,查询将是类似的(即表中不存在id)。

BINARIES表目前有一个NON-CLUSTERED主键。也许解决方案是将其更改为CLUSTERED主键?但是,我认为它是非集群的原因。

2 个答案:

答案 0 :(得分:14)

刚收到SDL客户支持的回复。显然,这是与统计数据和所选查询计划相关的已知问题。

从SQL Server Management Studio手动运行以下语句可以解决问题(甚至不需要为我完成)

SELECT 1 FROM BINARIES WHERE ID = -1 AND CONTENT IS NULL

希望这可以帮助其他人!

答案 1 :(得分:4)

数据库操作超时通常表示配置错误或缺乏维护。通过增加超时,你只是解决问题而不是解决问题。

使用大型二进制表,您需要确保使用与日志文件分开的数据文件(在不同的物理分区/磁盘上分开)以及可能在多个物理分区上的多个数据文件进行正确的数据库设置利用性能提升。

接下来,您需要确保每天/每小时执行标准数据库维护。像每小时备份和截断事务日志这样的事情将大大提高您的数据库性能(在MS SQL Server上,超过1GB的事务日志会大幅减慢数据库速度,您应该始终尝试通过及时备份/ trucate将其保持在该大小以下)。更新统计数据和重建索引也是您不应该经常忘记的事情。