intro, SQL Azure

連載:Windows Azure SQL Databases入門

Windows Azure管理ポータルで、Azure SQL サーバーを作成する

Windows Azure管理ポータルを使用して、Windows Azure SQL Databaseサーバーを作成してみましょう。

Windows Azure管理ポータルにログインする

http://manage.windowsazure.com/にブラウザでアクセスし、サブスクリプション契約をしたMicrosoftアカウントでログインします。

次のログイン画面で、Windows Azure ADによるシングルサインオンに対応した組織アカウントのアドレスを入力した場合SSOでログインしてくれます。

image

Microsoftアカウントの場合は、自動的に次のログイン画面に遷移して、パスワードの入力を求められるので、パスワードを入力してログインします。

image

Windows Azure SQL Databasesサーバーの作成手順

左側サイドメニューから、SQLデータベースを選択します。

image

SQLデータベースが存在しない場合、データベースの新規作成を促す画面が表示されます。[SQLデータベースを作成します]をクリックして、データベースの作成をする最中に、SQL Databasesサーバーの作成も合わせてすることができます。

image

今回は、あえて個別にSQL Databasesサーバーを作成してみます。
上部メニューの[サーバー]を選択します。
image

[SQLデータベースサーバーを作成する]を選択します。

image

SQL Databasesサーバーの作成ダイアログが開きます。

image

次の項目を入力します。

  • ログイン名:SQL Databaseサーバーに接続する際のログイン名(参考:命名規則)を入力します。
  • パスワード:SQL Databaseサーバーに接続する際のパスワード(参考:パスワードのルール)を入力します。
  • パスワードの確認:パスワードと同じ文字列を入力します。
  • サブスクリプション:作成するSQL Databaseサーバーを紐付けるサブスクリプションを選択します。(参考:SQL Databasesの構成概要
  • 地域:SQL Databasesサーバーを作成するリージョン(データセンターの場所)を選択します。
  • Windows Azureサービスにサーバーへのアクセスを許可します。
    詳細は別途説明しますが、Windows Azure SQL DatabasesサーバーのFirewallの設定で、Azureサービスからのアクセスを許可するルールになります。

必要事項を入力したら、右下のボタンをクリックします。

image

ボタンをクリックすると自動的に、SQL Databasesサーバーが作成されます。
SQL Databasesサーバーのサーバー名はランダムな文字列が自動的に割り当てられ、ユーザーが任意の文字列を指定することはできません。
作成が完了するとサーバー一覧にサーバーが表示されます。

image

サーバー名をクリックすると、ようこそ画面的なものが表示されます。
上部ヘッダーメニューから[ダッシュボード]を選択します。

image

ダッシュボードの右側に、作成したSQL Databasesサーバーの詳細情報が表示されています。
その情報を参照すれば、
作成したSQL Databasesサーバーの接続先ホスト
・管理者ログイン名
・配置したデータセンター
・サブスクリプション名
・サブスクリプションID
・サーバーに作成されているデータベース数
を確認することができます。

image

ログイン名の命名規則

ログイン名は次の要件を満たしている必要があります。

  • SQL 識別子にする必要があります。
  • 次のようなシステム名にすることはできません。
    – admin、administrator、sa、root、guest、dbmanager、loginmanager など。
    – あらかじめ用意されている dbo、guest、public などのデータベース ユーザーやデータベース ロール。
  • 次の文字を使用することはできません。
    – スペース、タブ、改行などの空白文字
    – Unicode 文字
    – 英数字以外の文字 ("<>|:*?\/#&;,%=)
  • 先頭を次の文字にすることはできません。
    – 数字 (0 ~ 9)
    – @, $, +

パスワードのルール

パスワードは次の要件を満たしている必要があります。

  • 長さが 8 文字以上である
  • ログイン名がまったく含まれていない
  • 次の種類の文字が 3 文字以上含まれている
    – 大文字アルファベット (A ~ Z)
    – 小文字アルファベット (a ~ z)
    – 数字 (0 ~ 9)
    – 英数字以外の文字 (例: !、$、#、%)

3

intro, SQL Azure

連載:Windows Azure SQL Databases入門

Windows Azure SQL Databasesサーバーの作成方法

Windows Azureのサブスクリプション契約を結んだ後、Windows Azure SQL Databasesを使用するには、Windows Azure SQL Databasesサーバーを作成する必要があります。

Windows Azure SQL Databasesサーバーを作成する方法には、次の6通りあります。

※ PHP、Java、PythonのSDKでは機能提供されていませんでした。

intro, SQL Azure

連載:Windows Azure SQL Databases入門

サブスクリプションとサーバーとデータベースの関係

Windows Azure SQL Databasesは、図のような枠組みで管理されています。
まず契約主体であるサブスクリプションがあります。

サブスクリプションに、Windows Azure SQL Databasesサーバーが紐付きます。
Windows Azure SQL Databasesサーバーは仮想的な概念で、物理実態は持っていません。
イメージ的には、HTTPエンドポイントと考えると一番近いかもしれません。
ですので、Windows Azure SQL Databasesサーバーに大量のデータベース(デフォルトでは149個)を作成しても、性能が劣化するということはありません。

Windows Azure SQL Databasesサーバーに、ユーザーデータベースを作成します。
Windows Azure SQL Databasesサーバーには必ずmastaerデータベースが作成されていますが、masterデータベースは課金対象外となっています。

image

1

SQL Azure

SQL Server Customer Advisory TeamのBlogに投稿された「Be aware of the difference in isolation levels if porting an application from Windows Azure SQL DB to SQL Server in Windows Azure Virtual Machine」をベースにした投稿です。

Windows Azure SQL DatabaseからWindows Azure Virtual Machine上のSQL Server(オンプレミスのSQL Server)に移行する際に、性能問題に遭遇することがあります。
原因として、分離レベルの違いからロック待ち事象(lock wait)が高くなっている可能性があげられます。

Azure SQLでは、デフォルトで、READ COMMITTED SNAPSHOTとSNAPSHOT ISOLATIONが有効になっています。
SQL Serverでは、デフォルトで、READ COMMITTED SNAPSHOTとSNAPSHOT ISOLATIONが無効になっています。

参考:確認用SQL
select name, snapshot_isolation_state, is_read_committed_snapshot_on from sys.databases

READ COMMITTED SNAPSHOT ISOLATION (RCSI)を前提にしたアプリケーションをそれぞれの環境でロードテストして見たところ次のような結果になりました。

データ格納先 アプリケーションレスポンスタイム アプリケーションスループット
Azure SQL 0.83 38
WinVM上のSQL Server 2.94 13.9

これだけの差がついた原因は、パフォーマンスカウンター(“Lock Waits” under object => “SQL Server:Wait Statistics”, instance => “Average wait time (ms)”)を確認すると判明しました。ロックのwait平均時間が1秒程度かかっていました。

RCSIを有効にして、ロック待ち時間を数ミリセカンドにまで減らすと次のような結果になり、性能改善できました。

データ格納先 アプリケーションレスポンスタイム アプリケーションスループット
WinVM上のSQL Server:既定 2.94 13.9
WinVM上のSQL Server:RCSI 1.14 34.8

注意事項

RCSIを有効にすると、SQL ServerではバージョンストアをTEMPDBに格納するため、TMPDBに注意する必要があります。たとえば、あるシナリオでは、次のようなTEMPDBのディスクI/Oスループットに差がでました。

データ格納先 Disk Read Bytes/sec Disk Writes Bytes/sec
WinVM上のSQL Server:既定 403,031 1,504,410
WinVM上のSQL Server:RCSI 26,570,531 58,219,559

Windows Azure

Windows Azure Powershellとは

GitHubリポジトリ:https://github.com/WindowsAzure/azure-sdk-tools

開発者と管理者がWindows Azureアプリケーションを管理したり、デプロイしたり、開発するためのPowerShellコマンドレットです。

SQL Azure関連の機能

  • データベースサーバー、データベース、FirewallルールのCRUDに対応
  • データベースサーバーの容量情報の取得
  • データベースサーバーのサービスs指定のGet/Setに対応

更新履歴:参照元

2013.07.18 Version 0.6.17

  • 参照するWindows Azure SDKのバージョンを1.8から2.0へ更新しました。
  • サブスクリプションの所有者の場合、SQL Azure DatabaseのCRUDコマンドレットは、SQL認証不要になりました
  • Get-AzureSqlDatabaseServerQuota は、指定したWindows Azure SQL Databaseサーバーの容量情報を取得するためのコマンドレットです。
  • SQL Azureサービスの対象をサポートしました。
    ・Get-AzureSqlDatabaseServiceObjective は、Windows Azure SQL Databaseサーバーを指定するためのコマンドレットです。
    ・Set-AzureSqlDatabase にWindows Azure SQL Databaseを指定するための -ServiceObjective パラメーターを追加しました。
  • Get-AzureWebsite のローカルキャッシュ問題を修正しました。新しい Get-AzureWebsite は常に最新のWebサイトの情報を返します。

2013.06.24 Version 0.6.16

  • Add-AzureEnvironment は、Windows Azure Packのようにカスタマイズ環境を追加するコマンドレットです。
  • Set-AzureEnvironment は、Windows Azure Packのようにカスタマイズ環境をセットするコマンドレットです。
  • Remove-AzureEnvironment は、Windows Azure Packのようにカスタマイズ環境を削除するコマンドレットです。
  • Webサイトコマンドレットは、Windows Azure Packをサポートしました。
  • Service Busコマンドレットは、Windows Azure Packをサポートしました。
  • Windows Azure Packをサポートした全てのコマンドレットに、WAPackプレフィックスを追加しました。「help WAPack」を使用すると、サポートする全てのコマンドレットを確認できます。
  • New-AzureQuickVM と Add-AzureProvisioningConfig に -NoWinRMEndpoint パラメーターを追加しました。
  • New-AzureSqlDatabaseServerFirewallRule に -AllowAllAzureSerivces パラメーターを追加しました。
  • 仮想マシン、クラウドサービス、Webサイトの診断周りの多くのバグを修正しました。