去年の PASS Summit で Query Store という機能についての情報が公開されました。
都内で働くSEの技術的なひとりごと さんのブログで、PASS Summit で SQL Server の将来機能追加される機能でいけてるものがあったので少しみてみた でも触れられており、この機能は今後注目されていくかと思います。
詳細については以下を参照していただくとよろしいかと思います。
SQL Server Query Store
Newest SQL Server Feature ? “Query Store”
PASS Summit で Query Store – A New SQL Query Tuning Feature [DBA-407-M] というセッションが開催されおり、この情報をベースにして、この Query Store について情報を軽くまとめてみたいと思います。
これらの情報はセッションで発表されたものがベースとなっており、今後動作が変更される可能性がありますので、予めご了承ください。。
Query Store については、現状の最新である SQL Server 2014 では使用することはできません。
冒頭で紹介させていただいたブログでも触れらえていますが、SQL Server 2014 の拡張イベントとしてはすでに登録されているようですが。
SELECT * FROm sys.dm_xe_objects where name LIKE '%query%store%'
また、SQL Database v12 Preview ではステートメントは実行することができるのですが、情報の取得までは実施することができないようでした。
v12 Preview では、以下のような Query Store に関するオブジェクトが既に登録されています。
select * from sys.all_objects where name LIKE '%query%store%'
機能の基本的な概念としては、
- 性能に問題が発生したクエリの、問題が発生したタイミングのプランを取得する
- 性能に問題が発生していないプランでのクエリ実行を可能にする
という点になるかと思います。
クエリのプランについてはキャッシュされていますが、いつまでもキャッシュに残っているとは限りません。
また、プランはコンパイル / リコンパイルにより、いつ実行しても同一のプランが使用されているとも限りません。
Query Store では、システムビュー (sys.query_store_plan / sys.query_store_query / sys.query_store_query_text) を介して、どのようなクエリ (query_text_id / query_id) でどのようなプラン (query_plan) が生成されたのかを確認することができます。
また、ストアドプロシージャ (sp_query_store_force_plan / sp_query_store_remove_plan / sp_query_store_remove_query / sp_query_store_unforce_plan) により、特定のプラン (plan_id / query_id) での実行を制御することができるようになります。
仕組みとしては、
- SQL のコンパイルのメッセージを Plan Store (sys.query_store_plan 相当の情報かと) に格納
- SQL の実行のメッセージを Runtime Stats (sys.query_store_runtime_stats 相当の情報化と) に格納
- 非同期で、Query Store スキーマに出力する
という動作を行うことで、定期的に情報を蓄積していくようです。
実際に使えるようになると、新機能としてのアナウンスがあるかと思いますが、注目しておきたい機能ですね。
[…] Query Store についての情報がいくつか公開されているのでメモを […]
Azure Update (2015.06.06) | ブチザッキ
6 6月 15 at 17:00