1. 新しく追加されたXMLプランの警告
SQL Server 2012より以前のバージョンでは、実行プランの中に遅いクエリの解析するための警告がいくつか出力されていました。この警告には、大きく分けて以下の2種類の警告があります。
• クエリ レベルの警告
クエリ レベルの警告には、missing indexがあります。Missing indexの警告は、インデックスが不足していることを警告します。
• オペレータ レベルの警告
オペレータ レベルの警告は、オペレータごとに生成される警告です。SQL Server 2012より以前のバージョンでは、「No Join Predicates」と「Missing Column Statistics」がありました。「No Join Predicates」は、結合述語がないことを表し、「Missing Column Statistics」は、その名の通り、列統計が不足していること表しています。
SQL Server 2012では、これらの警告に加えて、以下の警告がXMLプランに出力されるようになります。ほとんどが、デフォルト トレースで採取されているイベントですし、よく知られたイベントだとは思いますが、XMLプランでも確認できるようになりますので、クエリ チューニングに役立ちます。
• Hash Warning
ハッシュ演算中にハッシュの再帰、またはハッシュの中断 (ハッシュの保留) が発生したことを表します。
• Sort Warning
並べ替え操作をメモリ内で処理できないことを示します。
• Memory Grant Waits
Memory grantsを待機しているときに発生します。
• Exchange Spill Event
並列クエリ プランの通信バッファーが一時的に tempdb データベースに書き込まれたことを示します。
参考までに、Sort Warningを発生させて確認する手順を紹介します。
(1) 以下のクエリを実行します。
Use tempdb go drop table tblTest go -- prepare data create table tblTest (c1 int primary key clustered, c2 int, c3 char(1000)) go go set nocount on begin tran declare @i int set @i = 1 while @i <= 10000 begin insert into tblTest(c1, c2, c3) values (@i, @i, 'a') set @i = @i + 1 end commit tran go
(2) 以下のクエリを実行して、XMLの実行プランを採取します。
set statistics xml on go select * from tblTest where c1 <= 7000 order by c2 option (maxdop 1) go set statistics xml off go
(3) SQL Server Management Sutdioで実行プランを表示すると、Sortオペレータで警告が出力されていることを確認できます。