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

Tatsuo Ishii t-ishii @ sra.co.jp
2005年 6月 29日 (水) 18:27:38 JST


石井です.

> 加澤です。取り急ぎ。
> 
> 05/06/29 に Tatsuo Ishii<t-ishii @ sra.co.jp> さんは書きました:
> > 石井です.
> > 
> > gdbのバックトレースは,オプティマイズがかかっているとときどき嘘を付く
> > ので....
> > 
> > これは推測ですが,統計情報が結構大きくなってしまったので,統計情報を圧
> > 縮して新たなタプルに納める必要が出てきたのではないでしょうか.で,ここ
> > でnewoid()が呼ばれたと.
> > 
> > もしかして,default_statistics_target とか,そのあたりの
> > postgresql.confの設定が2台のマシンで違っているということはないですか?
> 
> postgresql.conf 等の設定は厳密に合わせてあるのですが、入っているデータは
> 大いに異なります。pg_largeobject テーブルに格納されているデータによっては、
> newoid が呼ばれたり呼ばれなかったりする?

そういうことになりますね.

> もしそうだとするといくつか気になる点があって、
> 
> ・そもそもどうして毎回 newoid する必要があるのか?データの更新が全くない
> 状態で ANALYZE を繰り返した場合も、毎回必ず oid が増えていきます。このあ
> たりの挙動はもう少しソースを呼んで確認したいと思っています。

データが変っていないとは言え,ANALYZEはランダムサンプリングを行うので,
取得する統計情報が毎回少しずつ変っている,ということはないでしょうか?

> ・格納されているデータによっては oid が増えることがある、となると、データが増
> えて来た場合、Primary 側と Secondary 側で ANALYZE 時にランダムにサンプ
> リングされた行の違いから、片側では oid が増え、もう片方では増えない、という
> 事態が起こりそう。そうすると一発で縮退です。

そうですね.

> 最終的に後者の可能性が想定されるとなると、やっぱり pgpool を経由で Large
> Object を使うのは難しい、という結論になってしまいますね…。

あまり助けにはならないと思いますが,8.1からはラージオブジェクトを作る
ときに,OIDが指定できます.OIDと言っても,要はpg_largeobjectの中で重複
しない値を渡してあげればよいだけなので,うまくこの「OID」をユーザ管理
すれば,OIDカウンタがずれてもラージオブジェクトの利用には不自由しない
ことになると思います.
--
Tatsuo Ishii



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