2010年11月 4日

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

2010/11/4 <toshihideka4316@xxxxx>:
> 280万件のデータが入ったテーブル(テーブルサイズ:2161MB)に対して、全レコー
> ドを取得する単純なSQLを発行しましたところ、
> エラーが発生しました。
> メモリの消費量からして、メモリの制限にひっかかったとは考えにくいのですが...

32bitアプリケーションとお見受けします。32bitアプリだとユーザ用の
アドレス空間が2GBしか無いので、2GB全件を取得すると、クライアント側が

アドレス空間不足になるのは、よくあることです。

> ■メモリの消費量
> お手数ですが以下の2つについて教授願えないでしょうか。
> 1.サーバorクライアントの問題どちらであるか

クライアントです。
たぶん、実メモリの割り付け前にアドレス空間不足になったので、
一見メモリを消費していないように見えたのでしょう。
# とはいえ、普通は少しずつメモリを確保する気がするので、
# 1秒も経たないうちに OOM になるのは若干疑問ですが…

> 2.エラーとなる原因

2GBの全データを一度にメモリに保持しようとしたためです。
小分けにして取得する必要があります。
私は OLE DB には詳しくないのですが、JDBC の setFetchSize() に
相当する機能があれば、それを使うと解消できると思われます。
# なんとなくパラメータの名前的には UseDeclareFetch っぽい気が。

--
Itagaki Takahiro

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




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