[pgsql-jp: 33225] Re: statement_timeoutと、 deadlock_timeout とJDBC での設定
SAKATA Tetsuo
sakata.tetsuo @ lab.ntt.co.jp
2004年 6月 14日 (月) 11:18:36 JST
おはようございます。
坂田@五月晴れの横須賀から、です。
石田さん wrote:
> こんにちは。石田@苫小牧市です。
こんにちは。その節はおせわになりました。
> uty @ fo-isd.dnp.co.jp wrote:
>> postgresql.confにある設定項目で
>> statement_timeoutと、deadlock_timeoutというのがあると思います。
>>
>> 当方7.4.2+JDBC(JAVA)で開発しているのですが、
>>
>> デッドロックしている場合、クライントに結果が返ってこない
>> というのは、変なSQLでそれ自体実行結果を得るまでにすごく時間がかかって
>> クライントに結果が返ってこない場合と同じような感じなのですが、
>> ちゃんとpostgresqlは、そのあたりの違いを把握して
>> それぞれの設定時間どうりの処理を行っているのでしょうか?
>> #あたりまえやんって言う答えしかないかもしれませんが、
>> ふと疑問に思ったので・・・
デッドロック関連の内部の処理ですが、大略以下のようになっています。
(1) ロックを取得するための待機に入る際に、後で起床するために
タイマを設定して置いてから、スリープする。
(2) 設定時刻終了後、ハンドラ handle_sig_alarm(SIGNAL_ARGS) を
経由して、デッドロック検出器 CheckDeadLock() を呼び出す。
※ /src/backend/storage/lmgr/proc.c の一番後ろにコードがあります
これを見るとステートメントのタイムアウトと、
デッドロック用の処理とは別の個所を呼び出しています。
(3) デッドロック検出器 CheckDeadLock() では、
当該トランザクションが取得を待っているロックの待ち行列を
チェックして、サイクルがある(デッドロックを生じている)ならば、
そのトランザクションをアボートする。
関連する話題は、[pgsql-jp: 33154]以下のスレッドでも出ていましたね。
以上、ご参考まで。
--
坂田 哲夫@NTT サイバースペース研究所
sakata.tetsuo _at_ lab.ntt.co.jp
SAKATA, Tetsuo. Yokosuka JAPAN.
pgsql-jp メーリングリストの案内