[Sitecore]サイトコアBLOBs テーブルのクリーンアップ
検証環境は次の通りです。
概要:
お客さんから、WebデータベースのサイズがMasterよりも多きといわれ、現在使用しているサイトコアのバージョンにてBlobsテーブルのクリーンアップがされていないことが分かった。どうも、バージョン8.2以降、この問題が解決されていま。
もし、同じサイトコアのバージョンで同じ問題があった場合はこれはBlobsテーブルのクリーンアップのメモ書きです。
まず、データベースのサイズを確認しましょう。下記のクエストをMasterとWebにて走らせて、結果を比較すればいい。
SELECT o.name AS table_name, sum(p.reserved_page_count) * 8.0 / 1024/1024 AS size_in_gb, p.row_count AS records FROM sys.dm_db_partition_stats AS p, sys.objects AS o WHERE p.object_id = o.object_id AND o.is_ms_shipped = 0 GROUP BY o.name, p.row_count ORDER BY size_in_gb DESC
御覧のように、Webデータベースのほうが断然大きい…
クリーンアップのクエスト下記の通りです。必要なレコードの数を変更しWebにて走らせばいい。
Delete from blobs where blobid in ( SELECT TOP 10 BlobId FROM Blobs WHERE BlobId NOT IN ( SELECT Value FROM SharedFields WITH (NOLOCK) WHERE FieldId = '40E50ED9-BA07-4702-992E-A912738D32DC' UNION SELECT Value FROM VersionedFields WITH (NOLOCK) WHERE FieldId = 'DBBE7D99-1388-4357-BB34-AD71EDF18ED3' UNION SELECT Value FROM ArchivedFields WITH (NOLOCK) WHERE FieldId IN ('40E50ED9-BA07-4702-992E-A912738D32DC','DBBE7D99-1388-4357-BB34-AD71EDF18ED3') ) )
ただこれは一度クリーンアップして、時間がたつにつれて、Blobsテーブルのレコードが増えていきます。
サイトコア8.2にアップグレードするまで、SQLタスクにて定期的にクリーンアップします。
ネットで見つけた記事にてサイトコアから4時間ごとにトップの1000レコードの削除を勧められています。
これまでの作業は結構簡単でしてが、実際にプロダクションのサイトにて変更する際にちょっと手間がかかります。
なぜなら、直接プロダクションのWebデータベースにてこの変更するのはパブリックのユーザに影響を与える可能性があり、直接変更をすることが許されていなかった。ですので、下記の手順で編集を行いました。
- 既存のプロダクションのWebデータベースをコピーし、prod_web_tempとします。
- CDのコネクションを変更し、このprod_web_tempに接続します。
- UATにてデフォルトのサイトコア8.2Webデータベースをuat_temp_webとして作成します。
- UATのMasterデータベースをプロダクションのprod_masterデータベースに接続します。
- プロダクションのMasterデータベースからuat_temp_webにフールーパブリッシングします。
- uat_temp-webをバックアップして、そして、prod_webデータベースをリストーアします。
- CDのコネクションをprod_webに変更し。
* CDはネットワークロードバランサーを使用しているので、接続変更する際に一つずつ行い、 パブリックのユーザに全く影響を与えません。