[PHP-users 24896] デッドロック

mami mm_tig @ yahoo.co.jp
2005年 3月 15日 (火) 23:16:51 JST


田中です。

デッドロックについて質問です。

自宅サーバにて PHP x PostgreSql でHPを設置しています。最近
よくデッドロック状態になるのですけど原因が分かりません。デ
ッドロックにならないようにプログラムは常に1つのテーブルのみ
ロックするようにしています。ロックするテーブルを abc_tab と
するとどのプログラムを走らせても abc_tab をロックするように
しています。abc_tab を全く使わないプログラムが起動するときも
abc_tab をロックしています。ロックする必要がなかったとしても
abc_tab をロックします。どのプログラムを走らせても最初にある
ファイルをincludeしそこで

BEGIN;
LOCK TABLE abc_tab IN SHARE ROW EXCLUSIVE MODE;
を宣言し、register_shutdown_function() でプログラム終了前に
if(!connection_status()){
  COMMIT;
}else{
  ROLLBACK;
}
を呼び出すようにしています。つまり1プロセスしか実行できない
ようになっています。

HPを設置したのが去年です。問題が起きはじめたのは3日くらい前
からです。最近は何もプログラムは触っていないのにデッドロック
になりまくりです。今まではアクセス数が100件ほどでしたが3日く
らい前から800件ほどに増えたのですが何か関係はあるのでしょう
か。(連続アクセスはカウントしない)

ちなみにサーバのメモリは128MBしかありません。何か関係ありま
すでしょうか。処理時間がかかるような処理もないし、常に応答は
早いです。

原因は何なのでしょうか?プログラムが途中で止まるような事って
あるんでしょうか?ロックを掛けたが途中で止まったなんてことは
あるのでしょうか。

__________________________________
Do You Yahoo!?
Upgrade Your Life
http://bb.yahoo.co.jp/



PHP-users メーリングリストの案内