[pgsql-jp: 26005] Re: ロックしているプロセスの確認

Hiroki Takada takada @ rh.xdsl.ne.jp
2002年 5月 17日 (金) 13:49:36 JST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

高田と申します.

こんにちは.

> PostgreSQL 7.2.1(Linux)を使用して開発を行っていますが あるクライアン
> トから更新中にクライアントがハングアップしたのでリブートしました。
> その後 先と同一プログラムを実行したところ 終了しませんでした。
> 調査すると ハングアップする前に実行していた処理でDBのレコードロックがか
> かっていた為でした。Postgreを立ち上げなをしたら 正常に終わりました。
> 
> 
> そこで質問ですが
>   ロックしたプロセスを確認する方法は無いですか? 又そのプロセスの解放
>  は KillでOKですか?

デッドロック(どうやって確認したのですか?)についての御質問かと思いますが,libpqを
利用しているのであれば,

PQbackendPID Returns the process ID of the backend server handling this connection.

int PQbackendPID(const PGconn *conn);
       
という関数がありますので,トランザクション開始する前にサーバ側で接続をハンドルして
いるプロセスのIDを取得しておくというのもひとつの方法かと思います.

ただし,デッドロックが発生する場合は,やり方を見直せば解決する場合もあります.

マニュアルの,Chapter 9. Multiversion Concurrency Controlあたりに,MVCCとPostgreSQL
で実装されているトランザクションの分離レベルなどについて説明がありますので,一読して
みてはいかがでしょうか.


- -- 
 ----------------------------------------------------
|   高田 浩生 (Hiroki Takada/takada @ rh.xdsl.ne.jp)   |
|                                                    |
|   My public key is available at the public key     |
|   servers. The message was signed as iso-2022-jp   |
|   char-set document in no PGP/MINE (RFC 2015)      |
|   format.                                          |
 ----------------------------------------------------


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: KUHASIKU WA http://www.gnupg.org/ WO GORANKUDASAI

iD8DBQE85IvcyTl8Jc+E3sERAqJbAJwNRNhWHe0gDhmktxINH0YYzAru4ACePj5l
qG8kBuJKUDy9aDv6+8S5yPw=
=HVGk
-----END PGP SIGNATURE-----



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