SQL Azure

sys.dm_db_wait_statsとは

SQL Serverでは、OS全体の待ち事象状況を確認するための動的管理ビューとして、「sys.dm_os_wait_stats」が提供されています。
Windows Azure SQL Databaseの場合、共有モデルで提供されているので、サーバー全体の待ち事象を確認できてもうれしいことが無いため、提供されていませんでした。

各データベースごとの待ち事象を確認できることは意味があるので、Windows Azure SQL Database用にデータベースの待ち事象を確認できるように、「sys.dm_db_wait_stats」が提供されるようになりました。

sys.dm_db_wait_statsの説明

sys.dm_wait_stats では、既に終わった待機時間が示されます。この動的管理ビューでは、現在待機中の待機時間は示されません。
クエリ実行中に発生している待機時間の種類によって、クエリにボトルネックや機能停止ポイントがあるかどうかを判断できます。

列名 説明
wait_type 待機の種類の名前。 詳細については、このトピックの「待機の種類」を参照してください。
waiting_tasks_count この待機の種類における待機の数。 このカウンターは、待機が開始するたび増加します。
wait_time_ms この待機の種類における総待機時間 (ミリ秒単位)。 この時間には signal_wait_time_ms が含まれます。
max_wait_time_ms この待機の種類における最大待機時間。
signal_wait_time_ms 待機スレッドがシグナルを受け取ってから実行を開始するまでの時間。

 

DBCC SQLPERF (‘sys.dm_db_wait_stats’, CLEAR);
によるカウンターリセットには対応していません。

参考情報

SQL Azure

Windows Azure Teamから、「SQLデータベース メンテナンスのお知らせ」というメールがきました。

お客様各位

SQL データベースのパフォーマンスを最適化するための継続的な取り組みの一環として、東南アジアデータセンターのネットワーク インフラストラクチャをアップグレードします。

本アップグレードの影響を最小限に抑えるため、お客様がご利用している地域におけるSQL データベースの利用状況を確認したうえでメンテナンスに最適な時間帯を決定させていただきました。
お客様のご利用している地域でのアップグレードスケジュールは下記のとおりです。下記の時刻より約 2 分間にわたりサービスが中断される予定です。
東南アジアデータセンター
2013年2月6日 午前6:00[日本時間]、協定世界時(UTC) 2月5日 午後9時

予定されているメンテナンスの最新状況については、 Windows Azure サービス ダッシュボードにアクセスしてください。

ネットワークの強化を実施するのにサービスダウンを伴うようです。
ピークオフの時間であるAM6時で実施することになったそうです。

ユーザーは、2/6に備えて準備をしましょう。

SQL Azure

新しいWindows Azure SQL Databaseのサービスアップデートが発表されました。
主な新しい機能は次の通り。

  • Windows Azure SQL DatasebaseをSQL Serverのリンクサーバーと分散クエリの対象にすることができるようになった
  • Windows Azure SQL Databaseで再起トリガーに対応
  • Windows Azure SQL DatabaseでDBCC SHOW_STATISTICSに対応
  • データベースレベルでWindows Azure SQL Databaseファイヤーウォールルールを設定できるようになった
    • Azure SQL Databaseをリンクサーバーと分散クエリの対象にできる

      Windows Azure SQL Databaseをリンクサーバーに追加できるようになり、それを使用してオンプレミスとクラウド間で、分散クエリを発行できるようになりました。

      従来はODBC~OLEDBプロキシを使用することで分散クエリを発行できましたが、パフォーマンスに難がありました。

    オンプレミスとクラウド間で分散クエリを発行できるようになったということは、
    オンプレミスのデータベースのテーブルと、クラウドのデータベースのテーブルとを
    結合するようなクエリを発行できるということです。

    image

    リンクサーバーの設定

    次のクエリを、オンプレミスのSQL Serverで実行します。
    なお今回の対応は、オンプレミスとクラウド間のリンクサーバーと分散クエリの対応なので、
    クラウドとクラウドは対応していません。
    Azure SQL Databaseにクエリを発行して、リンクサーバーを定義しようとしてもはじかれます。

    リンクサーバーを定義します。

    EXEC sp_addlinkedserver
    @server=’nora’, — 任意のリンクサーバー名を指定する
    @srvproduct=”,    
    @provider=’sqlncli’, — SQL Server native clientを使用します
    @datasrc=’xxxxxx.database.windows.net’,   — Azure SQLのサーバー名を指定する
    @location=”,
    @provstr=”,
    @catalog=’AdventureWorksDWAZ2008R2’  — データベース名を指定する

    リモートサーバー(Azure SQL Database)の認証情報を設定します。

    EXEC sp_addlinkedsrvlogin
    @rmtsrvname = ‘nora’, — 上で指定したリンクサーバー名を指定する
    @useself = ‘false’,
    @rmtuser = ‘userName’,             — ログイン名を指定する
    @rmtpassword = ‘P@ssw0rd’ — パスワードを指定する
    EXEC sp_serveroption ‘nora’, ‘rpc out’, true;

    この2つのクエリを発行すると、オンプレミスのSQL Serverにリンクサーバーを定義できます。
    SQL Server Management Studioのオブジェクトエクスプローラーで確認できます。

    image

    この状態で、オンプレミスのSQL Serverに対して次のようなクエリを発行できるようになります。

    select *
    into test
    from nora.AdventureWorksDWAZ2008R2.dbo.DimDate

    Windows Azure SQL Databaseのテーブルからデータを取得して、それをオンプレミスのテーブルに格納しています。
    当然、クエリの結合も可能です。

    リンクサーバーの詳細については、http://technet.microsoft.com/ja-jp/library/ms188279.aspxを参照してください。

    再起トリガーの作成

    再起トリガーを実行できるようになりました。
    データベースの既定値がONになっているので、再起トリガーを実行できる状態になっています。
    再起トリガーの有効、無効の切り替えは次のクエリで実行できます。

    ALTER DATABASE YOURDBNAME SET RECURSIVE_TRIGGERS ON|OFF;

    再起トリガーの詳細については、http://msdn.microsoft.com/ja-jp/library/ms190739.aspxを参照してください。

    DBCC SHOW_STATISTICSが使用できる

    Windows Azure SQL Databaseで、どのような統計情報が生成されているのかを確認できるコマンドを使用できるようになりました。
    詳細は、http://msdn.microsoft.com/ja-jp/library/ms174384.aspxを見てください。
    //ムッシュBlogによると前からつかえたような…?

    Azure SQL Databaseでデータベース毎にFirewall設定ができる

    Azure SQL Databaseでデータベース毎にFirewall設定ができるようになりました!」で、案内している通り、データベース毎にルール設定できます。
    詳細は、http://msdn.microsoft.com/ja-jp/library/windowsazure/ee621782.aspxを参照してください。これBlogで告知し忘れていた?のか、今さらなアピールですね。

    image

    情報源

    Announcing Updates to Windows Azure SQL Databaseを参照しました。

    SQL Azure

    ※Windows Azureチームブログに投稿されたSQL Azureのアップデートに関する投稿をざっくり意訳した意訳です。

    SQL PASSサミット2012の2日目のキーノートで、マイクロソフトはSQL Azureにとって重要な内容を含むいくつかのアップデートを発表しました。

    SQL Azure ReportingとSQL Azure Data SyncのCTP版提供の開始と、SQL Azureサービスリリース2011 Q4で提供予定の内容について発表しました。

    SQL Azure提供予定の機能

    2011年の終わりまでに提供する予定のSQL Azure サービスリリース2011Q4は、シンプルかつ柔軟にスケールアウトするのに必要な機能を提供することを目的としています。

    • 個々のSQL Azureデータベースの最大サイズを現在の50GBから、3倍の150GBに増やします。
    • Federation
    • 新しいSQL Azure管理ポータルの強化。もっと簡単にデータベースを監視できるように新しい機能を提供します。スキーマのドリルダウン、クエリプランの表示、空間データの表示、インデックス/キーの表示、クエリパフォーマンス統計情報の表示。
    • ユーザが管理できる照合順序のサポートを拡張

    SQL Azure Reporting CTP

    • 可用性とパフォーマンスの改善
    • SQL Azure Reportingサーバーのセルフプロビジョニングが可能
    • Windows Azure管理ポータルを更新し、ユーザを簡単に管理できレポートをデプロイできるようにしました。
    • 世界中のWindows Azureデータセンターでの提供を開始
    • このCTP版からマイクロソフトの公式サポート開始
    • 認証不要でレポートを参照できるようにするアクセスコントロールに対応

    SQL Azure Data Sync CTP

    • 新しい管理ポータルで簡単に使用できるようになりました
      新しい管理ポータルを提供し、同期の監視管理、設定をしやすくなりました
    • 同期グループの設定とフィルタリングを柔軟にできるように強化しました
      フィルタリング:特定のテーブル列、特定の行だけを同期できるようになりました
      同期グループの設定:グループメンバーごとに同期衝突が発生した場合の解決方法を設定できるようになりました
    • すべてのユーザが使用できるようになりました
      特別な登録をすることなく、全SQL Azureユーザが試せるように新しいCTP版を提供します。

    デモの様子などは、SQL PASSサミット2012のサイトで公開されます。
    http://www.sqlpass.org/summit/2011/Live/LiveStreaming.aspx

    Windows Azure

    image

    Windows Azure ASP.NET MVC 3 Web Role で使っているプロバイダ « ブチザッキで、

    どうもこのASP.NET MVC 3 Webロールテンプレートで使っているセッションやメンバシッププロバイダ等各種プロバイダはEntityFrameworkベースのSystem.Web.Providersだそうです。

    なんて紹介されています。
    System.Web.Providersって、何やつ?どー使ってあげれば良いの?
    ってことで、答えを「Deploying the Windows Azure ASP.NET MVC 3 Web Role」から拝借してきました。

    MVC 3テンプレートでは、ASP.NET Universal Providerを使用しています。
    セッションステートの格納先が初期設定では、SQL Expressを使用するようにしているASP.NET Universal Providerをテンプレートでは、使用しています。

    <sessionState mode="Custom" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider"
             type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
             connectionStringName="DefaultConnection"
             applicationName="/" />
      </providers>
    </sessionState>
    

    さて、ベストな対応はなんでしょうか?

    SQL Azureにシンプルなデータベース「UniversalProviders」を作成します。

    image

    接続文字列をコピーし、所りゅーしょんのApplicationServiesDefaultConnection接続文字列をSQL Azureの接続文字列に変更します。

    接続文字列では、MultipleActiveResultSets=True と設定する必要があります。

    <connectionStrings>
      <add name="ApplicationServices"
           connectionString="Server=tcp:YOURDB.database.windows.net,1433;Database=UniversalProviders;User ID=YOURLOGIN@YOURDB;Password=YOURPWD;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True;"
           providerName="System.Data.SqlClient" />
      <add name="DefaultConnection"
           connectionString="Server=tcp:YOURDB.database.windows.net,1433;Database=UniversalProviders;User ID=YOURLOGIN@YOURDB;Password=YOURPWD;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True;"
           providerName="System.Data.SqlClient" />
    </connectionStrings>
    

    後は、Windows Azureにデプロイすれば動作します。

    動作させた後、データベースを確認すると「dbo.Sessions」テーブルが作成されています。

    ログオンし、ユーザのセットアップをすると、Windows Azureで動作するMVCアプリケーション内のメンバーシップとロールがすべてSQL Azureに格納されます。

    Picture