- PR -

初回クエリが遅い

1
投稿者投稿内容
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2007-05-29 13:57
いつもお世話になっております。

Windows 2000 Server
SQL Server 6.5
VB 6.0
※旧サーバー:CPU4つ、メモリ4GB
※新サーバー:CPU2つ、メモリ2GB
※データ件数:新旧同じ

のクライアントサーバーアプリを使用していますが

今回、サーバー環境を別のサーバー機に移行したのですが
VBアプリから新サーバーに接続すると初回のクエリが旧サーバーと
比べて何十倍もかかってしまいます。
(旧だと1秒なのに新だと20〜30秒)

2回目からは早いのは、キャッシュされているからと分かるのですが、
旧サーバーではそのようなことはありませんでした。
また、VBアプリを終了して、しばらくして再度VBアプリから接続したときも
初回クエリが遅いので、必ずしもサービス起動後の初回という訳でもありません。

SQLServerの環境設定オプション値で使用メモリを増やしてみたりしましたが
結局初回の速度は変わりませんでした。

またパフォーマンスモニタをチェックしてみると、遅いときの
「I/O Page Reads/sec」が極端に上がっていることが分かりました。
2回目以降は上がりませんでした。

下記URLが原因に近そうなんですが、
http://www.microsoft.com/japan/technet/prodtechnol/sql/70/maintain/sqliopt.mspx
設定してもあまり変わらないため、関連性のありそうな設定を
ご存知の方、教えて頂けると助かります。

かなり検索したのですが、クエリのチューニングの記事が多く、
質問させていただきました。
以上、宜しくお願い致します。


[ メッセージ編集済み 編集者: Q 編集日時 2007-05-29 13:57 ]
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2007-05-30 12:49
旧サーバーと新サーバーで実行計画が変わっていませんか?



...この投稿、以前も読んだ気がするのですが気のせいでしょうか?
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2007-05-31 12:07
よっしーさん、回答ありがとうございます。

実行計画とは、SQL文の書き方によって実行速度が変わるものと認識して
いるのですが、今回EXEは同じものを使用している為、SQL文は未変更です。
それともSQLServer側の設定で実行計画という設定項目があるのでしょうか?
すみません。無知で。

>...この投稿、以前も読んだ気がするのですが気のせいでしょうか?
確かに似たような投稿、多いですね。ほとんどがSQL文のチューニングか
未解決で終わっているようですが。。
私自身、会議室には何度かお世話になってますが、この件は初投稿ですね。

宜しくお願いします。
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2007-05-31 13:23
msoです。

引用:

Qさんの書き込み (2007-05-31 12:07) より:
よっしーさん、回答ありがとうございます。

>...この投稿、以前も読んだ気がするのですが気のせいでしょうか?
確かに似たような投稿、多いですね。ほとんどがSQL文のチューニングか
未解決で終わっているようですが。。
私自身、会議室には何度かお世話になってますが、この件は初投稿ですね。

宜しくお願いします。




いや、、、そうじゃなくて、過去ログを探せってことでは?
過去ログを探したのであれば、何を試して、何がダメだったのかを
書いていただければ、回答をする人も的を絞りやすいのですが。
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2007-05-31 15:40
msoさん。

なるほど。解釈間違えてましたね。
すいませんでした。

試したことと言えば、

SQLサーバーの環境設定オプションで
・「memory」400000から800000→変わらず
・「memory」400000から10000→毎回遅く
・「tempdb in ram」100から50→変わらず
・「max async IO」8から16→変わらず
・「network packet size」4096から12288→変わらず
・「open objects」500から3000→変わらず
・「backup buffer size」1から32→変わらず
・「locks」5000から80000→変わらず
※最後の2項目は旧サーバーに合わせただけなので、
 関係ないかもしれませんが。

サーバーのSQLクライアント設定ユーティリティーで
・デフォルトネットワークを「名前付パイプ」→変わらず
・デフォルトネットワークを「TCP/IPソケット」→変わらず

データベース再構築
・再度、旧サーバーからデータベースを転送して作成→変わらず

テーブルのデータ(2テーブルを結合)を
・100万件から10万件→毎回早く

といったところです。
あとは、ネットでチューニングの記事などを読んで調べていますが
他にあたりが付けられない状態です。
(現状、記事を見る限り、物理メモリ不足なのかなと思ってます。)

他に試せることがあれば、何とか教えて頂けませんでしょうか。

[ メッセージ編集済み 編集者: Q 編集日時 2007-05-31 15:47 ]
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2007-06-03 02:07
引用:

Qさんの書き込み (2007-05-31 15:40) より:
データベース再構築
・再度、旧サーバーからデータベースを転送して作成→変わらず


インデックスや統計情報は最適化されていますか?
旧サーバーDBのバックアップ戻しや、アタッチした場合でも
状況は変わりませんか?
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2007-06-03 10:20
SQLServer6.5はグラフィカルに実行計画を見れないんですね。
きっと新サーバーになってから実行計画が変わってインデックスを追加すれば良いと思ったのですが、
2000以降しか扱ったことがないので6.5でどのように確認するかわかりません。

お役に立てなくてすみません。。。
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2007-06-13 12:46
お返事遅くなり、すみません。

>ハニワ祭りさん
テーブルのインデックスについては、確認したところ、旧サーバーの設定と
同じでした。ただ、最適化されているか?といわれると知識不足のため、判断が
現状つきません。それについては書籍購入したので、勉強してみます。
統計情報で確認する方法ですが、初回とそれ以降でどのように変化しているかを
クエリアナライザで確認するという感じでしょうか?
こちらも試してみます。

>よっしーさん
下記URLに6.5での実行計画確認方法が載っていたので試してみます。
http://www.itmedia.co.jp/help/howto/win/win2000/0007special/sql7/chap9/9_06_2.html


お返事ありがとうございました。
確認次第、またご報告させて頂きます。
1

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