[pgsql-jp: 38093] Re: コミット待ちトランザクションのメモリ消費量について

EBIHARA, Yuichiro ebihara @ iplocks.co.jp
2007年 2月 27日 (火) 18:58:04 JST


海老原です。

>  ただし、データを投入するSQL内で文字列演算を多用するなど、PostgreSQL内
> 部のワークメモリを多く必要とする処理の場合には注意が必要です。これらの
> ワークメモリの中には、演算の終了時ではなくてトランザクションの終了時にの
> み開放されるものがあり、これが未コミットデータの件数分積み重なって、コ
> ミット前にメモリを使い切る可能性があります。

私はまさにここが気になっていました。
共有メモリはそもそも固定サイズなので、問題はバックエンドプロセスの
プライベートなメモリ領域だということですよね。

実際、数千万件を一括更新するUPDATE文を実行したときに、以下のようなエ
ラーが発生してバックエンドが異常終了する例は7.1で見たことがあります。

ERROR: Memory exhausted in AllocSetAlloc(108)

バックエンドのプロセスサイズは概ね2GBでした。

海老原





pgsql-jp メーリングリストの案内