[pgcluster: 893] Re: pgbench で固まってしまいます
Y. Shimada
yshim_pgsql @ storgate.co.jp
2006年 7月 14日 (金) 11:21:07 JST
三谷さん、お元気ですか?
私も、いまだロックにハマっています。。
(グラスと氷と hogehoge なら良いのですが。。)
ところで、クエリベース・レプリケーションにおいて、
独立な複数のデータベースインスタンスが、複数の同時接続から
他のトランザクションと関連する行(競合するタプル)の更新を
行なう状況で、データベースの整合性を保ち続けること、または、
レプリケーションサーバでのデッドロックを未然に防止するには、
以下お考えのように、ロックを開放する順番でなく、全プロセスが
ロックを取得する順番を、全クラスタDBに渡って同一にするか、
どこかで、シリアライズする事は必要と思っています。
(開放されたロックを、順番待ちしている誰がとるか?)
この時、PostgreSQL が採用している共有バッファベースの
複数プロセスモデルでは、各クラスタサーバでの、ロック取得順序を
互いに通知しあい、かつ、調停役が必要になるかと思います。
レプリケーションサーバが、その役を。。と思うのですが。。
On 2006/07/14, at 0:37, a.mitani @ sra-europe.com wrote:
> 浅羽さん,こんにちは.
>
> 1.3まではご指摘の通りです.
> 1.5ではネステッド・トランザクションのおかげで事情が更に複雑化
> しております.
>
> これはもう,ロック管理の方法を根本的に見直すしかないと思ってお
> り,方法を模索
> 中です.
> どのロックが先に解除されるか,ロックされた時点では判断できない
> のでキューイン
> グするのは解決方法になりませんし,レプリケーションサーバ側から
> コントロールで
> きない問題なのでClusterDB側に何らかの仕掛けが必要になり
> ます.
> いっそのことセマフォをシェアしたらどうだろう,
> と思ったのがPGCluster-IIの発想の発端です.
>>
>> では、なぜ PGCluster でデッドロックが発生するかという
>> と、PostgreSQL の
>> 行ロック獲得アルゴリズムが原因になります。PostgreSQL で
>> は、行ロックを
>> すでに獲得しているトランザクションがあると、他のトランザク
>> ションは待た
>> されます。これは普通の挙動ですね。で、行ロックを持っているト
>> ランザクショ
>> ンが終了すると、一斉に複数のクライアントが行ロックを奪いにい
>> きます。こ
>> こにレースコンディションが存在し、次にどのクライアントがロッ
>> クを獲得す
>> るかわからない状況になります。
>>
---
Y.Shimada
pgcluster メーリングリストの案内