2010年11月 5日

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

井上です。

(2010/11/05 12:31), toshihideka4316@xxxxx wrote:
> お世話になります、片山です。
>
> PostgreSQL8.2.14(サーバ、クライアント共に)+ODBC(ドライバver8.2.4)を使用して
> おります。
> DeclearFetchとクライアントカーソル・サーバカーソルの組み合わせを変えながら容


DeclearでなくDeclareです。
Declare cursorとfetchコマンドを使用してデータを小出しに処理
するイメージです。

> 量が約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とカーソルの使い分けが必要だと思うので
> すが、使い分け方がわかりません。

基本的にはサーバーカーソルを使用してください。クライアントカーソルは
間にカーソルライブラリが介入するのですが詳細は不明です。上の結果を
見る限りは結局は全データを取得してしまうようですね。


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




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