Windows Azure デベロッパー サポート チーム ブログ
クラウディア解説:
クラウディアつぶやき: Twitter
マイクロソフトはService Level Agreement (SLA) にて SQL Azure の月間稼働時間のサービスレベルを99%(2011年3月時点)以上を保つことを定義しています。つまりダウンタイムは月間稼働時間の1%の範囲を超えないことを定義しています。
どうやってダウンタイムの縮小を図っているのでしょうか。様々な工夫がなされていますが、その工夫の一つにマルチテナントと呼ばれる仕組みがあります。SQL Azure では データベースはいくつかのパーティションに分けられ、いくつかの物理的なサーバーに分散して存在しています。またその3つのコピーデータベース(プライマリと2つのレプリカ)も同様にいくつかのパーティションに分けられ、いくつかの物理的なサーバーに分散して格納されます。このように物理的なリソースを複数利用することにより、ハードウェア故障の問題が発生してもデータの損失がないよう、またサービスを提供し続けることができるように設計されています。もちろん、ユーザーはデータがいくつかの物理リソースにまたがって存在することは意識することなく利用することができます。
それでは、1つの物理サーバーに注目するとどんなことが起こっているのでしょうか。1つの物理サーバーにはそれぞれ別々のユーザーのデータがパーティションとして同居していることになります。そのそれぞれのユーザーが、それぞれのデータに対して処理を行っていることになります。例えて言うと、いろんな人が同居するマンションのようなイメージです。そのような状況でサービスレベルをある一定の水準に保つにはいくつかのルールが必要になってきます。例えば、温水が限られているマンションで、ある特定の人がシャワーをとても長い時間利用することがあるとします。当然一人の人が使い続ければ、他の人が使えなくなることが予想できます。みんながある程度一緒に使えるようにするには、使用量の閾値を決める必要性がでてきます。
SQL Azureでも同じように、様々な閾値が設定され、セッションやトランザクションのライフサイクルの管理が行われています。接続先のサーバーのリソースに十分な余裕がある場合には、そのリソースをフルに活用することができますが、リソース不足が検知されると、閾値を越えてリソースを消費するセッションの見直しが図られ、すべてのユーザーが常に一定の水準でサービスを利用できるように設計されています。とくに、長い時間実行されているクエリや、CPUやメモリなどを長時間多く消費する処理などは、ある一定の閾値を超えるとサーバー側で接続を切断します。これをThrottlingといいます。次に具体的にどんな閾値があるのか見ていきましょう。
上記以外にも、クライアントからサーバーまで到達する前の段階で何らかのネットワークの問題により、接続が切断されてしまうこともあります。様々な接続に関する問題に対処する意味で、接続をリトライする仕組みの実装、エラーハンドリングを確実に実装することが必要です。エラーハンドリングでは、エラー情報をログに書き出すことが一般的ですが、このログにセッショントレースIDも取得し記録しておくと、そのIDをもとにマイクロソフトのサポートに問い合わせをすることで、さらに詳しいエラーの状況がわかる場合もあります。詳しくは SQL Azure 接続系の問題に対処する編:アプリケーションのエラーハンドリングへの考慮事項 をご覧ください。
さらに詳しい情報は、以下のサイト(英語のサイトになります)をご覧ください。
また、Windows Azure / SQL Azure のサポートについては、以下を参照ください。
-- Kayoko Gray