DOBON.NET DOBON.NETプログラミング掲示板過去ログ

sqlserver(express)で現実的に処理できる限界はどのくらいなのか

環境/言語:[・windows xp 32bit・メモリ 2GB・cpu 1Ghz・visualstudio 2005 proffessional・sqlserver 2008 R2 express]
分類:[.NET]

はじめて投稿させていただきます。shirocubと申します。
よろしくお願いします。

◯開発環境
 ・windows xp 32bit
 ・メモリ 2GB
 ・cpu 1Ghz
 ・visualstudio 2005 proffessional
 ・sqlserver 2008 R2 express

約100列、約260万行のテーブルが存在します。
(その名前をdataとします。)
(各列には温度などのfloat型のデータが入っています。)
(これで一ヶ月分ぐらいです。)
(主キー、インデックスも設定しています)

dataに対し、avgやmaxやminなどの集計関数を使用したsqlを実行すると、
sqladapterでfillするときにアプリケーション自体が落ちてしまいました。
(ご迷惑をおかけしうんたらかんたら…)
(イベントログに.net framework 2.0 report error? なんじゃらというエラーが残っていました。)
(sqladpterのタイムアウトは無制限にしています。)

約100列、約30万行程度にデータ量を減らすと、問題なく通ります。
(一週間分程度のデータ)

約100列、約260万行のテーブルに集計を掛けるということは、
現実的に無理なことをやっているのでしょうか?
→無理なことであれば、仕様ということで1週間単位でデータ処理するようユーザと交渉します。

または他に方法が存在するのでしょうか?
あればお教えいただきたく。

会社で書き込めないため、返信が遅くなるかも知れませんが、
何卒よろしくお願いいたします。
2012/05/09(Wed) 07:26:34 編集(投稿者)

http://msdn.microsoft.com/ja-jp/library/ms143685(v=sql.105).aspx

260 万行 * 100 列 * 4(float 型) = 1,040,000,000 ≒ 1GB

1 行 1 列に 4 バイト使うとすると、260 万行 * 100 列は 1GB に達します。
Express は前述の URL にあるように使えるメモリに制約が課されていますので、無理と言うことでしょう。
ただ、上記のデータ量以外に作業用のデータが存在するかもしれないので、単純に逆算して決められるかはわかりません。

試行錯誤などで 1 回あたりの消費量が妥当な数値に落とし込めたとしても、使い続けて大丈夫かはわかりませんので、限界を攻めることはおすすめしません。(大きな余裕を持たせるべき)

どうしても必要なのであれば、Express なんて使わない路線を考えるべきだとは思います。
(今更買えないという事情があるかもしれませんが、それは当初の選択を間違えたということにしかならないので、その結果としては仕様で制限をかけることになるでしょう)
■No30423に返信(shirocubさんの記事)

> 約100列、約30万行程度にデータ量を減らすと、問題なく通ります。
> (一週間分程度のデータ)
>
> 約100列、約260万行のテーブルに集計を掛けるということは、
> 現実的に無理なことをやっているのでしょうか?

Azuleanさんが根拠を示している通りですが、実際にshirocubさんが試して
そのように動作しているのだから確認するまでもないのでは?

この結果をふまえてExpressで動作させるにはデータを分割して取得して
ローカルで集計をかけるような作りにすると良いのではないでしょうか?

DOBON.NET | プログラミング道 | プログラミング掲示板