【问题标题】:Sitecore - Increasingly low performance when adding large no. of itemsSitecore - 添加大号时性能越来越低。项目
【发布时间】:2013-07-02 01:15:04
【问题描述】:

在我们基于 sitecore 6.6.0 (rev. 130404) 的项目中,我们需要将数据从旧系统的数据库迁移到 sitecore 数据库。我们需要迁移大约 650,000 个对象。旧数据库中的这些对象中的每一个都将在主数据库中创建大约 4 个站点核心项目。所以这是一个相当大的数据集正在迁移。

我们已将 sitecore API 与 Windows 应用程序连接起来,并从该应用程序运行数据迁移逻辑。在数据迁移开始时,速度相当快,每秒大约有 4 个对象被传输到 sitecore 主数据库。前 10,000 个对象只用了 40 分钟。按照这个速度,可以预测在 7 小时内将迁移 100,000 个对象。

但问题是随着时间的推移,事情变得越来越明显缓慢。在迁移了大约 100,000 个对象后,现在仅迁移 30,000 个对象需要大约 7 个小时。我什至不时重建 sitecore 数据库索引,如性能调整指南中所述。我们也不执行任何站点核心查询来查找新创建的站点核心项目的放置位置。当我们进行数据迁移时,没有任何站点核心代理或 lucene 索引更新操作正在运行。

数据迁移逻辑开头的代码如下:

using (new Sitecore.SecurityModel.SecurityDisabler())
using (new Sitecore.Data.Proxies.ProxyDisabler())
using (new Sitecore.Data.DatabaseCacheDisabler())
using (new Sitecore.Data.BulkUpdateContext())

这种缓慢的原因可能是站点核心数据库索引的增长。我不是 SQL 专家,但经过一番阅读,我得到了一份关于索引操作统计的报告。我不确定这些数字是否表明我们的问题的原因。

有比我更好的 sitecore/sql 知识的人可以帮忙吗?

编辑:经过更多挖掘后,我得到了 sql server 锁存器的统计信息(不太了解这些)。

谢谢

【问题讨论】:

    标签: sql-server sitecore data-migration


    【解决方案1】:

    经过几天乏味的调查,我找到了这种缓慢的根本原因。这不是因为数据库索引。问题在于 sitecore MediaCreator 类中的 Database.GetItem(<item path>) 方法调用。 (我们的数据迁移包括创建图像项)

    在我们网站的站点核心树中,有些项目下有相当多(数万)的子项。尽管不建议使用大号。 sitecore 中的项目,这是我们项目的正确设计。如果我们对这些子项之一进行GetItem(<item path>) 调用,则返回该项需要很长时间。显然GetItem() 使用项目路径比通过 ID 获取要慢得多。不幸的是,我们无法控制这种情况,因为 sitecore MediaCreator 使用项目路径来创建媒体项目。

    通过使用 dotPeek,我能够调查 sitecore 源代码,并创建了一个不使用 GetItem() 的项目路径的 MediaCreator 类版本,并且数据迁移开始快速运行。

    我将在 sitecore 论坛上询问是否有任何方法可以在不复制 MediaCreator 源代码的情况下克服此性能问题。

    【讨论】:

    • 这有点过时了,但是您是否从 Sitecore 论坛获得任何关于解决问题的替代方法的反馈?
    • Sitecore 支持提到他们不支持在媒体库之外创建媒体项,并且他们的代码没有针对我们的用例进行优化。他们基本上说要遵循 sitecore 最佳实践。但这是 Sitecore 6.5 的一段时间。我已经很久没有与 sitecore 联系了,所以现在情况可能已经改变了。但我记得我们设法使用重复的 MediaCreator 类解决了这个问题。
    【解决方案2】:

    首先你应该看的是:

    1. 在迁移过程中禁用所有索引

    2. 包装您的自定义逻辑 分为:SecurityDisabler()、EventDisabler()、ProxyDisabler()

    3. SQL 服务器性能可能是问题 - 确保设置正确 数据库增长的价值 - https://www.simple-talk.com/sql/database-administration/sql-server-database-growth-and-autogrowth-settings/

    另外,请在此处查看类似问题:Optimisation tips when migrating data into Sitecore CMS

    【讨论】:

    • 谢谢亚历山大。我们已经在我们的应用程序中遵循了这些优化提示(包括您的链接中的提示)。我还更新了我的帖子以反映这一点。随着进一步的研究和 SQL 统计,我相信我们的问题是否是因为重复的 SQL 索引扫描。不幸的是,我并不精通 SQL Server 内部结构,因此无法从这些统计数据中得出任何意义。
    【解决方案3】:

    您可以将媒体创建者路径散列为唯一的 guid。然后您可能会使用 guid 作为查找值。

    也不要忘记运行对数据库索引进行“碎片整理”的数据库作业(SQL 作业,我忘记了索引维护的正确名称,但它非常重要)。

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 2014-05-02
      • 2017-10-15
      • 2019-07-01
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2012-09-12
      相关资源
      最近更新 更多