SQL Azure Team Blog

Finding Blocking Queries in SQL Azure – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳し紹介したエントリーです。

遅かったり、長い間実行しているクエリは、過度のリソース消費を伴い、クエリのブロッキングの原因となります。つまり、パフォーマンス劣化につながります。ブロッキングの意味は、SQL ServerとSQL Azureで違いはありません。ブロッキングは、ロックによる同時実行制御を行うリレーショナル データベース マネージメントシステムでは避けることができない特徴です。

以下のクエリは、合計時間が長かったり、ほかのクエリにブロッキングされたりして、実行時間が長いクエリのトップ10を表示します。

SELECT TOP 10 r.session_id, r.plan_handle,
    r.sql_handle, r.request_id,
    r.start_time, r.status,
    r.command, r.database_id,
    r.user_id, r.wait_type,
    r.wait_time, r.last_wait_type,
    r.wait_resource, r.total_elapsed_time,
    r.cpu_time, r.transaction_isolation_level,
    r.row_count, st.text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) as st
WHERE r.blocking_session_id = 0 
    and r.session_id in 
    (SELECT distinct(blocking_session_id)
         FROM sys.dm_exec_requests)
GROUP BY r.session_id, r.plan_handle,
    r.sql_handle, r.request_id,
    r.start_time, r.status,
    r.command, r.database_id,
    r.user_id, r.wait_type,
    r.wait_time, r.last_wait_type,
    r.wait_resource, r.total_elapsed_time,
    r.cpu_time, r.transaction_isolation_level,
    r.row_count, st.text
ORDER BY r.total_elapsed_time desc

ブロッキングの原因は、残念なアプリケーション仕様であったり、残念な実行計画や、インデックスの不足が、ブロッキングの原因となりえます。

 

ブロッキングを理解する

 

SQL Azure上で、一つ目の接続が特定のリソースを共有ロックし、2つ目の接続が同じリソースに共有ロックと矛盾するロックを取得しようとした時にブロッキングが発生します。通常、最初の接続(共有ロック)がリソースをロックしている時間はとても短い時間です。ロックを解放したとき、二つ目の接続は、リソースにロックをかけ、プロセスを続けます。これは普通の動作で、頻繁に発生することでパフォーマンスへの影響はほとんどありません。

トランザクションの続行時間が長くなり、クエリがロックをかけ続けていると、ほかのクエリのパフォーマンスに影響が出ます。クエリがトランザクションを実行しておらず、(かつ、ロックヒント文を使用していない)場合、SELECT分はデータを読み取っている間だけ共有ロックを取得します。INSERTやUPDATEやDELETE分は、実行が終了するまでロックを取得しつづけることで、一貫性とロールバックを行うことができます。

クエリの種類や、トランザクションの分離レベルやロックヒントの使用有無などによって、クエリのロック時間や動きが変わります。詳細については、MSDNを参照してください。

まとめ

 

短くて速くて単純なクエリを多用することがブロッキングの減少につながります。長く大きなトランザクションは、ちいさな塊にし、トランザクション量を減らし、効率のいいSQLを書くようにすることがパフォーマンス観点状重要になります。一つの残念な遅いクエリがブロックすると、ほかの早いクエリまでもが遅くなってしまい全体としてパフォーマンスが劣化してしまいます。

SQL Azure Team Blog

Leveraging SQL Azure with Microsoft Access – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

SQL Server Migration Assistant(SSMA for Access v4.2)はアップデートされて、Microsoft AccessからSQL Azureへのマイグレーションをサポートするようになりました。今回のリリースでは、ローカルのMicrosoft AccessからSQL Azureへ直接簡単にデータ移行が行えるようになりました。SQL Azureに移行することで、高いスケーラビリティと、データの集中管理や分散配置されたデータの統合管理を行えるようになります。
SQL Server Migration Assistantツールキットは、データベースのマイグレーションを行うときに、複雑な変更条件についてはマニュアルで取り組むよう設計されています。SQL Server Migration Assistantを使用することで、顧客とパートナーは結果的に時間とコストとリスクがあるマニュアル作業を減らすことができます。

既存のAccessアプリケーションのフロントエンド部分は、SQL Azureへデータ移行後も使用し続けることができます。Access 2010は、リンクテーブルを使用してSQL Azureへ接続することができます。クラウドへ移行しても、Accessユーザは既存のインターフェイスを使用し続けることができるので、過去の投資は無駄になりません。

Access 2010でSQL Azureを使用する方法に関する詳細な情報は、Access 2010 and SQL Azure – Microsoft Access – Site Home – MSDN Blogsを参照してください。

SQL Azure Team Blog

The Fast Way to Move from MySQL to SQL Azure – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

SQL Server Migration Assistant(SSMA for MySQL v1.0)はアップデートされて、MySQLからSQL Azureへのマイグレーションをサポートするようになりました。今回のリリースでは、ローカルのMySQLからSQL Azureへ直接簡単にデータ移行が行えるようになりました。SQL Azureに移行することで、高いスケーラビリティと、データの集中管理や分散配置されたデータの統合管理を行えるようになります。
SQL Server Migration Assistantツールキットは、データベースのマイグレーションを行うときに、複雑な変更条件についてはマニュアルで取り組むよう設計されています。SQL Server Migration Assistantを使用することで、顧客とパートナーは結果的に時間とコストとリスクがあるマニュアル作業を減らすことができます。

SQL Azure Team Blog

Creating a SQL Azure Database with SQLCMD – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

一度、SQL Azure Portalでサーバを配置すれば、sqlcmd.exeを使用してデスクトップのコマンドラインからデータベースを作成したり、削除することができます。スクラッチでデータベースを作成し、スキーマをアップロードし、きれいな環境でテストしたり、それらを繰り返しテストするときに便利です。

注意すべき事は、データベースを作成したり削除したりするときはマスターデータベースに接続する必要があることです。また、 -Nパラメータを使用して接続を暗号かあすることも重要です。暗号化に関する詳細情報は、こちらを参照してください。

 

データベースの作成

 

最初に、データベースを作成するためのTransact-SQLコマンドを含む.sqlファイルを作成します。例えば、次のようなクエリになります。

CREATE DATABASE Test

これは、デフォルトサイズの1ギアバイトのデータベースが作成されます。コマンドをCreateDatabase.sqlというファイル名に保存したとします。コマンドラインからコマンド(ファイル)を実行するコマンドは次の用になります。

sqlcmd -SyourSeverdatabase.windows.net -UyouLogin@yourServer -PyourPassword -dmaster -i –N CreateDatabase.sql

ユーザ名は、「ログイン@サーバ名」の形式にする必要があります。ログインは、SQL Azureサーバ上の管理者ログインを使用し、マスターデータベースに対して発行します。

 

データベースを削除する

 

データベースの削除も同様の方法で行います。スクリプトは次の用になります。

DROP DATABASE Test

コマンドをDropDatabase.sqlというファイル名に保存したとします。コマンドラインからコマンド(ファイル)を実行するコマンドは次の用になります。

sqlcmd -SyourSeverdatabase.windows.net -UyouLogin@yourServer -PyourPassword -dmaster -i –N DropDatabase.sql

 

検証

 

SQL Azureの最小課金単位は、一日です。1ギガバイトのデータベースで一ヶ月に$9.99(日本の場合は、979円ぐらい。詳細は、ここで。) 一日あたり33セント(日本の場合は、33円ぐらい)です。データベースを作成し、すぐに削除すれば33セントかかります。詳細は、Windows Azure Pricing | Windows Azure Services | Windows Azure Platformで確認できます。

SQL Azure Team Blog

Generating Scripts for SQL Azure – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

SQL ServerからSQL Azureへ移行する時、最初のステップは、SQL ServerのスキーマからSQL Azureへ移行するためのスクリプトを生成することです。SQL Server Management Studio 2008 R2に、新たに追加されたSQL Azureをターゲットに設定する拡張設定を使用することで、簡単に生成できます。
ステップバイステップで設定方法を説明します。

1) SQL Server Management Studio 2008 R2を開きます。

2) 転送したいデータベースを含むSQL Serverに接続します。

3) データベース上で右クリックし、[タスク]→[スクリプトの生成]を選択します。

1

 

4) スクリプトの生成とパブリッシュ ダイアログを開きます。 次へボタンをクリックし、説明ウィザードを飛ばします。

5) オブジェクトの選択ページが開きます。

 

2

 

6) データベース全体とすべてのデータベースオブジェクトのスクリプトを作成を選択し、「次へ」ボタンを選択します。

7) スクリプト作成オプションの設定ウィザードページが開きます。

 

3

8) 新しいクエリウィンドウに保存を選択し、詳細設定ボタンをクリックします。スクリプト作成の詳細オプションダイアログが開きます。

 

4

 

9) データベースエンジンの種類に対応したスクリプトオプションが表示されるまでスクロールを下げます。そのオプションのドロップダウンリストからSQL Azure データベースを選択します。「OK」ボタンを押します。

10) 次へボタンをクリックします。

11) 次へボタンをクリックし、概要ページを飛ばします。

12) スクリプトの保存またはパブリッシュダイアログで、データベースがクエリ化され、完了をクリックできるようになり、クリックするとクエリウィンドウにSQL Azureで使用できるクエリが表示されます。

13) This new query window in SQL Server Management Studio will automatically be connected the source SQL Server.

14) クエリウィンドウで右クリックし、メニューから[接続]→[接続の変更]を選択します。

 

5

15) 接続するSQL Azure サーバを設定します。オプションボタンを使用して、データベースを選択することができます。

 

6

 

16) SQL Server Management Studio で生成したスクリプトを実行し、SQL Azureにスキーマを作成します。

In order to use SSIS or BCP to transfer your SQL Server data to SQL Azure you need to have the schema is place on SQL Azure including your clustered indexes. クラスターインデックスを含んだSQL Azure上のスキーマに、SQL ServerからSQL Azureにデータを転送するのに、SSISまたはBCPを使用します。他のデータのアップロードを行うオプションとしては、スクリプトの保存またはパブリッシュダイアログで設定を変更しデータの生成を行う方法もあります。INSERT文が、スクリプトに追加されます。スクリプトのサイズが膨大になりますので、小さなデータベース限定の方法となりますが。