Help us understand the problem. What is going on with this article?

SQLServer: クエリの初回実行だけやたらと遅いときに考えられる原因

More than 3 years have passed since last update.

SQLを初めて実行するときだけ、やたら重いという経験ありませんでしょうか?
同じSQLの2回目以降の実行はめちゃ速いのに。。。みたいな。

まさにその状況が発生したのですが、「統計情報の自動作成」が原因でした。
(業務で使用するSQLのため載せられませんが、ちょっと複雑なSELECT文です。)

アドホッククエリなので初回のコンパイル時間も疑ってみましたが、option(recompile)つけても高速でした。(もちろんクエリキャッシュにヒットするよりはコンパイルの分だけ時間かかりますが、気にならない程度でした)

captha.png

SqlServerProfiler でのキャプチャ結果

このAuto Stats(統計情報の自動更新)が走るとどうなるかというと、該当のテーブルの統計に新しい統計情報が作成されます。(「_WA_Sys_00000008_0T12DVFAG」 みたいなやつ)

SQLの述語の中で使われているカラムに対して自動作成されるっぽいです。
が、_WA系の統計が作成されるのは無駄、という意見もあるようです(http://ryuchan.hatenablog.com/entry/2014/03/23/184242)

ためしにAuto Statsおきないように設定変えてから、同様のクエリを実行したところ一回目から高速でした。なので確かに_WA系の統計はいらないのかも。。。少なくとも、統計情報は非同期更新されるように設定しておいたほうが良いのかもしれません。

とにかく原因は分かったので、これでクエリの初回実行時にめちゃくちゃ時間かかっても焦ることはなくなりそうです!

_Waな統計に関する情報は以下が詳しそうでした。(深堀するとどうしても日本語の文献が少ない。。。)
https://www.mssqltips.com/sqlservertip/2734/what-are-the-sql-server-wasys-statistics/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした