2013-06-23 66 views
2

在我們基於sitecore 6.6.0(rev。130404)的項目中,我們需要將數據從舊系統的數據庫遷移到sitecore數據庫。我們需要遷移650,000個物體。來自舊數據庫的這些對象中的每一個都將在master數據庫中創建大約4個sitecore項目。所以這是一組相當大的數據被遷移。Sitecore - 增加大號碼時性能越來越差。的項目

我們將sitecore API與windows應用程序連接起來,並從該應用程序運行數據遷移邏輯。在數據遷移初期,情況非常快,每秒鐘大約有4個對象被傳輸到sitecore master數據庫。前10,000個對象只需要40分鐘。按照這個速度,人們會預測在7個小時內將有10萬個物體被遷移。

但問題是隨着時間的推移,事情變得越來越慢,速度明顯變慢。遷移了大約100,000個物體後,現在只需要7個小時就可以遷移30,000個物體。我甚至按照性能調整指南中的提示重新創建了sitecore數據庫索引。我們也不執行任何sitecore查詢來查找將新創建的sitecore項目放在哪裏。我們的數據遷移正在進行時,沒有sitecore代理或lucene索引更新操作正在運行。

下面是在數據遷移的邏輯開頭的代碼:

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

能爲這個緩慢的原因是Sitecore的數據庫索引的增長。我不是SQL專家,但經過一番閱讀後,我得到了關於指數運營統計的報告。我不確定這些數字是否表明我們問題的原因。

Index statistics (some tables were removed from the statistics report to save space)

任何人可以用比我好Sitecore的/ SQL的知識,幫助這個嗎?

編輯:經過多點挖掘後,我得到了sql服務器鎖存器的統計數據(不太瞭解這些)。

SQL server latch statistics

感謝

回答

4

經過繁瑣的調查幾天我發現這種緩慢的根源。這不是因爲數據庫索引。問題是Database.GetItem(<item path>)在sitecore MediaCreator類中的方法調用。(我們的數據遷移包括圖像項目的創建)

在我們網站的sitecore樹中,有些項目有相當多的數量(數以萬計)的子項。 Allthough不建議擁有大號。 sitecore中的項目,這是我們項目的正確設計。如果我們對其中一個子項目進行GetItem(<item path>)調用,則需要很長時間才能返回該項目。很顯然GetItem()使用項目路徑比通過ID獲取要慢得多。不幸的是,我們無法控制這種情況,因爲sitecore MediaCreator使用項目路徑來創建媒體項目。

通過使用dotPeek,我能夠調查sitecore源代碼,並創建了一個版本的MediaCreator類,它不使用GetItem()的項目路徑,並且數據遷移開始快速運行。

我打算從sitecore論壇詢問是否有任何方法可以克服此性能問題,而不需要複製MediaCreator源代碼。

+0

現在有點老了,但是您是否從Sitecore論壇獲得了有關解決您的問題的其他方法的任何反饋? –

+1

Sitecore支持提到他們不支持在媒體庫之外創建媒體項目,並且他們的代碼未針對我們的用例進行優化。他們基本上說要遵循sitecore的最佳實踐。但是這已經是Sitecore 6.5的一段時間了。我已經與Sitecore脫離了很長一段時間,所以事情可能現在已經改變了。但我記得我們設法使用重複的MediaCreator類來解決這個問題。 – ravinsp

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

+0

謝謝亞歷山大。我們已經在我們的應用中遵循了這些優化技巧(包括鏈接中的那些技巧)。我也更新了我的帖子以反映這一點。隨着進一步的研究和SQL統計,我被引導去相信我們的問題是否因爲重複的SQL索引掃描。不幸的是,我不熟悉SQL服務器內部,因此不能從這些統計數據中獲得任何意義。 – ravinsp

0

您可以將媒體創建者路徑散列到唯一的GUID中。那麼你可以使用guid作爲查找值。

也不要忘記運行「碎片整理」您的數據庫索引(SQL作業,我忘記了索引維護的正確名稱,但它非常重要)的數據庫作業。