2017-08-14 6 views
-3

私たちはこのクエリを持っています。Sqlクエリがタイムアウトします。しかし、任意のインデックスの名前を変更した後で動作します

数ヶ月前に、タイムアウトが開始されました。

ただし、インデックスの名前を変更して(名前に文字を追加する)、クエリを再度実行すると機能します。毎日同じようにする必要があります。毎日インデックスの名前を変更すると、クエリが再び機能します。

問題が何ですか?どうすればこの問題を解決できますか?インデックスの名前を変更するとタイムアウトの問題はどのように解決されますか?

+1

テーブル構造、インデックス宣言、テーブル統計、問題クエリ – Scoots

+0

質問を編集して、インデックスの名前を変更するとクエリのタイムアウトに影響することがあるのはなぜですか。実際には私たちが実行しているストアドプロシージャ(1000行の長さ) –

+0

私の推測ですか?インデックスが正常に実行されず、クエリプランがキャッシュされています。インデックスの名前を変更すると、次にクエリを実行するときに計画が変更される可能性が高くなります。その後、次の実行のために再びキャッシュされます。 RECOMPILEのトラブルシューティングを試したことがありますか、実行計画やインデックスの名前を変更する以外に何かを見ましたか? –

答えて

2

これらの現象は、パラメータスニッフィングのために準最適なキャッシュされたクエリプランが使用されていることを示しています。索引の名前を変更すると、キャッシュされたプランが無効になるので、次回の使用時には、クエリ・パラメーター値に最適な新しいプランが生成されます。

SQL Server documentationに記載されているように、OPTION(RECOMPILE)またはOPTION(OPTIMZE FOR...)のようなクエリヒントを使用してパラメータスニッフィングを避けることができます。

+0

RECOMPILEを追加しようとしましたが、動作しませんでした。 –

+0

@ StephenH.Anderson、 'OPTION(RECOMPILE)'クエリヒントを試しましたか?(WITH RECOMPLE'ストアドプロシージャオプションと混同しないでください)? –

+0

私はストアドプロシージャを実行しています。そこでWITH RECOMPILEを追加しました。どのようにストアドプロシージャを実行することができますOPTION(RECOMPILE)を追加しました。exec my_sp NULL OPTION(RECOMPILE)を試しましたが、エラーが発生しました(SQL 2005にあります) –

関連する問題