SQL Server ベースの環境で、プランキャッシュをクリアする場合、次のような構文を使用します。
- DBCC FREEPROCCACHE (Transact-SQL)
- DBCC FREESYSTEMCACHE (Transact-SQL)
- ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)
SQL Database の場合は、DBCC ステートメントが使用できませんので、「ALTER DATABASE」でプランキャッシュのクリアが必要となります。
最近の更新で 「ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE」に、プランハンドルが指定できるようになりましたので、個別のプランのクリアも可能です。
ALTER DATABASE による、プランキャッシュのクリアですが、「データベースの CONTROL 権限」が必要となります。
CONTROL 権限 は、強めの権限となり、一般のユーザーに付与するには高すぎる権限です。
ALTER DATABASE CONFIGURATION だけで大丈夫でした orz
(CONTROL は上記の権限を付与するのに必要なだけでした)
プランキャッシュのクリアが必要なケースとしては
- プランのリコンパイルが発生し、実行プランが望ましくない場合に、再コンパイル対象としたい
ケースが考えられます。
このようなケースのプランキャッシュのクリアについては、管理者権限を持っていないユーザーでも実施したいケースがあるのではないでしょうか。
本投稿では、そのようなケースが発生した場合の実現方法をまとめてみたいかと。
Read the rest of this entry »