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

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


石井です.

> 加澤です。ほんのちょっと情報追加です。
> 
> 05/06/28 に Kazawa Tsunehisa<digitune @ gmail.com> さんは書きました:
> > pgpool 2.5.2 を経由して LargeObject を利用するために、インプレスの
> > 「まるごとPostgreSQL!」(ISBN4-8443-2053-X) で石井さんも紹介されて
> > いる「pg_database テーブルをロックして同期」作戦で oid の同期を取り、
> > これまでのところはうまく動いていました。(こちらの ML でも以前ご報告
> > させていただきました。)
> > 
> > ところが、別のマシンに同じ環境を構築して動作させてみたところ、なぜか
> > 元のマシンでは起きなかった ANALYZE コマンドにより oid が消費されて
> > しまう、という現象が起こりました。
> > 
> > 現象が起こるマシンと起こらないマシン双方とも OS は Red Hat Enterprise
> > Linux 4 (WS) で、 PostgreSQL も OS 付属の 7.4.7 です (ちょっと古い)。
> > 
> > ANALYZE コマンドが内部で newoid してしまう条件のようなものが何か
> > あるのでしょうか?
> 
> その後、テーブル単位の ANALYZE などを行ってさらに調べてみたところ、oid
> が消費されていると思われる環境でも、「ANALYZE pg_largeobject」した時
> のみ、oid が消費されるらしいことが分かりました。他のいかなるテーブルを
> ANALYZE した時も oid は消費されていないようです。
> 
> oid 消費の有無の確認方法は、アプリケーションから新しい LargeObject を
> 作成してみて、その LargeObject に割り当てられる oid が連番となるかどうか
> で行っています。oid 消費が見られない環境ではこれが綺麗に連番になるのに
> 対し、oid を消費してしまう操作 (ANALYZE pg_largeobject) を行うと番号が
> スキップしてしまうことが確認出来ます。
> 
> analyze 処理周りのソースを読んで newoid される条件を探そうとしていますが、
> 難航中です…。

psqlで接続した後,別端末からpsコマンドでpostgresプロセスのpidを調べ,
gdbでpostgresにアタッチしてnewoidにブレークポイントを貼って,ANALYZEを
実行し,止ったところでgdbのbtコマンドでバックトレースを取れば,どうい
う条件でnewoidが呼ばれるか簡単にわかると思います.

これだけでよくわからないようでしたら,ダイレクトメール下さい.

ちなみに,こちらでやってみた限りでは,newoidは呼ばれませんでした.
--
Tatsuo Ishii



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