2010年11月 4日

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

井上です。

(2010/11/04 17:38), toshihideka4316@xxxxx wrote:
> お世話になります、片山です。
>
> PostgreSQL8.2.14(サーバ、クライアント共に)+ODBC(ドライバver8.2.4)を使用して
> おります。
> (接続文字列は以下の通りです)

> DSN=PostgreSQL35W;DATABASE=MIDO;SERVER=MIDO;PORT=5432;UID=MID
> O;PWD=xxxxxxxxxxxxxx;SSLmode=disable;ReadOnly=0;Protocol=7.4-2;FakeOidIndex=
> 0;ShowOidColumn=0;RowVersioning=0;ShowSystemTables=0;ConnSettings=;Fetch=100;
> Socket=4096;UnknownSizes=0;MaxVarcharSize=255;MaxLongVarcharSize=8190;Debug=0
> ;CommLog=0;Optimizer=1;Ksqo=1;UseDeclareFetch=0;TextAsLongVarchar=1;UnknownsA
> sLongVarchar=0;BoolsAsChar=1;Parse=0;CancelAsFreeStmt=0;ExtraSysTablePrefixes
> =dd_;;LFConversion=1;UpdatableCursors=1;DisallowPremature=0;TrueIsMinus1=0;BI
> =0;ByteaAsLongVarBinary=0;UseServerSidePrepare=0;LowerCaseIdentifier=0;XaOpt=
> 1
>
> 280万件のデータが入ったテーブル(テーブルサイズ:2161MB)に対して、全レコー
> ドを取得する単純なSQLを発行しましたところ、
> エラーが発生しました。

psqlodbcドライバは取得データをメモリに保持しますので、これだけ大量の
データを取得すると大抵の場合メモリーオーバーフローを起こします。回避
するためにはDeclare〜Fetchを使用するをオンにして利用してください。

> #エラーが返ってくるまでの時間は1秒程度です。
>
> ■エラー内容
> 「[Microsoft OLE DB Provider for ODBC Drivers] Out of memory while reading
> tuples.;Error while executing the query (SQLState:S1000)」
>
> ■メモリの消費量
> クライアントメモリ⇒仮想メモリ300MB 実メモリ60MB
> サーバメモリ⇒接続時から仮想メモリ158MB  実メモリ38MBでほぼ安定
>
> メモリの消費量からして、メモリの制限にひっかかったとは考えにくいのですが...
> お手数ですが以下の2つについて教授願えないでしょうか。
> 1.サーバorクライアントの問題どちらであるか
> 2.エラーとなる原因
> 以上お願いいたします。


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




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