plugindata テーブルのサイズが原因で OOM エラーが発生して pg_dump が失敗することがある
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
問題
Confluence の plugindata テーブルには、ユーザーがインストールしたプラグインの .jar ファイルが保持されます。このテーブルは、データ列に .jar ファイル全体 (サイズ) を保存します。Confluence の起動時に、このテーブルから読み込んで、 Confluence の plugins-cache フォルダーに入力します。このテーブルでは、pSQL を使用する場合、データ列で使用されるデータ型は bytea (バイナリー データ) です。このタイプは読み取り時に pSQL に制限があり、OOM が発生する可能性があります。
select data from plugindata;
ERROR: out of memory
DETAIL: Failed on request of size 268435456.
Backup error:
pg_dump: Dumping the contents of table "plugindata" failed: PQgetResult() failed.
pg_dump: Error message from server: ERROR: out of memory
DETAIL: Failed on request of size 159380181.
pg_dump: The command was: COPY public.plugindata (plugindataid, pluginkey, filename, lastmoddate, data) TO stdout;
診断
環境
PostgreSQL 9.6.x
原因
- このメモリ問題の根本原因は、テキスト モード(つまり SELECT または pg_dump のいずれか) で bytea 列の出力を選択していることです。これには、基になるデータのサイズよりも多くのメモリが必要です。
- PostgreSQL におけるこのようなメモリ割り当ての制限は1 GB です。
回避策
- pg_dump を実行しているときにこの問題が発生した場合は、lo_import および lo_export を使ってダンプを正常に作成してください。
- Confluence プラグインのキャッシュ フォルダーをクリアすることで、一時的に解決できます。