SQL Azure

Windows Azure SQL Reportingを使用しているとき、レポートの性能改善をするTipsがあります。

レポートがデータセンターをまたがって通信をしているとして、それを確認する方法とそれによる性能への影響を計測することができます。

まずレポートの実行ログを確認します。
Windows Azure管理ポータルを開き、Reportをクリックし、レポートサーバーを選択し、「Download Execution Log」ボタンをクリックします。

ログを確認すると、「Data Retrieval time」が異常に長く見えます。
たとえば、AdeventureWorksを使用して、単純なチャートレポートを生成するレポートを実行したときのログです。

Daata Retrieval timeが、processing/rendering timeよりもとても長くなっています。

ログをよく見ると、レポートではWindows Azure SQL databaseのlet8c0j2n7.database.windows.netを呼び出しています。レポートサーバーは、gejqh25dat.reporting.windows.netです。

Windows Azure管理ポータルで、それぞれを確認すると次のようになっています。

他にロケーションの違いを確認する方法としては、pingを使用する方法があります。

地理的に離れた場所にデータストアとレポートサーバーが設置されていることがわかりました。
香港とアイルランド間のNW遅延が影響して、Data Retrievalが長く(3.3秒)なっていました。

データストアとレポートサーバーを同じデータセンターに配置すると、次の結果のように3.3秒から49ミリ秒に改善しました。

参考

MSDNブログ「A tip on how to improve performance using Windows Azure SQL Reporting」を意訳した投稿です。

実行ログとレポート実行のボトルネックについては次のサイトが参考になります。

Windows Azure

MSDNブログ「AzCopy – Uploading/Downloading files for Windows Azure Blobs」を抜粋意訳した投稿です。

Windows Azure Blobストレージとローカルファイルシステム間のファイルのダウンロードやアップロードを簡単にできるようにしたいとの要望は、Windows Azure Storageチームがよく受ける要望の一つです。

Windows Azure Storageチームは、コマンドラインツールであるAzCopy(ベータ版)をリリースしました。このツールは、Windows Azureストレージアカウントの内外にデータを転送するタスクを観覧にできるようにするために設計されました。
このツールはスタンドアロンツールとしても、既存のアプリケーションに統合することもできます。

このツールは、Githubからダウンロードできます。

使ったことがあるかもしれませんがrobocopyのようなMicrosoftの他のファイルコピーツールにとても似ています。構文は次のようになっています。

AzCopy <Source> <Destination> [filepattern [filepattern…]] [Options]

特徴

効率的で柔軟性のあるツール

AzCopyは、コピーするデータを選択しやすくなっています。
再起モードを使用すると、ネストさえたディレクトリ配下にあるファイルをコピーすることができます。

ファイルパターンを指定できます。
WindowsファイルシステムやWindows Azure Blobストレージのプレフィックスからワイルドカードで選択できます。さらに、アーカイブ属性を持っているファイルをコピーするというオプションを設定することもできます。

とても多くのファイルをコピーするとき、ネットワークやほかの問題でコピーに失敗するかもしれません。再開オプションは、まだコピーしていない、コピーに失敗したところからコピー処理を再開できます。

Windows Azure ストレージデータ型のサポート

AzCopyは、ストレージアカウントで、ブロックBlobかページBlobかをdestination dataオプションで指定することができます。デフォルトでは、ブロックBlobに設定されています。
ページBlobオプションを賜与王すると、Blobは512バイトごとに0詰めされます。

ネーミングルール

URIフォーマット(httpやhttps)はBlobストレージパスの指定に、NTFS Windows ファイルフォルダーパスはWindows ファイルシステムで使用されています。
Blob名の中には、そのままWindows ファイルシステムに転送できないものもあります。AzCopyはWindowsファイルシステム名に変換するときに、独自のルールを使用します。

Windowsファイル名としてBlob名が使用できない場合は、次のルールを使用します。
「.」は「dot」
「..」は「dotdot」
「/」は「slash」
他には、重複を回避するためにファイル名やBlob名に、文字列「(n)」を追加します。

ロギング

AzuCopyは冗長モードで、ファイルとディレクトリの一覧や、コピーに失敗したファイル一覧を表示します。進捗状況も表示します。

サンプル

例1 再起モードでローカルファイルをBlobストレージコンテナーにコピーする

AzCopy C:\blob-data https://myaccount.blob.core.windows.net/mycontainer/ /destkey:key /S

c:\blob-dataとサブディレクトリにある全てのファイルをストレージアカウント「myaccount」のコンテナー名「mycontainer」のブロックBlobにコピーします。
blob-dataフォルダーには「subfolder1」サブディレクトリがあります。

C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\train1.docx
C:\blob-data\subfolder1\car_sub1.docx
C:\blob-data\subfolder1\car_sub2.docx

は、「mycontainer」BlobコンテーにBlobを格納します。

car1.docx
car2.docx
car3.docx
train1.docx
subfolder1/car_sub1.docx
subfolder1/car_sub2.docx

例2 Blobからローカルに冗長と式モードでコピーする

AzCopy https://myaccount.blob.core.windows.net/mycontainer c:\blob-data /sourceKey:key /S /V

冗長モードでは次のような表示があります。

Finished Transfer: car1.docx
Finished Transfer: car2.docx
Finished Transfer: car3.docx
Finished Transfer: train1.docx
Finished Transfer: subfolder1/car_sub1.docx
Finished Transfer: subfolder1/car_sub2.docx
Transfer summary:
—————–
Total files transferred: 6
Transfer successfully: 6
Transfer failed: 0
After the copy operation, c:\blob-data folder will contain the files listed below:
C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\train1.docx
C:\blob-data\subfolder1\car_sub1.docx
C:\blob-data\subfolder1\car_sub2.docx

例3 再開モードでローカルからBlobにコピーする

AzCopy c:\blob-data https://myaccount.blob.core.windows.net/mycontainer /destkey:key /Z:restart.log /S

再開をするために、進捗状況を記録するログファイル「azcop.log」がカレントディレクトリに作成されます。

例4 ファイルパターンを使用して、ストレージBlobコンテナーのファイルを選択しローカルにコピーする

AzCopy https://myaccount.blob.core.windows.net/mycontainer c:\blob-data car /sourceKey:key /Z /S

パフォーマンス

Windows Azureデータセンター内で(同じDC内のコンピュートインスタンスとストレージアカウント)、ファイルのアップロード、ダウンロードに50MB/sぐらいの速度になります(エクストラLargeインスタンスの場合)。

Windows Azure

Windows Azure Virtual Machineを作成する方法として、次の3通りあります。

  • ギャラリーからイメージを選択して仮想マシンを作成する方法
  • Hyper-V形式の仮想HDD(VHD)をアップロードして仮想マシンを作成する方法
  • VHDにsysprepを実行したVHDをイメージとしてアップロードし、そのイメージから仮想マシンを作成する方法

3つめのsysprepを実行してイメージを作成する方法で、注意が必要な小さな問題があります。
Windows Azure Virtual Machineをデプロイするときは、必ずパスワードの複雑性を満たしていなければなりません

しかし、ローカルで仮想マシンを作成しSYSPREPを実行した場合、リモートデスクトップ接続に使用するアカウントのパスワードを強くない文字列に設定することができてしまいます。

この状態で、Windows Azure Virtual Machineで仮想マシンをデプロイすると、仮想マシンに接続できなくなります。

パスワードポリシーについては、「パスワードは、複雑さの要件を満たす必要がある」を確認してください。

元情報

Windows Azure Virtual Machines – Make Sure You Follow the Documentation

Windows Azure

Windows Azure PowehShellで、Windows Azureサービスを管理することができます。
使用を始めるには、Windows Azure PowerShellコマンドを使用するためにセットアップをし、Windows Azure 管理ポータルからpublishsettingファイルをダウンロードする必要があります。

PoweShellで次のコマンドを使用して、Windows Azure Powershellをダウンロードできます。

PS C:\> Get-AzurePublishSettingsFile

このコマンドは、次のURLで公開されている.publishsettingsファイルをダウンロードします。

https://windows.azure.com/download/publishprofile.aspx?wa=wsignin1.0

.publishusettingsファイルをローカルに保存すれば、次のコマンドが使用できます。

PS C:\> Import-AzurePublishSettingsFile WindowsAzureInternal-11-20-2012-credentials.publishsettings

このコマンドを実行すると、次の場所に設定ファイルが作成されます。

C:\Users\<Windows_Login_User_Name>\AppData\Roaming\Windows Azure Powershell

config.json
DefaultSubscriptionData.xml
publishSettings.xml

publishSettings.xmlを開くと、次のように証明書の拇印を確認することができます。

<?xml version="1.0"?>
<PublishData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<PublishProfile PublishMethod="AzureServiceManagementAPI" Url="https://management.core.windows.net/" ManagementCertificate="********************************************">
<Subscription Id="GUID_1" Name="Windows Azure Internal Consumption *" />
<Subscription Id="GUID_2" Name="Windows Azure Internal Consumption ****" />
</PublishProfile>
</PublishData>

まれに、Import-AzurePublishSettingsFileを使用してPublishSettingsをインポートしようとすると次のエラーが発生することがあります。

Import-AzurePublishSettingsFile : Value can not be null.
Parameter name: s
At line:1 char:1

その場合、次の手順を試してください。

  1. 「C:\Users\<Windows_Login_User_Name>\AppData\Roaming\Windows Azure Powershell」にあるファイルをすべて削除してください。
  2. 再度同じコマンドを使用してください。publish設定ファイルをインポートして設定ファイルを再生成します。

元情報

How does Windows Azure PowerShell import publishsettings using Import-AzurePublishSettingsFile command?をざっくり意訳した投稿です。

Windows Azure

Windows Azure Web SitesはデフォルトでPHPをサポートしており、さらにユーザ自身のFastCGIを設定することができます。

Windows Azure Web Sites(WAWS)でカスタムFastCGIを設定する方法について説明します。

  1. WAWSウェブサイトにFastCGI実行ファイルをデプロイします。
    例えば、ウェブサイトのbinフォルダーなどにアップロードします。
  2. 次の内容を含んだASPファイルを作成します。

        <%
        Response.Write Request.ServerVariables("APPL_PHYSICAL_PATH") 
    %>

  3. ASPファイルをウェブサイトのコンテンツフォルダーにアップロードし、IEで開きます。
    IEにWAWSサイトのルートPATHが表示されます。
    Azure環境では、
    C:\DWASFiles\Sites\YourSiteName\VirtualDirectory0\site\wwwroot\
    オンプレミス環境では、
    C:\inetpub\temp\DWASFiles\Sites\YourSiteName\VirtualDirectory0\site\wwwroot\
  4. Windows Azure管理ポータルにログインし、ウェブサイトに移動し、カスタムFastCGIの設定をします。
  5. CONFIGURATIONをクリックします。スクロールバーを下まで下げ、「handler mappings」セクションを見つけます。
  6. 「EXTENSION」で、FastCGIによって処理する必要があるファイル拡張子を定義します。「SCRIPT PROCESSOR PATH」で、FastCGI実行ファイルのフルパスを定義します。
    例えば、
    “C:\DWASFiles\Sites\YourSiteName\VirtualDirectory0\site\wwwroot\bin\FastCGI.exe”
  7. Configurationを保存します。

元情報

MSDNフォーラム; How to configure custom FastCGI on Windows Azure Web Sites (WAWS)