3

站点核心 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,那就太好了。

谢谢!

4

3 回答 3

7

谢谢你们的回应。

我还与支持人员进行了交谈,他们能够提供一个 SQL 脚本来清理 Blobs 表:

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)

我对脚本所做的唯一更改是添加“顶部(1000)”,以便将其删除为更小的块。我最终将这个数字提高到了 200,000,并且一次运行大约一个小时。

关于原因,我们还不太确定。我们认为我们的自定义代理运行过于频繁,导致插入相互堆叠。

另请注意,有一个 Sitecore 更新显然解决了 Blob 表失控的问题。更新是 6.6,更新 3。

于 2013-10-28T12:57:15.657 回答
2

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

他们给了我们一个 Sitecore Support DLL,并建议对 Dataprovider 进行 Web.Config 更改——从main type="Sitecore.Data.$(database).$(database)DataProvider, Sitecore.Kernel"到新的。

我在你的这个问题上发帖的原因是因为我们花费的大部分时间都在清理 Blob,他们给了我们这个 DLL 来提高清理 Blob 的速度。所以我认为它也可能对你有所帮助。

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

希望这对你有帮助!

问候, Varun Shringarpure

于 2013-10-28T06:35:05.350 回答
0

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

如果您有 DBA,请让他(她)参与进来。

于 2013-10-23T01:45:35.800 回答