都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

SQL Server のチューニングについてまとめてみる - その15 - ( 無駄なキャッシュプランを探してみる )

今回やることを説明してみる

 無駄なキャッシュプランを探します。  

使用する環境を説明してみる

 My Lenovo with SQL Server 2014 です。

試してみる

 早速試してみましょう。無駄にキャッシュされている可能性が高い sys.dm_exec_cached_plans の usecounts が一回のものを抽出します。

SELECT [SQL文] = st.text,  
       [SQLタイプ] = cp.objtype,
       [キャッシュ容量] = cp.size_in_bytes
FROM sys.dm_exec_cached_plans cp 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) st
WHERE cp.usecounts = 1 
AND cp.cacheobjtype = N'Compiled Plan' 
AND cp.objtype IN (N'Adhoc', N'Prepared') 
ORDER BY cp.size_in_bytes DESC
OPTION (RECOMPILE)

f:id:koogucc11:20150215224355p:plain

 このような場合、パラメータ化クエリや optimize for ad hoc workloads の適用を考えましょう。また、キャッシュプランを残さない方法もあります。下記の記事を参考にしてください。

こんな時、RECOMPILE したほうがいいよねと思って記事書いてみた - 都内で働くSEの技術的なひとりごと

終わりに何か言ってみる

 無駄なキャッシュプランは極力無くしていきましょう。チューニングはまだまだ続く....続く....続く....

※今までの記事でクエリの書き方が統一されていなかったですね。次回から今回の記事のような記述にします。テーブルの別名は、『AS』を付けないとか。なんか気分によって付けたり、付けなかったりするんですよね。

Kindle版と書籍版。

Microsoft SQL Server 2014 Query Tuning & Optimization

Microsoft SQL Server 2014 Query Tuning & Optimization

Microsoft SQL Server 2014 Query Tuning & Optimization

Microsoft SQL Server 2014 Query Tuning & Optimization