SQL Azure

SQL ServerやSQL Azureへの接続テストをぱっぱと手軽にする方法を知ったので、メモしておきます。

SQL Azure

SQL Azureのデータベース一覧の取得

select name from sys.databases

masterデータべーすを含めて、サーバに関連づけられているデータベース一覧を取得することができます。
データベースIDは、「database_id」カラムで取得可能。

SQL Azureデータベースのエディションと最大サイズ

select
DATABASEPROPERTYEX(‘test‘,’Edition‘),
DATABASEPROPERTYEX(‘test‘,’MaxSizeInBytes‘)

上記の例では、testデータベースのエディションと最大サイズを取得しています。
エディションは、「Web」か「Business」が返ってきます。
最大サイズは、「1073741824」、「5368709120」、「10737418240」、「21474836480」、「32212254720」、「42949672960」、「53687091200」、「NULL」が返ってきます。

参考:DATABASEPROPERTYEX (SQL Azure Database)

SQL Azureデータベースの現在サイズの取得

SELECT SUM(reserved_page_count)*8.0/1024 FROM sys.dm_db_partition_stats

データベースごとに実行する必要があります。戻り値は、メガバイト単位です。
masterデータベースに対して実行すると、「The user does not have permission to perform this action.」っとエラーが発生します。

参考:動的管理ビューを使用した SQL Azure の監視

Windows Azure

Windows Azure VM Roleの使用方法については、Virtual Machine Role利用方法 概略手順を参照していただくとして、細かい部分をいくつかMSDNライブラリから拾ってきたのでメモっておく。
尚、MSDNライブラリには、リリース前の内容を含んでいるのであしからず~っと注意書きがあるので、以下の内容も、参考程度にしてくだされ。

  1. 課金とライセンス
  2. VM Role用VHDを作成する為のホストPC要件
  3. Windows Azure統合コンポーネント
  4. Windows Azure VM Roleのテスト方法
  5. VM Roleアダプターとは

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

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の方が見やすいですね~)で紹介されています。

参考