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

Daisuke Yamazaki yamajaki @ gmail.com
2007年 2月 27日 (火) 19:21:16 JST


こんにちは山崎です.

永安さんの意見とほとんど同じですが,Commit前にWALバッファが
いっぱいになった場合のシナリオが気になります.

1. Commit前にWALバッファがいっぱいになった場合,
PostgreSQLはデータディスクにデータ内容を書き込む.

2. だけど最近のPostgreSQLはMVCCを搭載してるので,
書き込んだデータは未コミットの別バージョンのデータとして
取り扱われる.よって書き込みデータが多くなってもメモリを
食うことはなく,書き込むためのディスクがある限りは問題ない.

3. よって結論としてはOracleでいうところの「ロールバックセ
グメントがあふれる」に相当する現象はおきない.

というのが私の理解ですがあってますか?

On Tue, 27 Feb 2007 16:46:21 +0900
Satoshi Nagayasu <nagayasus @ nttdata.co.jp> wrote:

> 永安です。
> 
> > 共有メモリなどのことを調べてみても
> > 出てくる話題は検索時のキャッシュなどのことが多くて・・・
> > 「未コミットのまま、処理を続けるとどんな影響があるのか」
> > についての話題を見つけることができなかったので・・・
> > (話題にするレベルでもない??)
> 
> 未コミットの更新情報は、「WALバッファ」と呼ばれる領域に乗ります。
> postgresql.conf の wal_buffers の部分ですね。
> 
> WALバッファの内容がディスクに書き出されるケースは大きく二点、
> 「トランザクションがコミットされた時」か
> 「WALバッファが足りなくなったとき」です。
> 
> ですので、未コミットのまま継続しても、
> メモリの制限などが制約となることはあり得ないと思います。
> 
> > 1. 登録・更新・削除すると直接ファイルに書き込みに行く
> > (ロールバックされるとゴミ領域として残る→VACUUMで処理)
> > 2. コミットされるとWALに書き込まれる。
> > 3. 遅れてWALから各データファイルに書き込まれる。
> > (直接書き込んだデータの更新?)
> > という感じなんですが・・・
> > 間違っていますか?
> 
> 1. 登録・更新・削除すると、WALに書き込み、共有バッファを変更する
> 2. コミットされると、WALに(コミットを)書き込み fsync する。
> 3. 遅れて共有バッファの内容をデータファイルに書き込む
> 
> という流れになります。
> 
> WALは「Write-ahead log」ですので、(共有メモリ内の)レコードを
> 更新するより前に記録されることになります。
> 
> このあたりは、WEB+DB PRESSの連載「PostgreSQL安定運用のコツ」の
> 第1回(Vol.32)、第4回(Vol.35)あたりに少し書きましたので、
> よろしければご参照ください。
> 
> 松本 康寛 wrote:
> > 松本です。
> > ご返答ありがとうございます。
> > 
> >> そもそもメモリ消費量は未コミットの変更量に依存するのですか?
> >>
> >> ロールバックに必要なデータはデータファイルの中に書いてあるし、
> >> REDOに必要なデータはWALファイルの中に書いてあるから、
> >> ちょっと考えて実装すると、そうはならないようにできるはずなん
> >> ですが、実際はどうなんですかね?
> >>
> >> 例えばOracleも、ロールバックセグメントが大量に食われるという
> >> のはありますが、メモリが食われるというのは聞いたことありませ
> >> んし。
> > 
> > 
> > そうなんです。
> > 共有メモリなどのことを調べてみても
> > 出てくる話題は検索時のキャッシュなどのことが多くて・・・
> > 「未コミットのまま、処理を続けるとどんな影響があるのか」
> > についての話題を見つけることができなかったので・・・
> > (話題にするレベルでもない??)
> > 
> > しかし、仕事ではコミットする件数が決められていることが多ので・・・
> > で、理由を聞くとメモリの話になります。
> > 裏づけのある理由ではなく、源泉は「感覚的・経験的」です。
> > 
> > そもそも
> > 実際のファイル書き込みってどうなっているしょうか?
> > 私が調べたレベルでは
> > 1. 登録・更新・削除すると直接ファイルに書き込みに行く
> > (ロールバックされるとゴミ領域として残る→VACUUMで処理)
> > 2. コミットされるとWALに書き込まれる。
> > 3. 遅れてWALから各データファイルに書き込まれる。
> > (直接書き込んだデータの更新?)
> > という感じなんですが・・・
> > 間違っていますか?
> > 
> > 
> >> ところで、後学までに教えて欲しいのですが、
> >>
> >> > 単純にバッチ開始実行前にバックアップを
> >> > 取っておけばいいわけですが、リアルタイムバッチの場合は
> >> > その方法は使えないですし・・・
> >>
> >> リアルタイムバッチって、どういうものなのでしょう?
> > 
> > 不適切な表現ですね。申し訳ありません。
> > ・一括でまとめて処理する機能をバッチ処理
> > ・「夜間バッチ」の対として「リアルタイムバッチ」
> > (日中にユーザオペレーションなどで実行される一括処理)
> > と、私の所属している作業場では表現しています。
> > 
> > ご意見ありがとうございました。
> > 
> > 
> > *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
> > 
> >  松本 康寛 (マツモト ヤスヒロ)
> > 
> > E-mail :wochenendhaus @ hotmail.com
> > *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
> > 
> > ※利便性などを考えて、Hotmailを使用しております。
> >  何卒、ご理解を賜りますようよろしくお願いします。
> > 
> > _________________________________________________________________
> > ライブ映像を配信する「MSNミュージック LIVE PERFORMANCES」がスタート! 
> > http://music.jp.msn.com/lp/
> 
> 
> -- 
> NAGAYASU Satoshi <nagayasus @ nttdata.co.jp>
> Phone: +81-50-5546-2496

-- 
プログラマ集団 スケールアウト
Daisuke Yamazaki <yamajaki @ gmail.com>
Blog:最速配信研究会
http://d.hatena.ne.jp/yamaz/




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