Azure SQL Databaseでクエリの実行プランを調べるTech TIPS

パフォーマンスチューニングなどのために、Azure SQL Databaseで実行されているクエリの実行プランがどうなっているか調べたいことがある。このような場合、SQL Server Management Studioを利用すると、GUIで簡単に調査を進められる。

» 2017年07月10日 05時00分 公開
[島田広道デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象サービス/ソフトウェア:Microsoft Azure、SQL Database、SQL Server Management Studio(SSMS)


 Azure SQL Databaseのトラブルシューティングでは、クエリの実行プランを詳しく調べると解決方法が見つかることがある。代表的なのは、クエリが遅いのでパフォーマンスチューニングしたい、という場合だ。

 実行プランに含まれるクエリのT-SQLを確認したいなら、AzureポータルのSQL Databaseブレードにある[Query Performance Insight]が手軽で便利だ。

Azureポータルの「Query Performance Insight」 Azureポータルの「Query Performance Insight」
これはQuery Performance Insightで、過去24時間以内で最も時間のかかったクエリを見つけて、その詳細を表示したところ。

 ただし、これだと実行プランの細かい内容までは分からない。

 そこでSQL Server Management Studio(SSMS)を利用すれば、Azure SQL Databaseの実行プランを詳しく調査できる。本稿では、その作業手順や機能の概要について説明する。

SQL Server Management Studioで実行プランを調べる

 まずはTIPS「Azure SQL DatabaseにSQL Server Management Studio(SSMS)で接続して管理する」のように、SQL Server Management Studio (SSMS)からAzure SQL Databaseに接続する。

 このとき、SSMSのバージョンが古いと機能不足により、この後に紹介する手順では実行プランを調査できないことがある。必ずバージョン16.5(SQL Server 2016に該当)か、それより新しいバージョンを使用すること。

 接続したら、左ペインの[<サーバ名>]−[データベース]−[<データベース名>]−[クエリ ストア]以下を展開する。例えば実行時間が長かったクエリを調べるには、[後退したクエリ]をダブルクリックする。

SSMSでAzure SQL Databaseの実行プランを調べる(1/2) SSMSでAzure SQL Databaseの実行プランを調べる(1/2)
これはAzure SQL Databaseに接続済みのSSMSの画面。過去に実行されたクエリの実行プランを調べるには、「クエリ ストア」という機能を利用する。
  (1)目的に応じて、この[クエリ ストア]以下のいずれかの項目をダブルクリックする。ここでは(分かりにくいが)[後退したクエリ]すなわち実行時間が長かった(遅い)クエリを調べてみる。
SSMSでAzure SQL Databaseの実行プランを調べる(2/2) SSMSでAzure SQL Databaseの実行プランを調べる(2/2)
「後退したクエリ」の詳細画面が表示されたところ。過去1時間の集計結果が示されている。
  (2)実行時間が長かったクエリのそれぞれの実行時間を表したグラフ。棒グラフにマウスカーソルを乗せると、クエリのT-SQLが表示される。
  (3)選択したクエリに含まれる複数の実行プランごとに、その実行回数を集計したグラフ。ここから実行プラン同士の比較ができる(後述)。
  (4)選択したクエリの実行プランがツリー形式で表示される。各ノードにマウスカーソルを乗せると、その詳細が表示される(後述)。

●SSMSで実行プランの詳細を調べる

 実行プランが表示されたら、各ノード(演算子)にマウスカーソルを乗せてみよう。すると、そのコストや予測実行回数、T-SQLのコンパイル結果といった詳細が表示される。

実行プランの詳細を調べる 実行プランの詳細を調べる
  (1)複数の実行プランが表示されていたら、まずは1つ選ぶと、そのプランの構造がツリー形式で下のペインに表示される。
  (2)クエリが遅い原因となりそうなノード(演算子)にマウスカーソルを乗せてみる。
  (3)そのノードの詳細情報が表示される。
  (4)「CONVERT_IMPLICIT」すなわち変数の型変換が暗黙のうちに実行されていることが分かる。これはクエリが遅い原因の1つとして知られている。

●SSMSで実行プランを比較する

 クエリには複数の実行プランが含まれていることがよくある。どのプランが最適なのか調べるには、以下のようにプラン同士を細かく比較できる機能が便利だ。プランを比較して、最適なものを選んでクエリに強制適用することも可能だ。

SSMSで実行プランを比較する(1/2) SSMSで実行プランを比較する(1/2)
  (1)クエリを選択した後で、比較したい実行プランをこの凡例から2つ選ぶ。
  (2)このアイコンをクリックすると、比較のウィンドウが新たに作成・表示される(この下の画面を参照)。
  (3)比較後、最適なプランを決めたら、それを選択した状態でこのアイコンをクリックすると、このクエリに対して強制的に適用できる。
SSMSで実行プランを比較する(1/2) SSMSで実行プランを比較する(1/2)
表示された実行プランの比較結果の画面。
  (4)実行プランを数値で細かく比較できる。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。