2017-11-30 22 views
0

Azureで実行中のWebアプリケーションで、データベースの作成、未使用データベースの削除などのさまざまなデータベース保守タスクを実行しています。すべてがAzure SQLで実行されています。Azure Webジョブで呼び出されるAzure SQLデータベースでタイムアウトエラーが発生する

このアプリケーションは24/24で動作し、メンテナンス作業は1時間ごとに実行されます。ほとんどの場合、喧嘩はうまくいく。しかし、タスクは時々それらのもののようなエラーで終わる:

  • HTTPエラーGatewayTimeout:リクエスト:ゲートウェイが指定された時間内に
  • HTTPエラーServiceUnavailable「をMicrosoft.Sql」からの応答を受信しませんでしたがタイムアウトしました
  • SQLException:実行タイムアウトが切れています。操作が完了する前にタイムアウト時間が経過したか、サーバーが応答していません。
  • のSQLException:接続が正常にサーバーに設立、その後エラーはこの問題が発生したときにデータベースに到達できないように思えログイン前のハンドシェイク

中に発生しました。

誰かが問題のデバッグを手伝うことができたらうれしいです。

ありがとうございます。

答えて

2

Azure SQLデータベースに固有の一時的なエラーやその他の種類のエラーがあります。一時的なフォールトエラーは、通常、クライアントプログラムからの次のエラーメッセージの1つとして現れます。

•サーバー上のデータベースは現在利用できません。後で接続を再試行してください。問題が解決しない場合は、カスタマーサポートに連絡して、セッショントレースIDを

に指定してください。•サーバー上のデータベースは現在使用できません。後で接続を再試行してください。問題が解決しない場合は、カスタマーサポートに連絡し、のセッショントレースIDを提供してください。 (Microsoft SQL Server、エラー:40613)

•既存の接続がリモートホストによって強制的に閉じられました。

?System.Data.Entity.Core.EntityCommandExecutionException:コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。 ---> System.Data.SqlClient.SqlException:サーバーから結果を受け取るときにトランスポートレベルのエラーが発生しました。 (プロバイダー:セッションプロバイダー、エラー:19 - 物理的な接続は使用できません)

•データベースが再構成中で、新しいページを適用中であるためにセカンダリデータベースへの接続が失敗しました。プライマリ・データベースでのアクティブな変換。

これらのエラーと詳細については、hereを参照してください。 Azure SQLデータベースに接続するアプリケーションでは、再試行ロジックを作成する必要があります。

public void HandleTransients() 
{ 
    var connStr = "some database"; 
    var _policy = RetryPolicy.Create < SqlAzureTransientErrorDetectionStrategy(
     retryCount: 3, 
     retryInterval: TimeSpan.FromSeconds(5)); 

    using (var conn = new ReliableSqlConnection(connStr, _policy)) 
    { 
     // Do SQL stuff here. 
    } 
} 

リトライロジックの作成方法の詳細here

スロットルもタイムアウトの原因です。次のクエリは、Azure SQLデータベースに対する作業負荷の影響を理解するのに役立ちます。99.9%<の

SELECT 
    (COUNT(end_time) - SUM(CASE WHEN avg_cpu_percent > 80 THEN 1 ELSE 0 END) * 1.0)/COUNT(end_time) AS 'CPU Fit Percent' 
    ,(COUNT(end_time) - SUM(CASE WHEN avg_log_write_percent > 80 THEN 1 ELSE 0 END) * 1.0)/COUNT(end_time) AS 'Log Write Fit Percent' 
    ,(COUNT(end_time) - SUM(CASE WHEN avg_data_io_percent > 80 THEN 1 ELSE 0 END) * 1.0)/COUNT(end_time) AS 'Physical Data Read Fit Percent' 
FROM sys.dm_db_resource_stats 

--serviceレベルの目標(SLO)=次の階層にあなたの助けを

+0

感謝を行きます!私たちは、こうした種類のエラーを引き起こすのはこの種の行動だと考えました。宜しくお願いします! –

+0

私はデバッグのためのドキュメントを見つけることができませんが、最終的にそれを見つけると私はあなたと共有します。私はそれが役に立つとうれしいです。 –

+0

遅れて申し訳ありません。それは役に立つかもしれません。 https://docs.microsoft.com/en-us/Azure/app-service/web-sites-dotnet-troubleshoot-visual-studio –