2017-04-12 4 views
2
  • 언어 : C#
  • 프레임 워크 : .NET 4.5
  • Nuget : WindowsAzure.Storage 버전 8.0.1

안녕하세요.Microsoft.WindowsAzure.Storage.StorageException - 서버는 바쁜

생산 사이트의 로그에서 때때로 "서버가 사용 중입니다"라고 말하는 Microsoft.WindowsAzure.Storage.StorageException이 보입니다. 누구든지이 행동을 제거하는 방법에 대한 경험이나 전문가의 조언을 갖고 있습니까? Azure Portal에서 일부 설정을 변경하거나 코드를 사용하여 설정해야합니까?

아래 예제의 public static IEnumerable<MessageEntity> Get(string sentTo)이 호출되면 오류가 발생합니다.

코드 :

private static CloudTable GetMessageTable() 
{ 
    var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 
    var tableClient = storageAccount.CreateCloudTableClient(); 
    var table = tableClient.GetTableReference(CloudConfigurationManager.GetSetting("MessageTable")); 

    try 
    { 
     if (!table.Exists()) 
      table.Create(); 
    } 
    catch (Exception e) 
    { 
     // Log err 
    } 

    return table; 
} 

public static IEnumerable<MessageEntity> Get(string sentTo) 
{ 
    var table = GetMessageTable(); 
    var query = new TableQuery<MessageEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, sentTo)); 

    var result = table.ExecuteQuery(query); 
    return result.OrderByDescending(r => r.SentDate); 
} 

로그 :

Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (503) Server Unavailable. ---> System.Net.WebException: The remote server returned an error: (503) Server Unavailable. 
    at System.Net.HttpWebRequest.GetResponse() 
    at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 677 
    --- End of inner exception stack trace --- 
    at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 604 
    at Microsoft.WindowsAzure.Storage.Table.TableQuery`1.<>c__DisplayClass7.<ExecuteInternal>b__6(IContinuationToken continuationToken) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Table\TableQuery.cs:line 430 
    at Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.<LazyEnumerable>d__0`1.MoveNext() in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\Common\Core\Util\CommonUtility.cs:line 322 
    at System.Linq.Buffer`1..ctor(IEnumerable`1 source) 
    at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__1.MoveNext() 
    at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source, Func`2 predicate) 
    at *** removed *** 
Request Information 
RequestID:*** removed *** 
RequestDate:Tue, 11 Apr 2017 15:30:30 GMT 
StatusMessage:Service Unavailable 
ErrorCode:ServerBusy 
ErrorMessage:The server is busy. 
RequestId:*** removed *** 
Time:2017-04-11T15:30:31.0229653Z 

답변

2

오류가 응용 프로그램이 푸른 저장 테이블 서비스에 의해 스로틀지고 있음을 시사한다.

이러한 문제를 조사하는 좋은 방법은 저장소 분석 메트릭을 사용하고 응용 프로그램이 저장소 확장 성 대상 내에 있는지 확인하는 것입니다. 요청 수와 스로틀 오류 수에 대한 트랜잭션 메트릭이 있습니다.

https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/about-storage-analytics-metrics

코드에서

https://docs.microsoft.com/en-us/azure/storage/storage-scalability-targets

, 당신이 이미하지 않은 경우 클라이언트 측 시도를 추가하는 것이 좋습니다. 또한 일반적으로 PartitionKey 검색을 피하는 것이 좋습니다. 그러나 응용 프로그램의 특성을 알지 못하면 추가 설명을 제공하기가 어렵습니다.