2

Windows Azure には、一時的なエラー処理アプリケーション ブロックを使用した再試行ロジックがあり、ワーカー ロールで期待どおりに機能しました。ただし、最近 SQL Azure データベースをフェデレーションにアップグレードしたところ、それ以来いくつかの問題が発生しています。

worker ロールが、特定のストアド プロシージャが存在しないと言うことがあります。これは、実行ループで毎秒チェックするストアド プロシージャです。ロールは各シャードをループし、各シャード データベースでストアド プロシージャを実行します。これはすべて正常に機能しますが、非常にまれに、TransientFaultHandling 接続が再試行されたことを示すコール スタックを含むストアド プロシージャが見つからないというエラーがログに記録されます。

私たちのコードは単純に接続を作成し (開いたままにしておく)、シャードに接続してからストアド プロシージャを実行するので、一時的な障害が発生して接続を再試行すると、最終的に接続が再接続される可能性があると考えられます。接続されていたシャードの代わりにルートデータベース?

私の質問は、TransientFaultHandling ブロックがこれを正しく考慮し、接続を再試行するときに正しいシャードに再接続するかどうかです。そうでない場合、そうするためのベスト プラクティスはありますか?

ありがとうガレス

4

1 に答える 1

0

あなたは正しい道を進んでいると思います。接続はおそらくルート データベースにリセットされます。Transient Fault Handling ブロックは一時的なエラーを自動的に処理しますが、私が知る限りフェデレーションは認識していません。

あなたのコードはどのように構成されているのだろうか。ただし、ここにアイデアがあります (まだ行っていない場合): アプリケーション ブロックを使用して、接続要求、USE コマンド (フェデレーション用)、およびストアド プロシージャ呼び出しを含むコード全体を再試行できます。したがって、それが失敗した場合、すべてが再試行されます。これを行うには、再試行ポリシー オブジェクト (SQL データベースの一時的な検出戦略) を作成し、必要なすべての作業を実行する ExecuteAction メソッドを呼び出します。

お役に立てれば。

エルベ

于 2012-09-06T21:27:41.660 に答える