Sitecoreを利用しているサイトにおいて、ページ表示に時間が掛かるなどの性能劣化が発生した際、
確認すべきポイントをいくつかご紹介いたします。
前提条件
-
SitecoreとDB(SQL Server)がそれぞれ異なるサーバー上に構築されている場合を想定
(IaaSなどの場合は別インスタンスであることを想定)
確認ポイント
SQL Server
コンテンツなどが格納されているSQL Serverにおいて
インデックスが断片化し、性能劣化の要因となっている可能性があります。
(特にxDB Collectionは注意が必要です)
下記のようなSQLを実行して断片化が発生していないかを確認し、
結果に応じてインデックス再構築など対処を検討する必要があります。
※対処を検討する目安・・・断片化率(avg_fragmentation_in_percent)が10%未満かどうか
SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
WHERE indexstats.database_id = DB_ID()
ORDER BY indexstats.avg_fragmentation_in_percent desc
下記の画像はSQL実行結果例です。
断片化率70%以上のインデックスが複数あり、かなり断片化が進行しているため、
なるべく早めに対処を検討する必要があると分かります。
アプリケーション(Sitecore)サーバ
DBサーバでのデータ取得そのものに問題がなさそうな場合、
Sitecoreが導入されているサーバー側にも問題がないか確認が必要です。
- DBからのレスポンスを1件ずつ処理しているために、後続の処理がなかなか進まない
⇒トランザクション単位を見直すなど、ある程度まとめて処理する
- DBからのレスポンスをある程度まとめて処理しているのに、処理がなかなか進まない
⇒サーバースペックは十分か、クラウドサービスを利用している場合インスタンスサイズなどは適切か
今回の記事は以上になります。
最後までお読み頂き、ありがとうございました!
※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。