SQL Azureのクエリパフォーマンスを分析するには、SQL Server Management Studioを使用するか、SET STATISTICS T-SQLコマンドを使用します。SQL Server Profilerは、今のところSQL Azureではサポートしていません。この投稿では、SQL Server Profilerの代わりに、サーバに実行されたT-SQLの結果セットを分析しパフォーマンスを改善することに焦点を当てます。
SQL Server Management Studio
SQL Server Management Studioを使用して、クエリの実行プランを表示することができます。実行プランを使用して、SQL Azureのインデックス使用状況、取得データ、各ステップごとの取得行数を知ることができます。
実行プランの取得方法
- SQL Server Management Studio 2008 R2を起動します。(このバージョンでは、簡単にSQL Azureに接続可能)
- 「新しいクエリ」ウィンドウを開きます。
- 新しいクエリウィンドウにクエリをコピペします。
- ツールバーの「実際の実行プランを含める」ボタンをクリックし、実行プランの表示を有効にします。
または、メニューバーから「実際の実行プランを含める」を選択します。
- クエリを実行すると別のタブに実行プランが表示されます。
実行計画の見方は、SQL Server 2008 R2と同じですので、この投稿では取り扱いません。「グラフィカル実行プランの表示 (SQL Server Management Studio)」を参照してください。クエリのパフォーマンスの改善する方法の一つに、カバードインデックスにする方法があります。「I/Oパフォーマンスを改善する」を参照してください。
USING "SET STATISTICS"
SET STATISTICSは、Transact-SQL コマンドで、SQL Server Mnagement Studioのクエリウィンドウで実行することで、クエリの実行統計を取得できます。SET STATISTICSは二種類あり、その一つが、SET STATISTICS TIME ONです。TIMEコマンドは、クエリのパースとコンパイル、実行時間を表示します。
クエリは次のようになります。
SET STATISTICS TIME ON
SELECT *
FROM SalesLT.Customer
INNER JOIN SalesLT.SalesOrderHeader ON
SalesOrderHeader.CustomerId = Customer.CustomerId
実行結果は、以下のようになります。ストップウォッチのような動作をします。
もう一つが、SET STATISTICSのオプションが、SET STATISTICS IO ONです。SQL AzureでのクエリのIOパフォーマンス状況が表示されます。
クエリは次のようになります。
SET STATISTICS IO ON
SELECT *
FROM SalesLT.Customer
INNER JOIN SalesLT.SalesOrderHeader ON
SalesOrderHeader.CustomerId = Customer.CustomerId
実行結果は、次のようになります。
実行しているSQLを取得する
SQL Serverでは、SQL Profilerを使用することでリアルタイムで現在実行しているクエリを取得することができます。SQL Azureでは、次のようなSQLを使用して、プロシージャキャッシュ経由で、実行回数と実行されたクエリを取得します。
SELECT q.text, s.execution_count
FROM sys.dm_exec_query_stats as s
cross apply sys.dm_exec_sql_text(plan_handle) AS q
ORDER BY s.execution_count DESC
SQL Azureでのプロシージャキャッシュについては、「SQL Azure上のプロシージャキャッシュについて理解する」を参照してください。
この投稿は、Gaining Performance Insight into SQL Azure – TechNet Articles – Home – TechNet Wikiを紹介したものです。