[pgsql-jp: 35620] Re: ANALYZE で oid が変化してしまう

Tatsuo Ishii t-ishii @ sra.co.jp
2005年 6月 29日 (水) 17:34:31 JST


石井です.

> 加澤です。石井さん、いつも貴重なご助言ありがとうございます。

どういたしまして.

> 05/06/29 に Tatsuo Ishii<t-ishii @ sra.co.jp> さんは書きました:
> > 石井です.
> > 
> > psqlで接続した後,別端末からpsコマンドでpostgresプロセスのpidを調べ,
> > gdbでpostgresにアタッチしてnewoidにブレークポイントを貼って,ANALYZEを
> > 実行し,止ったところでgdbのbtコマンドでバックトレースを取れば,どうい
> > う条件でnewoidが呼ばれるか簡単にわかると思います.
> 
> 現象が発生するマシンは管理セクションが異なるためいろいろ大変だったのです
> が (そんな内部事情はどうでも良い>俺)、何とか backtrace を取ることが出来ま
> した。下記に添付します。
> 
> Breakpoint 1, 0x0809e164 in newoid ()
> (gdb) bt
> #0  0x0809e164 in newoid ()
> #1  0x08080770 in toast_compress_datum ()
> #2  0x08081e01 in heap_tuple_toast_attrs ()
> #3  0x0807e0ee in heap_update ()
> #4  0x0807e1a8 in simple_heap_update ()
> #5  0x080d6a06 in analyze_rel ()
> #6  0x0810378d in vacuum ()
> #7  0x081769f0 in PortalSetResultFormat ()
> #8  0x08176d83 in PortalRun ()
> #9  0x081732c9 in pg_parse_query ()
> #10 0x08174b7b in PostgresMain ()
> #11 0x08150505 in ClosePostmasterPorts ()
> #12 0x08152619 in PostmasterMain ()
> #13 0x081246cc in main ()
> 
> これは他のマシンでは起きない「ANALYZE pg_largeobject」を実行した際に、
> newoid にセットした breakpoint にて停止した際の backtrace です。
> 
> 早速 7.4.7 のソースに当たってみたんですが、toast_compress_datum の中
> に newoid が見あたらない?
> 
> Red Hat による patch が当たっているのかと Red Hat 側から SRPM を取得
> して中身を検めてみましたが、そちらでも特に違いはない様子…?
> 
> よく分からなくなってきました…。

gdbのバックトレースは,オプティマイズがかかっているとときどき嘘を付く
ので....

これは推測ですが,統計情報が結構大きくなってしまったので,統計情報を圧
縮して新たなタプルに納める必要が出てきたのではないでしょうか.で,ここ
でnewoid()が呼ばれたと.

もしかして,default_statistics_target とか,そのあたりの
postgresql.confの設定が2台のマシンで違っているということはないですか?
--
Tatsuo Ishii



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