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

Kazawa Tsunehisa digitune @ gmail.com
2005年 6月 29日 (水) 11:58:38 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 される条件を探そうとしていますが、
難航中です…。

-- 
Tsunehisa KAZAWA
http://www.digitune.org



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