[pgsql-jp: 40829] Re: デッドロックについて

Tomoaki Sato sato @ sraoss.co.jp
2011年 6月 28日 (火) 23:53:19 JST


佐藤です。

デッドロックを回避する方法については [pgsql-jp: 40827] ですでに回答さ
れていますが、

> お世話になります。野沢と申します。
> 
> デッドロックの現象が解決しないため、質問させてください。
> RHEL5.5 64bit,Postgresql8.4.5
(snip)
> (2)deadlock_timeoutの設定
>   当初はデフォルト設定(1秒)を設定しており、直ぐにデッドロックタ
>   イムアウトが返却されました。
>   SQLコード:40P01(デッドロックの検出)
>   デッドロック回避のために、当設定値がチューニング要と判断し、設定
>   値を(100秒)に変更して、再実行しました。
>   が、100秒後にデットロックタイムアウトが検出されました。
>   deadlock_timeout の値を増やす事で、デッドロックタイムアウトの回
>   避は出来ず、検知にかかる時間が大きくなるという結果でした。
>   数秒間実施で356/9500件の割合(3.7%)でデッドロックを検出してい
>   ます。

上記のところが気になったので補足しておきます。

deadlock_timeout パラメータの値を増やしてデッドロックの発生を回避しよ
うとしていますが、この値を増やしてもデッドロックの検出が遅れるだけで回
避することはできません。

PostgreSQL では、deadlock_timeout パラメータに指定した時間だけ待っても
ロックを取得できない場合、実際にデッドロックが発生しているかどうかを検
出する処理を開始します。

デッドロックの検出は比較的負荷の高い処理なので、デッドロックが発生して
いないにも係わらず、頻繁に実行されると性能が低下してしまいます。

deadlock_timeout パラメータは、デッドロックが発生しないようにアプリケー
ションの作り込みを行った上で、無駄なデッドロックの検出処理を実行しない
ように増やすものです。


----
Tomoaki Sato <sato @ sraoss.co.jp>
SRA OSS, Inc. Japan


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