[pgsql-jp: 30201] Serial型の列とトランザクション

Tetsuo SAKATA sakata.tetsuo @ lab.ntt.co.jp
2003年 6月 20日 (金) 08:47:53 JST


こんにちは.
坂田@横須賀です.

コメントありがとうございます>井上さん

井上さん wrote:[pgsql-jp: 30198]
> Tetsuo SAKATA wrote:
> > ご指摘ありがとうございます>井上さん
> > > >
> > > > このテーブルロックですが,同じコードによるトランザクションどうしが
> > > > 同時に実行されなければ良いので,SRX(Share Row eXclusive)以外に,
> > > > 以下のモードでも可能と思います.
> > > >
> > > > ・Share Update Exclusive (SUX)
> > >
> > > これはおすすめできません。concurrent vacuum専用のロックです。
> > > こけおどしの名前をつけずにvacuum lockでも名付ければよかった
> > > のですが。
> >
> > このモードは vacuum コマンド「専用」なのですね.
> > その点は,了解しました.
> >
> > 疑問として残っているのは,
> > vacuumコマンド以外の通常のAPが,このロックモードを利用した場合,
> > 具体的に何か問題が生じるのか,という点です.
> > concurrent vacuumが動作できなくなるのはわかるのですが,
> > それ以外に何かあるのでしょうか?
> 
> ないと思います。
> ただこのロックをシステムとユーザーの両方で使うのは混乱を
> 招いてかえって有害でしょう。ユーザーレベルで使用可能にす
> る必要があったんでしょうかね?

特に問題はなさそう,という点は了解しました(*).
次に,「かえって有害ではないか」という点について,
検討してみました.その通りだと思います.

なぜなら,SUXはSRXとほぼ同じでありながら,
両者の違いはSUXが特に vacuum 向けに設計されている,
という点にあるからです.そのため,ユーザ向けにSUXモードを
利用可能としても,特にメリットはないと考えられるためです.
このため,SUXをユーザに開放しても,選択肢をいたずらに
広げるだけなので,かえって有害と考えます.

----
ユーザが使うことを意図されているSRXを,SUXと比べてみると,
両者の違いは

・SUXはRowExclusive(RX)と両立するが,(**)
・SRXはRXとは両立しない

という点にあります.

上記の(**)は,行挿入や行変更を行うトランザクションと,vacuumとが
並行して動作できるようにするためのものです.
vacuumは,既にゴミになっている領域を開放するだけなので,
表の構成(行の構成等)が変更されない限り,表の中身を変更する動作とは
独立に(並行して)動作することが出来るはずです.
このような動作をユーザ側で実現することは出来ない以上,
この機能をユーザ向けに開放する意味はないと考えられます.

-- 
Tetsuo SAKATA, Yokosuka JAPAN.



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