使用容量計算 [技術情報]
ユーザーがWebUI上で容量の確認をしようと思うと「サイト コレクションの利用状況の概要」でサイトコレクション単位で確認することができます。ただし、サイトコレクション単位でしかデータは存在していません。
しかもそのデータは集計値ではなく累積値になっています。つまり、サイトコレクションにファイルが追加・削除されるたびに加算・減算を行っているようです。
Sitesテーブルに存在する下記のカラムがそう。
・DISKUSED … ディスク使用量
そのほかにもこんなカラムがあります。
・DISKQUOTA … クォータ設定値
・DISKWARNING … 警告メール送信値
それじゃぁつまらないので、できる限り正確なサブサイト単位の容量を計算してみたいと思います。
まず、容量は2つに分かれています。1つがサイトコレクション単位の容量、もう一つがサブサイト単位の容量です。
サイト単位 … WebPartsテーブル
サブサイト単位 … Docs, DocVersions, ComMd, Personalization, Lists, UserData
まず、サイト単位の情報を取得します。
-- WebParts
SELECT Sites.FullUrl AS SiteUrl,Sites.id AS SiteId,Sites.DiskUsed AS DiskUsed,
Sites.DiskQuota AS DiskQuota,Sites.DiskWarning AS DiskWarning,
Sum(ISNULL(WebParts.tp_Size,0)) AS WebPartsSize FROM Sites
LEFT OUTER JOIN WebParts ON Sites.id = WebParts.tp_SiteId
GROUP BY Sites.FullUrl,Sites.id,DiskUsed,DiskQuota,DiskWarning
ORDER BY Sites.FullUrl
次にサブサイト単位にDocsの情報を集計します。
-- Docs
SELECT Sites.FullUrl AS SiteUrl, Webs.FullUrl AS SubSiteUrl, Sites.Id AS SiteId,
Webs.Id AS WebId, ISNULL(SUM(CAST(ISNULL(Docs.Size, 0) AS BIGINT) +
CAST(ISNULL(Docs.CheckoutSize, 0) AS BIGINT)+
CAST(ISNULL(Docs.MetaInfoSize, 0) AS BIGINT)),0) AS DocSize
FROM Sites
LEFT OUTER JOIN Webs ON Sites.Id = Webs.SiteID
LEFT OUTER JOIN Docs ON Sites.Id = Docs.SiteId and Webs.id = Docs.webid
GROUP BY Sites.FullUrl,Webs.FullUrl,Sites.Id,Webs.Id
ORDER BY Sites.FUllUrl,Webs.FullUrl
次にDocVersions,ComMd,Personalizationを集計します。
-- DocVersions,ComMd,Personalizations,
SELECT Sites.FullUrl AS SiteUrl, Webs.FullUrl AS SubSiteUrl, Sites.Id AS SiteId,
Webs.Id AS WebId, SUM(CAST((ISNULL(DocVersions.Size, 0)
+ ISNULL(DocVersions.MetaInfoSize, 0)) AS BIGINT)) AS DocVerSize,
SUM(ISNULL(CONVERT(BIGINT,ComMd.[size]),0)) AS ComMdSize,
SUM(ISNULL(CONVERT(BIGINT,Personalization.[tp_size]),0)) AS PersonalSize FROM Sites
LEFT OUTER JOIN Webs ON Sites.Id = Webs.SiteID
LEFT OUTER JOIN Docs ON Sites.Id = Docs.SiteId and Webs.id = Docs.webid
LEFT OUTER JOIN DocVersions ON Sites.id = Docversions.siteid and Docs.id = DocVersions.id
LEFT OUTER JOIN ComMd ON Sites.id = ComMd.siteid and Docs.id = ComMd.docid
LEFT OUTER JOIN Personalization ON Sites.id = Personalization.tp_siteid
and Docs.id = Personalization.tp_pageurlid
GROUP BY Sites.FullUrl,Webs.FullUrl,Sites.Id,Webs.Id ORDER BY Sites.FUllUrl,Webs.FullUrl
次にリストデータの集計をします。
-- Lists,UserData
SELECT Sites.FullUrl AS SiteUrl, Webs.FullUrl AS SubSiteUrl, Sites.Id AS SiteId,
Webs.Id AS WebId, SUM(ISNULL(CONVERT(BIGINT,UserData.[tp_Size]), 0)) AS UserDataSize
FROM Sites
LEFT OUTER JOIN Webs ON Sites.Id = Webs.SiteID
LEFT OUTER JOIN Lists ON Webs.Id = Lists.tp_WebId
LEFT OUTER JOIN UserData ON Sites.id = UserData.tp_siteid and Lists.tp_id = UserData.tp_ListId
GROUP BY Sites.FullUrl,Webs.FullUrl,Sites.Id,Webs.Id
ORDER BY Sites.FUllUrl,Webs.FullUrl
上記のDocs, DocVersions, ComMD, Personalization, UserDataの集計値を加算した値に最初で算出したWebPartsの集計値を加算します。
ただし、正式に発表された情報ではないのであくまでも目安としてつかってください。
コメント 0