読者です 読者をやめる 読者になる 読者になる

小物SEのメモ帳

IT関係の試したことや調べたことの備忘録

【SQL Server】Plan Cacheのサイズと内訳

SQL Server

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)-「標準レポート」-「メモリ消費量」を選択
f:id:utiowa:20170205180322p:plain

②表示されたレポートの最下部にある「コンポーネント別のメモリ消費量」を開きます
f:id:utiowa:20170205180337p:plain

コンポーネント別のメモリ使用量が表示されます
#CACHESTORE_[xxx]というコンポーネントでそれぞれ確認できます。
f:id:utiowa:20170205180346p:plain


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

広告を非表示にする