web-dev-qa-db-ja.com

RECOMPILE関数

週末に本番レベルのイベントがあり、関数の実行が突然MSから1分近くになりました。

残念ながら、SQLはALTER関数を実行できず、関数を呼び出すクエリの量が多く、CPUが100%クリティカルになり、データベースが使用できなくなったため、「回転」し続けました。

最終的に最速の解決策は、サーバーを再起動することでした。

ただし、ハングしないRECOMPILEを強制するためのより良い/より速い方法はありますか?

RECOMPILEに関する記事をたくさん見つけましたが、ぶら下がっていてブロックされている線に沿ったものは何もありません。

個々のクエリを殺そうとすると、モグラたたきが発生し、十分な速さでそれらをクリアできませんでした。

ありがとう

1
MikeL

...最終的に最も速い解決策は、サーバーを再起動することでした。 ...個々のクエリを強制終了しようとすると、モグラたたきが発生し、十分な速度でクエリをクリアできませんでした。

データベースへの排他的アクセスが必要な場合は、手動でrebootサーバーまたはkillセッションを行う必要はありません。_ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE_を使用して、_ALTER FUNCTION_を発行できます。

キャッシュから個々のプランを削除するには、関心のある_plan_handle_でDBCC FREEPROCCACHE(plan_handle)を使用できます。例Aを参照してください。プランキャッシュからクエリプランをクリアするここ DBCC FREEPROCCACHE(Transact-SQL)

2
sepupic