2012-01-24 13 views
5

Microsoft SQL Server 2008のパフォーマンスに関する質問は、主に実行計画に関するものです。SQL実行プランのキャッシュ

よれば、MSDNに、ストアドプロシージャは、直接SQLクエリに比べてより優れた性能を持っているので、データベースは、準備最適化し、実行計画がで再利用することができるように実行プランをキャッシュでき

後の時間。

私の最初の質問がこのような場合です。私は以前に、パラメータ化されたクエリ(プリペアドステートメント)を使用するときに、実行プランがキャッシュされ、潜在的に異なる値(実行コンテキスト)で実行されます。ストアドプロシージャは依然として効率的でしょうか?その場合、ストアドプロシージャの実行プランはオンデマンドでのみ再作成されるか、キャッシュからクリアされる可能性は低くなりますか?パラメータ化されたクエリはad-hoc queryとして扱われますか?実行計画がキャッシュからクリアされる可能性がより高いですか?

また、私はまだこの分野の初心者であるため、T-SQLでしか動作しない特定のコマンドがあるかどうかは疑問です。 Microsoft SQL Management StudioとADO.NETの両方で、最初の実行で12秒、その後3秒後に完了するクエリがあります。クエリはプレゼンテーションの一部として効果がないと思われます。私の質問では、CHECKPOINTDBCC DROPCLEANBUFFERSの両方をthis articleとして、またOPTION (RECOMPILE)として使用しています。しかし、クエリがまだ3秒かかるので、少なくとも最初の2つは違いを生じさせていないようです。私の推測では、データキャッシュがクリアされていないためです。キャッシュがクリアされないように見えるアイデア、または最初の実行後にクエリが大幅に高速になる理由についてのアイデアはありますか?

これは私が今考えている質問です。

+2

良い質問 - 私はこの記事をいくつかの記事に分割します。ストアドプロシージャとパラメータ化されたクエリ、複数のクエリを実行するための1つのポストなどについては、おそらく1つの投稿 –

+0

おそらくあなたは正しいです。私の心はスパムではないと考えていました。 :-) – Andy0708

+0

stackoverflowのアイデアは、質問に焦点を当てて答えを集中させるようにすることです - 質問をたくさん載せてサイトを読み込むことを心配しないでください –

答えて

3

"ストアドプロシージャは依然として効率的でしょうか?"それは非常に少ない保存します。パフォーマンスの観点からは、あなたのアプリでSQLリテラルをかなり使うことができます(ただし、巨大な場合を除く)。 SQL Serverは、送信した文字列をキャッシュされたプランと一致します。

"すべてのキャッシュをクリアしたことを考慮すると、おそらく統計上の問題です。最初の実行では12秒〜3秒後に完了するクエリがあります。 SQL Serverは、最初に列にアクセスしたときに統計を自動作成します。私はこれがあなたに一度起こったことだと思います。 sp_updatestatsを実行してください(キャッシュをクリアする前に)。

+0

Doストアドプロシージャとパラメータ化されたクエリの実行計画が同じ方法でキャッシュ内で処理されるかどうかを知っていますか?私は、もし誰かが他よりも洗い流される可能性が高いならば。統計情報をクリアすることは効果がほとんどないようです。 – Andy0708

+0

私はそれらが異なるフラッシング特性を持っているとは思わない。フラッシュはメモリが不足している場合にのみ発生しますので、これはまったく問題ではありません。 – usr

+0

パフォーマンス上の理由からすべてのコードをsprocsに保存するのは本当に時代遅れです。 – usr

関連する問題