[pgcluster: 908] Re: pgbench で固まってしまいます

Eiichiro ITANI emu @ ceres.dti.ne.jp
2006年 7月 26日 (水) 15:20:25 JST


こんにちは,猪谷です。ご返答ありがとうございます。

Yoshiyuki Asaba <y-asaba @ sraoss.co.jp> writes:

>> 簡単に言えば、ロックの粒度を大きくしているので pgcluster でのデッドロッ
>> クは避けられるが、デメリットとして同一のテーブルの更新を伴う複数のトラ
>> ンザンクションが並行する場合に、大きくパフォーマンスが落ちる可能性があ
>> る、という理解でよろしいでしょうか?
>
> はい、そうなります。またパフォーマンス以外にも(PostgreSQL の)デッドロック
> が発生する可能性が高くなります。

なるほど… やはりロック周辺は相当難しい問題のようですね。

この場合に発生しうるpostgresqlレベルのデッドロックは、deadlock_timeout
で調整可能なのでしょうか。

> ちなみに、INSERT するテーブルには何か制約かトリガーが設定してあります
> でしょうか?また、トランザクションを終了させずにクライアントが接続を切
> 断しているロジックはありますでしょうか?

今の時点では、トリガーや(外部参照を伴うような)制約は特にありません。

クライアント側の挙動に関してはわたしの方では把握できていないので、調べ
てみます。cgi/fcgi の物がほとんどなので、プログラムミス以外で途中切断す
るように書かれた物はないと思います。ですがWWWクライアントから接続を切ら
れた場合の動作によっては、途中で接続断が発生するかもしれません。

またほとんどのクライアントが特に指定なく perl DBI で接続していたので、
prepare ステートメントをサーバ側で実行していたと思われます。以前英語版
の pgcluster ML アーカイブで prepare すると遅くなる問題について拝見し
ましたので、pg_server_prepare を 0 にするようにクライアントを変更しま
した。


まだ継続的に pgreplicate のデバッグログを見ていますが、同様のロックは
発生していないようです。まだしばらく観察続けてみます。

--
  いたに えいいちろう



pgcluster メーリングリストの案内