How to find the largest Confluence pages by storage size in the database

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

目的

データベース監査または Confluence のクリーンアップ作業の一環として、管理者にとって Confluence 内で最も大きいページ (ディスク容量のフットプリントの観点から) を見つけることが役立つ場合があります。これは、各ページの保存形式のバイト長をデータベースに問い合わせることで実現できます。

ソリューション

後述の SQLクエリ、特に 2 つ目のクエリは、かなり長い時間を要する可能性があります。BODYCONTENT テーブルに約 300 K行を含む MySQL のテスト用インスタンスでは、2つ目のクエリが完了するまでに約 3 分を要しました。大規模な Confluence の場合には、本番環境への影響を避けるために、本番データベース自体に対してではなく、本番データベースのクローンに対して実行することをお勧めします。

Confluence データベースの設定により、2 つのクエリを使用する必要があります。最初のクエリは現在のページのサイズのみを見て、2 つ目のクエリはすべての履歴ページ(現在のページは含まない) の合計です。 これらはそれぞれ、データベースで最も多くのスペースを占めている上位 25 件のページを (バイト長で) 返します。

現在のページ (過去のバージョンは除く) で最も大きい上位 25 ページを取得する

SELECT s.spacekey, c.title, LENGTH(bc.body)
FROM BODYCONTENT bc
JOIN CONTENT c ON bc.contentid = c.contentid
JOIN SPACES s ON c.spaceid = s.spaceid
WHERE c.prevver IS NULL AND c.contenttype IN ('BLOGPOST','PAGE')
ORDER BY LENGTH(bc.body) DESC LIMIT 25; 

履歴のバージョン サイズの合計が最も大きい上位 25 ページを取得する

SELECT s.spacekey, c.title, subq.sum_size_in_bytes
FROM CONTENT c
JOIN SPACES s ON c.spaceid = s.spaceid
JOIN (
	SELECT c2.prevver, SUM(LENGTH(bc.body)) AS sum_size_in_bytes
	FROM BODYCONTENT bc
	JOIN CONTENT c2 ON bc.contentid = c2.contentid
	WHERE c2.prevver IS NOT NULL AND c2.contenttype IN ('BLOGPOST','PAGE')
	GROUP BY c2.prevver
	ORDER BY SUM(LENGTH(bc.body)) DESC LIMIT 25
) AS subq ON c.contentid = subq.prevver
ORDER BY subq.sum_size_in_bytes DESC;

その他

  • これには添付ファイルのサイズは含まれていません。 通常、添付ファイルはファイルシステムの <confluence_home> ディレクトリの保存され、データベースにはメタデータ情報 (ごくわずか) しか含まれていません。
  • 上記は MySQL でテストしたものです。お使いの DBMS に合わせてクエリを変更する必要がある場合があります。


Last modified on Mar 21, 2024

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.