[pgsql-jp: 40384] Re: サーバカーソル使用時のメモリ増加について

Hiroshi Inoue inoue @ tpf.co.jp
2010年 9月 10日 (金) 07:16:01 JST


井上です。

(2010/09/09 17:29), toshihideka4316 @ zenrin.co.jp wrote:
> 片山です。お世話になります。
> サーバ、クライアント共にPostgreSQL ver8.2.4を使用しております。
> ODBC接続にてサーバカーソルでSQLを複数回発行すると、サーバのメモリを大
> 量に消費して困っております。
> (メモリ消費量約500MB、オープンクローズは正しく行っています)

Declare〜Fetchを使用するを選択しておられますか?
ODBCドライバのバージョンも8.2でしょうか?

もしそうなら新しいバージョン(最新は8.4.2)をお薦めします。
ODBCドライバのバージョンとサーバーのバージョンにはさほど密接
な関連はありません。基本的には新しいほどよいバージョンです。
上記の現象には少し心当たりがあり、改善されている可能性があり
ます。

> クライアントカーソルに変更することで、解決することはわかったのですが、
> サーバカーソルにて、SQLを大量に発行すると、サーバのメモリを大量に消費する
> メカニズムがわかりません。

Declare〜Fetchを使用するを選択している場合、ODBCドライバは
HOLDABLEカーソルを利用します。途中でコミットなどが発生して
も生きているのがHOLDABLEカーソルですが、実際にコミットが
発生した場合のサーバー側の処理は決してsmartとはいえず運が
悪いと大量のデータをサーバー側で保持することになります。

以前のドライバでは必要のない所でCOMMITを発生させている場合
があり、それがご指摘の現象につながっている可能性があります。

> ご存知でしたらご教授願えないでしょうか。
> 
> 以上です。


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