intro, SQL Azure

連載:Windows Azure SQL Databases入門

Windows Azure Powershellで、Azure SQL サーバーを作成する

Windows Azure Powershellを使用して、Windows Azure SQL Databaseサーバーを作成してみましょう。

Windows Azure Powershellのインストール方法

Windows Azure Powershellを使用するために、Windows Azure Poweeshellをインストールします。インストールする方法として、Web Platform Installerを使用する方法と[*.msi]ファイルでインストールする方法の2種類が提供されています。

https://github.com/WindowsAzure/azure-sdk-tools/releasesにアクセスして、対象のファイルをダウンロードします。

image
Web Platform Installerのリンクからダウンロードし、起動すると次の図のようにWeb Platform Installerが起動し、Windows Azure Powershellが選択された状態になります。

SNAGHTMLbf2ff53

[インストール]ボタンを選択すると、インストールが始まりますのでインストールが完了するのを待ちます。

SNAGHTMLbf415c0

インストールが完了すると、Windows Azure PowerShellがメニューに追加されます。

image

Windows Azure PowerShellを使用する

Windows Azure PowerShellを使用するには、メニューからWindows Azure PowerShellを起動する方法と、モジュールをインポートする方法があります。

メニューからWindows Azure PowerShellを起動すると、次の図のようにAzureコマンドレットのヘルプ表示方法の説明が書かれてシェルが起動します。またロードされているモジュールを[Get-Module]で確認すると、[Azure]が読み込まれていることを確認できます。

image

明示的にモジュールをインポートして使用する場合には、PowerShellを起動して、次のコマンドを実行します。

Import-Module azure
Import-Module azure -PassThru –Verbose :詳細を確認したい場合はこっち。

コマンドを実行すれば、Azure関連コマンドレットが読み込まれます。読み込まれたことを確認したい場合は、[Get-Module]で確認できます。

Import-Module Azureでインポートできる理由

Windows Azure PowerShellについて調べていると、モジュールのインポートをするのに次のコマンドを説明しているサイトが散見されます。

Import-Module "C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1"   

当初、モジュールのインポート方法を調べたときには、上記記述が一般的と思えるほど、上記コマンドを採用しているサイトが多かったです。もちろん、上記コマンドでも全く問題が無いのですが、覚えられないので、次のコマンドのほうが個人的には好きです。実際には、[Azure]を指定すると、[C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1]が呼びだされているだけなのです。

では、[Azure]で[C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1]を呼び出せるようにしているカラクリはなんなのかが気になります。

答えは、@guitarrapc_techさんのBlogに投稿されている[PowerShell のモジュール詳解とモジュールへのコマンドレット配置手法を考える]でわかりやすく解説されています。

ここでは要約して表面的なところだけ説明しておきます。
Windows Azure PowerShellのインストール時に、環境変数[$Env:PSModulePath]にWindows Azure PowerShellへのパスが登録されています。

C:\Users\nora\Documents\WindowsPowerShell\Modules;
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\;
C:\Program Files(x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\;
C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\

Windows Azure PowerShellをインストールした環境では、上のようにパスが設定されています。しかも、ここにWindows Azure PowerShellのパスが登録されているので、

これらのパスに存在するモジュールは、明示的にモジュールを読み込ませずともインテリセンスの候補に上がり、コマンド実行時にImport-Moduleがバックグランドで実行されモジュールが読み込まれます。
—tech.guitarrapc.comより抜粋

という穏健も受けられて素敵な感じです。

Windows Azure Powershellでサブスクリプション情報を取得する

さて、予断が長くなってしまいましたが、Windows Azure PowerShellでWindows Azure SQL Databasesサーバーを作成する方法を見ていきましょう。とは言え、その前にWindows Azure PowerShellでWindows Azureを操作する前に必要な共通作業があります。

Windows Azure PowerShellで、Azureを操作するには、操作対象のWindows Azureサブスクリプション情報を設定する必要があります。Windows Azureサブスクリプションの選択方法については、@sleepy_takaさんのBlogに投稿された[Windows Azure PowerShell のサブスクリプション選択]が分かりやすいです。
ここでは簡単に手順だけ説明します。

1.Windows Azure PowerShellをインポートする

Import-Module Azure

2.Windows Azureサブスクリプションファイル(.publishSettings)をダウンロードする

Get-AzurePublishSettingsFile

コマンドを実行すると、ブラウザが起動しサブスクリプションファイル生成ページにアクセスします。ファイルをダウンロードします。

image

3.ダウンロードしたサブスクリプションファイルをインポートする

Import-AzurePublishSettingsFile C:\Users\nora\Downloads\test-1-2-2014-credentials.publishsettings

4.インポートされたサブスクリプション情報を確認する

Get-AzureSubscription

インポートされたサブスクリプション情報が表示されます。
複数のサブスクリプションを持っている場合は、複数のサブスクリプションが表示されます。

image

Windows Azure Powershellで、Azure SQL サーバーを作成する

長くなりましたが、いよいよWindows Azure SQL DatabasesサーバーをWindows Azure PowerShellで作成しましょう。

Windows Azure SQL Databasesサーバーを作成するには、[New-AzureSqlDatabaseServer]コマンドレットを使用します。

New-AzureSqlDatabaseServer [-AdministratorLogin] <String> [-Force] -AdministratorLoginPassword <String> -Location <String> [-Confirm] [-WhatIf] [<CommonParameters>]

  • -AdministratorLogin:SQL Databaseサーバーに接続する際のログイン名(参考:命名規則
  • -AdministratorLoginPassword:SQL Databaseサーバーに接続する際のパスワード(参考:パスワードのルール
  • -Location:SQL Databasesサーバーを作成するリージョン(データセンターの場所)

実際にサーバーを作成してみましょう。

New-AzureSqlDatabaseServer -AdministratorLogin norayuni -AdministratorLoginPassword P@ssword1 -Location "East Asia"

正常にコマンドの実行が完了すると、次のように作成されたサーバーが表示されます。

image

サブスクリプションに紐付けられているサーバー一覧を確認するには、次のコマンドを実行します。

Get-AzureSQLDatabaseServer

image

使用できるデータセンター名を確認する方法

Windows Azure PowerShellで、Azureデータセンターのロケーションを指定する際に使用できるデータセンター名を確認するには、次のコマンドを実行します。

Get-AzureLocation|select name

image

参考

Windows Azure PowerShell の使用方法

4

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