- PR -

SQL Server2005の処理レスポンス低下について

1
投稿者投稿内容
たか
会議室デビュー日: 2009/02/08
投稿数: 4
投稿日時: 2009-02-08 02:32
どなたかご存知の方、教えてください。

SQL Server2005を利用した業務アプリを開発しています。
現在、約10万件のデータを一括格納するプログラムを開発していますが、一回目の処理
は数分で終わるのですが、二回目以降は数時間(場合によっては10時間)かかってしまい、非常に困っています。
サーバー再起動を行うと、また数分で処理完了できるようになるのですが、何回か処理を行うと同じ状態になってしまいます。

不勉強で原因が全く分かりません。どなたか教えてください。
素人考えで、DBの項目にvarchar(max)を利用していると、大量データ処理に問題があるのではないかと疑ったりもしています。

よろしくお願いします。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-02-08 02:52
情報がもう少しないと何とも言えませんが

とりあえず一回目と二回目以降はそもそも同じ処理ですか?
業務アプリが動いているマシンとサーバーは同じマシンですか?


varchar(max)の列は主キーですか?
関係ないかもしれませんがSQLServer2005だとフルテキストインデックスの作成に
時間がかかるというバグもあるようで・・・
http://support.microsoft.com/kb/937086/ja
http://support.microsoft.com/kb/937086/en-us/


たか
会議室デビュー日: 2009/02/08
投稿数: 4
投稿日時: 2009-02-08 07:55
回答ありがとうございます。

一回目と二回目以降は取り込む対象データは違いますが同じ処理です。
一回目で5万件取り込み、2回目で4万件取り込むといった感じです。

業務アプリが動いているマシンはWin-xp pro(CPU:Celeron 2GHZ,メモリ:1GB)で、そちらから処理実行し、サーバー(Win 2003ServerR2 CPU:Xeon(4CPU) メモリ:4GB)のSQL-Serverにストアドプロシージャで書き込んでいる処理です。

varchar(max)の列は主キーではなくデータ部で使用しています。
DB全体では1.2GB程度なのですが、このテーブルだけで約600MB(約9万件)も容量がかかっており、負荷が高いのではと感じていました。

ちなみに、二回目以降の処理を実行中のサーバーのCPU負荷やメモリ使用量を監視していましたがCPUは数%しか負荷がかかっておらず、メモリは約2.5GB利用している状況でした。

また、一回目の処理前と二回目の処理後で、下記sql分をサーバーで実行すると、明らかにSQL Server自体の応答が遅くなっていたのも確認しています。

 SELECT COUNT(*) FROM XXX(今回問題となっているvarchar(max)を利用しているテーブル)

 → 一回目処理前は一秒かからず結果が返ってきました。
 → 二回目処理後は15秒かかって結果が返ってきました。

何かアドバイスありましたらお願いいたします。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-02-08 12:47
max server memoryはいくつになっていますか?
大きいようでしたらためしに小さくしてみるという手もあります。


通常、SQLServerはスワップ対策でメモリを確保しつづけますが使用が終わってもバッファキャッシュなどを積極的には解放しなかったはずで
2.5GBと出ていても、2.5GB必要とは限りません(それぐらい確保していいという設定になっているから、確保したまま解放していないだけかもしれないため)。

4GBのマシンで2.5GBで、今回の事象となるとページングが心配になります
(ほかに何のサービスがうごいているかにも依存しますが)。
キャッシュの解放、取得のプロセスにページングが絡むと非常に遅くなりますので、
確認してみるといいかもしれません。


たか
会議室デビュー日: 2009/02/08
投稿数: 4
投稿日時: 2009-02-08 22:45
回答ありがとうございました。

max server memoryの値を確認してみます。

SQL Server自体の知識があまりなく、つたない質問に答えていただきありがとうございました。
また質問するかも知れませんが、よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)