2010年11月 5日

[pgsql-jp: 40510] Re:大容量のテーブルに対してSQLを発行するとエラーになる件について

お世話になります、片山です。

PostgreSQL8.2.14(サーバ、クライアント共に)+ODBC(ドライバver8.2.4)を使用して
おります。
DeclearFetchとクライアントカーソル・サーバカーソルの組み合わせを変えながら容
量が約2GBのテーブルに対して全件取得SQLを発行してみました。
結果は以下の通りです。

・DeclearFetch=1、サーバカーソル使用⇒正常終了
 クライアントメモリ⇒仮想メモリ220MB 実メモリ28MB
 サーバメモリ⇒仮想メモリ+1MB 実メモリ+33MB

・DeclearFetch=1、クライアントカーソル使用⇒異常終了
 エラー:「データプロバイダまたはほかのサービスがE_FAIL状態を返しました。」
 クライアントメモリ⇒仮想メモリ1.9GB 実メモリ1GB
 サーバメモリ⇒仮想メモリ+1MB 実メモリ+35MB

・DeclearFetch=0、サーバカーソル使用⇒APがだんまりになる
 クライアントメモリ⇒仮想メモリ600MB 実メモリ400MB
  サーバメモリ⇒仮想メモリ+1MB 実メモリ+35MB

・DeclearFetch=0、クライアントカーソル使用⇒異常終了(先に報告したパターン)
 エラー:「[Microsoft OLE DB Provider for ODBC Drivers] Out of memory while
reading tuples.;Error while executing the query (SQLState:S1000)」
 クライアントメモリ⇒仮想メモリ300MB 実メモリ60MB
 サーバメモリ⇒仮想メモリ+3MB  実メモリ+3MB

以上のように、APによってDeclearFetchとカーソルの使い分けが必要だと思うので
すが、使い分け方がわかりません。
上記4パターンのメカニズム(メモリ確保の方法等)の違いを教えていただけないで
しょうか。

以上お願いたします。

投稿者 xml-rpc : 2010年11月 5日 12:31
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/99772
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。