【SQL Server】Plan Cacheのサイズと内訳
SQLServerでは実行プランに関する情報は、プランキャッシュ(Plan Cache)に格納してあります。
プランキャッシュはPerfmonやDMVにて以下の情報を取得することが可能です。
カウンター | 説明 |
Object Plans | ストアドプロシージャ、ファンクション、トリガーのクエリプラン |
Bound Trees | ビュー、規則、計算済みの列、およびCHECK制約のための正規化ツリー |
Extended Storedd Procedures | 拡張ストアドプロシージャのカタログ情報 |
SQL Plans | 自動化パラメータ化クエリ、アドホッククエリのクエリプラン |
Temporary Tables & Table Variables | 一時テーブルおよびテーブル変数に関連するキャッシュ情報 |
#詳細は以下MSDNを参照してください。
https://msdn.microsoft.com/ja-jp/library/ms177441.aspx
またその時点の詳細な内訳をみる場合は以下のような手順でSSMSから確認できます。
①左ペインのオブジェクトエクスプローラー上のインスタンス名を選択して右クリックを押下し、「レポート(P)-「標準レポート」-「メモリ消費量」を選択
②表示されたレポートの最下部にある「コンポーネント別のメモリ消費量」を開きます
③コンポーネント別のメモリ使用量が表示されます
#CACHESTORE_[xxx]というコンポーネントでそれぞれ確認できます。
SQL Serverはメモリ負荷が高い場合に、コスト値の低いプランを削除してプランキャッシュのサイズを管理しています。その削除までのメモリ負荷の制限値はSQL Server2012であれば以下のように算出されます。
ターゲットメモリに対し、0GB~4GBのうち75% + 4GB~64GBのうち10% + 64GB~のうち5%
例えばターゲットメモリが40GBであれば、
プランキャッシュの制限値 = 4 GBの75%(3GB) + 4 GBを超えた分の10%(3.6GB)= 6.6GB
となるかと。
上記はSQL Server2012の場合ですが、それ以前の情報やプランキャッシュの仕組みについて、以下のMSDNにかなり詳細な記載がありますので一読しておくとよいでしょう。
https://msdn.microsoft.com/en-us/library/cc293624.aspx?f=255&MSPPError=-2147217396