- PR -

ストアドのDB再起動後のレスポンス

投稿者投稿内容
R246
会議室デビュー日: 2006/04/17
投稿数: 14
投稿日時: 2007-02-13 09:16
MeijiKさん
度々のアドバイスありがとうございました。

> どう調べてストアドではなくクエリが遅いことがわかったのですか?
ストアドで動的に作成しているSQL文でビューを作成しました。
変数に設定される項目は固定値にしましたが、それによりビュー自体のレスポンスは、遅くなることはあっても速くなることはないと思ってます。そしてそのビューを再起動直後とそうでない時に実行した場合、同じような処理時間の違いが発生しました。
ビューは凄い単純な内容です。
*------------------------------------------------------------------------*
CREATE VIEW dbo.vwVIEW
AS
SELECT SUM(tblTABLE.fldA1) AS SumA1
FROM dbo.tblTABLE
WHERE (tblTABLE.fldA1 >= 10000) AND (tblTABLE.fldA1 < 100000)
*------------------------------------------------------------------------*

unibonさん
アドバイスありがとうございます。
2倍程度ならまだ納得できるのですが、5倍近くかかります。
しかもストアドであればコンパイルが原因と思うのですが、ビューで遅くなる理由が納得できません。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2007-02-13 12:13
DBMSは、データページやインデックスページを可能な限りメモリ上にキャッシュし、
そのページを使用する検索処理を高速化しています。DBMSを起動して最初の検索処理
では当然キャッシュは空っぽですので、すべてハードディスクから読み取る必要が
あります。一度検索処理が実行されればそれらのページはキャッシュに乗るため、同じ
検索を実行すれば高速に処理されます。
R246
会議室デビュー日: 2006/04/17
投稿数: 14
投稿日時: 2007-02-13 12:40
uk様

アドバイスありがとうございます。
キャッシュが空っぽなのが原因なのですね。OracleやPostgres等の他のDBも使用したことがありますが、通常10秒で終わるものが50秒もかかるような事例がなかったもので、何か他に原因があるものかと思っていました。
夜間のバックアップ後の再起動時のバッチで、ダミーのSQLを実行させて初期化されたキャッシュにページを乗せる等の対策を検討してみます。

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