SQL Azure

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のインデックス使用状況、取得データ、各ステップごとの取得行数を知ることができます。

実行プランの取得方法

  1. SQL Server Management Studio 2008 R2を起動します。(このバージョンでは、簡単にSQL Azureに接続可能)
  2. 「新しいクエリ」ウィンドウを開きます。
  3. 新しいクエリウィンドウにクエリをコピペします。
  4. ツールバーの「実際の実行プランを含める」ボタンをクリックし、実行プランの表示を有効にします。

    000000

    または、メニューバーから「実際の実行プランを含める」を選択します。

    000001

  5. クエリを実行すると別のタブに実行プランが表示されます。

    20101026210719

実行計画の見方は、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

実行結果は、以下のようになります。ストップウォッチのような動作をします。

20101026210833

 

もう一つが、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

 

実行結果は、次のようになります。

20101026211540

 

実行している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を紹介したものです。

SQL Azure Team Blog

Service Update 5 Released to Productionを簡単に紹介。

SQL AzureのService Update 5が全世界のすべてのデータセンターにリリースしました。

今回のリリースでは、将来的な機能追加を可能にするために内部オペレーションの改善に注力しました。

今回の更新の1つで、sp_tablepointシステムストアドプロシージャの提供を開始しました。
詳細は、sp_tableoption (SQL Azure Database)を参照してください。

 

更新に合わせて、以下のMSDNドキュメントを追加、修正しました。

HintsSupported Transact-SQL Statements (SQL Azure Database)に新たにHintsに関する情報を追加しました。

Error MessagesError Messages (SQL Azure Database)に、エラーを絞り込み解決するための情報を追加しました。
詳細は、Error Messages (SQL Azure Database)を参照してください。

Microsoft Sync Framework 2.1Migrating Databases to SQL AzureにMicrosoft Sync Framework 2.1のサポートについて説明を追加しました。

SQL Azure Team Blog

SQL Azureで提供されている2つの動的管理ビュー(sys.database_usagesys.bandwidth_usage)を使用して、アカウントの稼働状況を確認することができます。
参考値として利用し、実際の課金額は別途オンラインポータルで確認してください。

 

次のクエリは、今月、自分のサーバにある全てのデータベース使用料を表示します。

SELECT           SKU as "種類",

                  SUM   (     CASE WHEN USAGE.SKU = ‘Web’

                                    THEN (Quantity * 979.02/31)

                               WHEN USAGE.SKU = ‘Business’

                                          THEN (Quantity * 9799.02/31)

                              END ) AS "費用()"

FROM              sys.Database_Usage USAGE

WHERE             datepart(yy, TIME) = datepart(yy, GetUTCDate())

AND               datepart(mm, TIME) = datepart(mm, GetUTCDate())

GROUP BY    SKU

Master DBに接続している時に、上のクエリを実行することができます。実行結果は以下のようになります。

SQL Azureの使用量は、ストレージ使用料だけでなく、データの転送量にも課金されます。

SELECT            USAGE.Time_Period as "オン/オフピーク",

                  USAGE.Direction as "送受信",

                  CASE WHEN USAGE.Direction = ‘Egress’

                              THEN 14.70 * USAGE.BandwidthInKB/(1024*1024)

                        WHEN USAGE.DIRECTION = ‘Ingress’

                              THEN 9.80 * USAGE.BandwidthInKB/(1024*1024)

                  END AS "費用()"

FROM (

                  SELECT      Time_Period,

                              Direction,

                              SUM(Quantity) AS BandwidthInKB

                  FROM        sys.Bandwidth_Usage

                  WHERE       datepart(yy, TIME) = datepart(yy, GetUTCDate())

                  AND         datepart(mm, TIME) = datepart(mm, GetUTCDate())

                  AND         class = ‘External’

                  GROUP BY    Time_Period, Direction

) AS USAGE

 

 

 

この投稿は、Billing Numbers Directly From Transact-SQL – TechNet Articles – Home – TechNet Wikiを意訳したものです。

ダウンロード

マイクロソフト コンサルタントによるWindows Azure実装ガイドが公開されました!300ページ強の分量がある素晴らしいドキュメントとなっています。

提供されるマテリアルは、マイクロソフト コンサルティングサービスが有償で提供しているVisual Studio WorkshopコースのWindows Azureセッションの1つとなっています。過去にマイクロソフト コンサルのセッションを自社内で受講したことがある人は、あのクオリティを思い浮かべればいいわけです。

そんな物ですから、多少の制限がありますが、自習する分には問題無いのでご安心を。

 

Windows Azure 実装ガイド、公開しました! – とあるコンサルタントのつぶやき – Site Home – MSDN Blogs

20101006004936

20101006005113

SQL Azure

SQL Serverと異なるSQL AzureのConnection問題

 

SQL Azureは、高可用性を維持するためにロードバランスして、データベースがサーバーを移動します。
データベースが別のサーバーに移動すると、コネクションプールは、無効になります。

SQL Connectionを再接続(retry)しない場合、リクエストが失敗しエラーが発生します。
SQL Azureでは、再接続(retry)を組み込むことが重要になります。

接続(connection)が閉じると、問題を解決するためにconnection objectをcloseとopenするのに、数百msから数秒待つ必要があります。ごくまれに、再接続に失敗することがあります。

retry処理を組み込んだコード例が、「SQL Azure Connection Retry」(SQL Azure Connection Retry Updateの方が見やすいですね~)で紹介されています。

参考