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

Yoshiyuki Asaba y-asaba @ sraoss.co.jp
2006年 7月 26日 (水) 13:38:45 JST


こんにちは、浅羽です。

From: Eiichiro ITANI <emu @ ceres.dti.ne.jp>
Subject: [pgcluster: 903] Re: pgbench で固まってしまいます
Date: Tue, 25 Jul 2006 20:07:04 +0900

> > 今回のパッチは、行ロックをテーブルロック(SHARE ROW EXCLUSIVE)に置き換
> > えるということをやっています。これは、postgresql.conf の
> > auto_lock_table = true の場合にこのような挙動になります。false にした
> > 場合は依然として pgbench は固まります。
> 
> 簡単に言えば、ロックの粒度を大きくしているので pgcluster でのデッドロッ
> クは避けられるが、デメリットとして同一のテーブルの更新を伴う複数のトラ
> ンザンクションが並行する場合に、大きくパフォーマンスが落ちる可能性があ
> る、という理解でよろしいでしょうか?

はい、そうなります。またパフォーマンス以外にも(PostgreSQL の)デッドロック
が発生する可能性が高くなります。


> 今パッチを当てた 1.5 でテストをしておりますが、perl DBI なクライアント
> からの処理を色々やっている最中に、レプリケーターがロックしてしまったよ
> うです。具体的に何をやっておかしくなったのか把握できないので
> (pgreplicate はデーモンモードで動かしているため、ログが取れていません)
> 改めて再現できないか調べております。
省略
> おかしくなった所で、psql を使って cgi/fastcgi が触っているのとは別の
> DBクラスタに接続し、そこのテーブルへの INSERT を試みた所、INSERT が固まっ
> てしまいました。C-c でクエリのキャンセルを行おうとしてもプロンプトが返っ
> てこず、しばらく待ってもダメだったので、主/従のレプリケータを終了し、レ
> プリケータの再起動を行いました。

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

--
Yoshiyuki Asaba
y-asaba @ sraoss.co.jp



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