SharePoint 2010 SP1適用後にバージョン管理機能が原因でDBが肥大化する

海外のSharePointブログで非常に気になる現象が報告されていましたので、ご紹介。SharePoint 2010でSP1適用後(この条件はまだ明確でない)、バージョン管理機能で蓄積されたデータはWeb削除後もデータベースに残留し、データベースを肥大化させる、かついまのところ有効な対処方法が無い、というものです。

オリジナルの記事はこちら:
ATTENTION: Database Leak in SharePoint 2010!!!

You will see the AllDocStreams table continues to get larger and larger. This is the table that has your BLOBS! The worst table to have a database leak! From a high level, what does this mean? It means if you turn on versioning, and say upload a 1Gb file and then make 5 changes to it, you will have 5GB of storage used in your database. If you then delete the web, you will lose file pointers in the database and that 5GB will remain in the database forever and never get cleaned up.

ライブラリでバージョン管理機能を有効化して、ファイルを更新すると、SharePointは差分ではなくファイルの実体を複数保存する仕様です。つまり、100MBのファイルは更新の都度、倍々算で増えます。

まあ、これもなかなか問題な仕様なのですが、本当の問題はこの後。このライブラリを含むサイトコレクションを削除(※)すると、普通に考えれば蓄積されたバージョン差分も削除される筈です。ところが、この処理がどうやら上手く動いていないようで。データベース上のファイル実体であるところ「BLOB」が削除されずに残る結果、その分だけデータベースが肥大化します。

厄介なことに、ベースになるサイトが既に存在しない orphan(孤児)な状態のため、GUIやオブジェクトモデルからこのBLOBを削除する方法はありません。データベースのシュリンクも効かないため、あとはデータベースのテーブル(AllDocStreams)を直接ごにょごにょして削除…しかありませんが、これやると以後 Microsoft のサポート外!という罠。

なお、どうやらSP1適用後でのみ発生するようです。

NOTE: This bug shows up in all builds after SP1 (the web recycle build), my environment is the latest release build of 14.6112.5000.

SharePoint 2010で新たに追加された「サイトコレクションのゴミ箱」機能周辺のバグな匂いがしますね。
なんというか相変わらずの「Microsoft 1.0」(苦笑)

とりあえず、発生条件がある程度明確なため、現時点では「下手にサイトコレクションの削除をせず、Microsoftのフィックスを待つ」のが一番よいかと思われます。なお、上記原文では、現状確認用の PowerShell も公開されています。

※原文では「Web」となっていて、これが「Webアプリケーション/サイトコレクション」のどちらかが定かではないのですが、内容から考えると「サイトコレクション」だと思われます(直接確認は出来ていません)


Author

中村 和彦(シンプレッソ・コンサルティング株式会社 代表)が「ユーザ視点の SharePoint 情報」を発信します。元大手製造業 SharePoint 運用担当。現SharePoint コンサルタント。お仕事のお問い合わせはこちらまでお願いします。当ブログにおける発信内容は個人に帰属し所属組織の公式発信/見解ではありません。
FB : 中村 和彦
blog: Be・Better!
MS MVP SharePoint 2009/10-2011/9
MS MVP Office 365 2012/10-2014/9