2

サイトコア 6.6.0 (rev. 130404) ベースのプロジェクトでは、古いシステムのデータベースからサイトコア データベースにデータを移行する必要があります。約 650,000 個のオブジェクトを移行する必要があります。古いデータベースのこれらの各オブジェクトは、マスター データベースに約 4 つのサイトコア アイテムを作成します。したがって、移行されるのはかなり大きなデータ セットです。

Sitecore API を Windows アプリケーションに接続し、そのアプリからデータ移行ロジックを実行します。データ移行の開始時はかなり高速で、1 秒あたり約 4 つのオブジェクトがサイトコア マスター データベースに転送されます。最初の 10,000 個のオブジェクトには 40 分しかかかりませんでした。このレートでは、7 時間で 100,000 個のオブジェクトが移行されると予測されます。

しかし、問題は時間の経過とともに、物事がますます著しく遅くなります。約 100,000 個のオブジェクトを移行した後、現在はわずか 30,000 個のオブジェクトを移行するのに約 7 時間かかります。パフォーマンス チューニング ガイドに記載されているように、サイトコア データベースのインデックスを再構築することさえありました。また、新しく作成されたサイトコア アイテムを配置する場所を見つけるためにサイトコア クエリを実行することもありません。データ移行中は、サイトコア エージェントや lucene インデックスの更新操作は実行されていません。

データ移行ロジックの最初のコードは次のとおりです。

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

この速度低下の理由は、サイトコア データベース インデックスの増加である可能性があります。私は SQL の専門家ではありませんが、いくつか読んだ後、インデックスの運用統計に関するレポートを入手しました。数値が問題の原因を示しているかどうかはわかりません。

索引統計 (スペースを節約するために、一部の表が統計レポートから削除されました)

私よりもサイトコア/SQL の知識が豊富な人は、これを手伝ってくれますか?

編集:もう少し掘り下げた後、SQLサーバーのラッチの統計を取得しました(実際には理解していません)。

SQL サーバーのラッチ統計

ありがとう

4

3 に答える 3

4

数日間の退屈な調査の後、この遅さの根本原因を突き止めました。データベースのインデックスが原因ではありませんでした。問題は、サイトコアクラスDatabase.GetItem(<item path>)内のメソッド呼び出しでした。MediaCreator(当社のデータ移行には画像アイテムの作成が含まれます)

私たちの Web サイトのサイトコア ツリーでは、いくつかの項目の下に非常に多数 (数万) の子が含まれています。ただし、大きな番号を持つことはお勧めしません。これが私たちのプロジェクトの正しいデザインです。これらの子アイテムのいずれかをGetItem(<item path>)呼び出すと、そのアイテムが返されるまでに長い時間がかかります。明らかにGetItem()、アイテム パスを使用すると、ID で取得するよりもはるかに遅くなります。残念ながら、sitecore MediaCreator はアイテム パスを使用してメディア アイテムを作成するため、この状況を制御することはできません。

dotPeek を使用することで、サイトコア ソース コードを調査し、アイテム パスを使用しないバージョンの MediaCreator クラスを作成することができGetItem()、データ マイグレーションが高速に実行されるようになりました。

MediaCreatorソース コードを複製せずにこのパフォーマンスの問題を解決する方法があるかどうか、サイトコア フォーラムで質問します。

于 2013-06-25T12:22:58.310 に答える