[pgsql-jp: 30324] Re: ロック状態の取得

Tetsuo SAKATA sakata.tetsuo @ lab.ntt.co.jp
2003年 7月 2日 (水) 11:58:21 JST


こんにちは.坂田@横須賀です.

もとの要求が良く分かりませんが,要求を見なおすことで,
PostgreSQLに手を入れなくても知れませんね.

さて,下記に書かれている『デッドロックのキャンセル』ですが,
これは「デッドロックを生じていれば,そこにハマッている
トランザクションをアボートする」機能です.

元のキハラさんのメールを読む限り,単に待っているだけの
(デッドロックとは限らない)トランザクションをアボートさせたい訳ですから,
この機能をそのまま利用することは出来ないのではないかと思います.

なお,PostgreSQLの内部には,既にロックされているテーブルに対して,
あとからロックを取得しようとすると,待機せずに即座に戻ってくる
関数も用意されています.

しかし,この関数は一般のユーザに開放されているわけではなく,
(lazy) vacuum専用のようです.

ご参考まで.

NAKAMURA Takeshi wrote:
> 
> 仲村@まともに使ったことがないのに知恵だけ付いてるやつです(^^;
> 
> On Wed, 02 Jul 2003 01:30:29 +0000,
>  "Hideaki Kihara" <kihara_hideaki_net @ hotmail.com> wrote:
> 
> >>ロック状態を確認して待ち状態を回避する方法を探しております。
>  確認する方法は...あるのかな?
> 
> > 現状、待ち状態を回避する方法として以下に着目して調査をしようと思っています。
> >
> > 「タイムアウト時間」と「処理のキャンセル」
> 
> http://search.net-newbie.com/pgsql/sql-lock.html に、
> =======================
> PostgreSQL はデッドロックを検出し、少なくても 1 つの待ち状態の
> トランザクションを、デッドロックを解消するためにロールバックします。
> このルールに厳密に従ったアプリケーションを作成するのが実用的で
> ない場合は、トランザクションがデッドロックによってアボートした
> 場合に再試行するようにするという手段もあります。
> =======================
> と、いう文があります。よって、処理のキャンセルは自動的になされます。
> 
> そして http://search.net-newbie.com/pgsql/runtime-config.html> ===
> DEADLOCK_TIMEOUT (整数)
> === 長いので略(^^;)
> 
> > 調査にあたり、イメージがつかめないので以下の質問に答えていただけませんでしょ
> > うか?
> > ・タイムアウト時間はどこで設定するのでしょう?
> DEADLOCK_TIMEOUT を設定
> 
> > ・処理のキャンセルはSQLで行うのか。それとも特別なコマンドを使用するのか?
> > (マニュアルもどこを参照して良いかわかりません(T-T))
> サーバーが勝手に行う。SQL を実行中によそから割り込むことはできない。
> # OS で kill しちゃ駄目(^^;;;;
> 
> > ・開発は「PQCOMPO(libpq.dll)」を使ってC++Builder5.0で行う予定にしています。
> > 上記処理はPQCOMPO(libpq.dll)に実現できるのでしょうか?
>  できない。サーバーが勝手に行うので、条件を事前に設定しておく。
> 
>  こんなところでどうでしょうか。
>  デッドロックで調べると、もう少し分かると思います。
> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+
>  関西沖縄青年の集い がじまるの会 手伝い 一人だけの勝手に神奈川支部
>  仲村 武 <1yen @ sh.rim.or.jp>

-- 
Tetsuo SAKATA, Yokosuka JAPAN.



pgsql-jp メーリングリストの案内