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

Yoshiyuki Asaba y-asaba @ sraoss.co.jp
2006年 7月 18日 (火) 10:32:30 JST


おはようございます、浅羽です。

From: Eiichiro ITANI <emu @ ceres.dti.ne.jp>
Subject: [pgcluster: 897] Re: pgbench で固まってしまいます
Date: Tue, 18 Jul 2006 00:45:36 +0900

> > pgbench で固まらないパッチを作ってみました。一度 ML にパッチを添付して
> > 投稿したのですが、承認待ちになってしまいましたので、
> >
> >  http://www.sra.co.jp/people/y-asaba/pgcluster/deadlock.patch
> >
> > に置きました。手元の環境では一応問題無く pgbench が動いていましたが、
> > ちゃんとコードを読んでいないのとテストしていないので他の場所で問題があ
> > るかもしれません。
> 
> おおぉ、確かに pgbench で固まらなくなりました。こちらもとりあえず頂い
> たパッチを当てて再インストールして pgbench 走らせてみただけなので、他
> で問題出るようになったのか試せておりません(^^;)

何か再現しましたらお知らせください。時間が取れれば何か協力したいと思い
ます。


> >> replicator のデッドロックを検出して replicator をリスタートする、などの
> >> 方法ってないものでしょうか? トランザンクションはフェイルしますが、デッ
> >> ドロックしたままになるよりは良い気がします。
> >
> > うーむ、難しそうですね。
> 
> むむむ、難しいのですか…。
> # sem_lock req の所で固まるのだから、そこにタイムアウト追加して、ぐら
> # いで何とかならないのかしら、というのは素人考えなのですね m(_ _;)m

alarm() を仕掛けておけばよさそうですが、一部のノードではトランザクショ
ンが終了した、という状態になっているので、キャンセルするとデータの整合
性が崩れる可能性があります。なので、実装が難しいというよりは本当に実装
していいのか?という判断が難しいかなあ、と思っています。


> ところで、今回作成頂いたパッチで 3クライアント以上同時(-c 50 が通ったの
> は確認しました、すごい!)の pgbench が通るようになりましたが、依然として
> replicator がデッドロックする場合はあるのでしょうか?
> 
> 素人目には、これで問題解決、万々歳、なように見えてしまいます (?_?)
> 
> 先日の浅羽さんのメイルにあった
> 
> > このデッドロックが発生する条件は調べた限りでは、
> >
> >   - トランザクション隔離レベルが read committed
> >   - 同じ行に対して 3 クライアント以上がロックを獲得しに行く
> >
> > です。pgbench で -c 2 の場合は、デッドロックしないのを確認できるかと思
> > います。
> 
> が、今回のパッチで解消されたわけではないのでしょうか?

今回のパッチは、行ロックをテーブルロック(SHARE ROW EXCLUSIVE)に置き換
えるということをやっています。これは、postgresql.conf の
auto_lock_table = true の場合にこのような挙動になります。false にした
場合は依然として pgbench は固まります。

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



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