小物SEのメモ帳

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

SQL server 2016の新機能クエリストアについて

◆クエリストアでできること

SQL server の特定のクエリの実行プランは時間の経過とともに変化します。
プロシージャキャッシュ(プランキャッシュ)には、最新の実行プランのみが格納され、
メモリ負荷によるキャッシュアウトで実行プランがプランキャッシュから削除される場合があります。。

クエリストアを利用すると、1つのクエリにつき複数の実行プランをDMV情報と共に保持されるようになります。実行プラン毎の差分をグラフィカルに確認したり、クエリの特定の実行プランを使用するよう強制するプラン強制が可能になります。
ヒント句を用いるプラン強制と似ていますが、クエリの変更を伴わない(ユーザアプリケーションの変更を必要としない)ことがポイントですね。

実行プランの変更による急激なパフォーマンス低下時の暫定対処等で活躍が期待できそうです。

 

◆クエリストアの有効化

SSMS上のオブジェクトエクスプローラで、データベースのプロパティから操作モードをオフから変更する。

f:id:utiowa:20160618021858p:plain

T-SQLの場合は以下を実行すれば、SQL server 2016以前でも使用できる模様ですが未検証です。。
ただしSSMSは2016である必要あり。
ALTER DATABASE <DB_name> SET QUERY_STORE = ON;

 

◆使用が想定されるシナリオ
・以前の推定の実行プランを強制して適用し、実行プランの変更に伴うパフォーマンス低下を修正
・特定のクエリのデータベースリソース使用パターンを分析

 

f:id:utiowa:20160618022447p:plain

 

◆低下したクエリでは、以下のようなメトリックごとにソートしたDMV情報及び実行プランを確認することができます。

 

f:id:utiowa:20160618022627p:plain

 

◆全体のリソース消費量では、データベース全体における累積のクエリ実行状況が確認できます。

f:id:utiowa:20160618022805p:plain


◆追跡したクエリでは、クエリIDを使用して、特定のクエリについてクエリストアに保存されている実行プランをそれぞれ確認できるようです。

また、上部メニューの「プランの比較」では、それぞれの実行プランの差分を強調表示したり、予想行数やサイズの比較も行えます。

f:id:utiowa:20160618022958p:plain