[pgsql-jp: 33176] Re: PostgreSQL カンファレンスお礼および MySQL のデータが壊れる件

井久保 寛明 ikuboh @ nttdata.co.jp
2004年 6月 8日 (火) 16:39:46 JST


井久保です。

On Tue, 08 Jun 2004 13:05:39 +0900 (JST)
Tatsuo Ishii <t-ishii @ sra.co.jp> wrote:

> > WTG も2通り使い方があります。
> > 1つ目は、常にWFGを管理し、ロックをとるときに閉路を作らないか常にチェック
> > する方法。2つ目は、デッドロックを検出するための WFG のチェックルーチンを
> > 定期的に実行する方法です。PostgreSQL は、この2番目の方法を採用している
> > はずです。
> 
> そうでしたっけ?私の理解では,PostgreSQLではロックを取りにいったときに
> デッドロック検出ルーチンを起動するタイマーをセットし,ロックが取れれば
> その時点でタイマーをキャンセル,そうでなければタイマーがエキスパイアし
> てデッドロック検出ルーチンが起動される,というふうになっていて,定期的
> にチェックルーチンを起動はしていなかったと思うのですが.

先に書いたように、私はまだこの辺のソースを読んでいませんので、
石井さんのおっしゃっているのがPostgreSQLの動作だと思います。

ただし、分類としては、やはり2番目の方に入ると思います。
1番目の方法は、常にWFGを維持して、ロックを取る瞬間にWFGをチェックし、
デッドロックの状態を最初から起こさない方法です。
「定期的」という書き方がよくなかったようですが、2番目の方法は、
ロック取得とは別のきっかけで、WFGのルーチンを動作させるという
つもりでした。


ふーむ。ただ、無差別にWFGを動かすよりは、もっとデッドロックの可能性の
高いところで動かしているわけですね。

ということは、時間のかかるトランザクションが多くて、かつ、ロックの
競合がある場合に、deadlock_timeout のパラメーターが効いてくるという
ことですね。

---
井久保 寛明 (Hiroaki Ikubo)
NTTデータ先端技術 (株) オープンソース技術部
E-mail: ikubo@intellilink.co.jp (E-mail: ikuboh@nttdata.co.jp)





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