Sitecore数据库清理失败

时间:2013-10-22 20:19:09

标签: sitecore sitecore6 sitecore-media-library

Sitecore 6.6

我也正在与Sitecore支持人员讨论此问题,但我认为我也会与社区联系。

我们有一个自定义代理,可以将文件系统上的媒体与媒体库同步。这是一个新代理,我们犯了不监控数据库大小的错误。它应该导入大约8 GB的数据,但数据库在很短的时间内膨胀到713 GB。事实证明,“master”和“web”数据库中的“Blobs”表几乎占据了所有这些空间。

我尝试使用“控制面板”中的“清理数据库”工具。我只选择了一个数据库。由于消耗了SQL Server上所有可用的锁,它在被轰炸之前运行了6个小时:

    Exception: System.Data.SqlClient.SqlException
    Message: The instance of the SQL Server Database Engine cannot obtain a LOCK 
resource at this time. Rerun your statement when there are fewer active users. 
Ask the database administrator to check the lock and memory configuration for 
this instance, or to check for long-running transactions.

然后将所有东西都卷回来。注意:我将SQL和DataProvider超时增加到无穷大。

其他人处理类似这样的事情?如果我能用较小的块“清理”数据库以避免压倒SQL Server,那将是件好事。

谢谢!

3 个答案:

答案 0 :(得分:6)

感谢您的回复,伙计。

我还提到了支持,他们能够提供一个清理Blobs表的SQL脚本:

DECLARE @UsableBlobs table(
    ID uniqueidentifier
    );

INSERT INTO 
    @UsableBlobs    
select convert(uniqueidentifier,[Value]) as EmpID from [Fields]
where [Value] != '' 
and (FieldId='{40E50ED9-BA07-4702-992E-A912738D32DC}' or FieldId='{DBBE7D99-1388-4357-BB34-AD71EDF18ED3}') 
delete top (1000) from [Blobs] 
where [BlobId] not in (select * from @UsableBlobs)

我对脚本所做的唯一更改是添加" top(1000)"所以它以较小的块删除。我最终将这个数字提高到200,000,一次可以运行大约一个小时。

关于原因,我们还不太确定。我们认为我们的自定义代理程序运行得太频繁,导致插入程序堆叠在一起。

另请注意,Sitecore更新显然解决了Blobs表失控的问题。更新是6.6,更新3.

答案 1 :(得分:2)

我之前遇到过这样的问题,我们已经联系过Sitecore支持。

他们给了我们一个Sitecore支持DLL,并为Dataprovider建议了一个Web.Config更改 - 来自 main type =“Sitecore.Data。$(数据库)。$(数据库)DataProvider,Sitecore.Kernel”< / strong>到新的。

我在你的这个问题上发帖的原因是因为我们花费的大部分时间都是清理Blob而且他们给了我们这个DLL以增加清理Blob的速度。所以我认为这对你也有帮助。

因此,我想建议您是否可以在这种情况下请求Sitecore支持,我相信您可以获得解决您案件的最佳解决方案。

希望这能帮到你!

此致 Varun Shringarpure

答案 2 :(得分:0)

如果您有暂存环境,我建议您获取数据库副本并尝试缩小数据库。部分数据库大小也可能与事务日志有关。

如果你有DBA,请让他(她)参与其中。