こんにちは。日本マイクロソフトPremier Field Engineering部の古賀です。前回に引き続き、今回も知られざるSQL Server 2012の機能強化点をいくつか紹介していきたいと思います。
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オペレータで警告が出力されていることを確認できます。


この記事は参考になりましたか?
- あたらしいSQL Server/Denaliの世界連載記事一覧
-
- Integration Services プロジェクト配置モデルのパッケージ管理
- Integration Services に導入されたプロジェクト配置モデル
- あまり知られていないSQL Server 2012の機能強化点 (後編)
- この記事の著者
-
古賀 啓一郎(コガ ケイイチロウ)
日本マイクロソフト株式会社勤務。きままなエンジニア。
謎があると解決せずにはいられない性格。
週末は家事に従事。※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア