SQL ServerやSQL Azureへの接続テストをぱっぱと手軽にする方法を知ったので、メモしておきます。
T-SQLでSQL AzureのDB一覧とエディションを取得する方法
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.」っとエラーが発生します。
Windows Azure VM Roleの5つの豆知識
Windows Azure VM Roleの使用方法については、Virtual Machine Role利用方法 概略手順を参照していただくとして、細かい部分をいくつかMSDNライブラリから拾ってきたのでメモっておく。
尚、MSDNライブラリには、リリース前の内容を含んでいるのであしからず~っと注意書きがあるので、以下の内容も、参考程度にしてくだされ。
- 課金とライセンス
- VM Role用VHDを作成する為のホストPC要件
- Windows Azure統合コンポーネント
- Windows Azure VM Roleのテスト方法
- 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のインデックス使用状況、取得データ、各ステップごとの取得行数を知ることができます。
実行プランの取得方法
- 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を紹介したものです。
SQL Azureへの接続(ADO.NET)では、再接続を考慮する
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の方が見やすいですね~)で紹介されています。
参考