Share via


Problemen vaststellen en oplossen bij het gebruik van Azure Cosmos DB .NET SDK

VAN TOEPASSING OP: NoSQL

In dit artikel worden veelvoorkomende problemen, tijdelijke oplossingen, diagnostische stappen en hulpprogramma's beschreven wanneer u de .NET SDK gebruikt met Azure Cosmos DB for NoSQL-accounts. De .NET SDK biedt logische weergave aan de clientzijde voor toegang tot Azure Cosmos DB for NoSQL. In dit artikel worden tools en benaderingen beschreven om u te helpen bij eventuele problemen.

Controlelijst voor het oplossen van problemen

Houd rekening met de volgende controlelijst voordat u uw toepassing naar productie verplaatst. Als u de controlelijst gebruikt, voorkomt u mogelijk verschillende veelvoorkomende problemen. U kunt ook snel vaststellen wanneer er een probleem optreedt:

  • Gebruik de nieuwste SDK. Preview-SDK's mogen niet worden gebruikt voor productie. Dit voorkomt dat bekende problemen worden bereikt die al zijn opgelost.
  • Bekijk de tips voor prestaties en volg de voorgestelde procedures. Dit helpt bij het voorkomen van schalen, latentie en andere prestatieproblemen.
  • Schakel de SDK-logboekregistratie in om u te helpen bij het oplossen van een probleem. Het inschakelen van de logboekregistratie kan van invloed zijn op de prestaties, zodat u deze het beste alleen kunt inschakelen bij het oplossen van problemen. U kunt de volgende logboeken inschakelen:
    • Metrische gegevens registreren met behulp van Azure Portal. Metrische gegevens van de portal geven de Telemetrie van Azure Cosmos DB weer. Dit is handig om te bepalen of het probleem overeenkomt met Azure Cosmos DB of aan de clientzijde.
    • Registreer de diagnostische tekenreeks van de bewerkingen en/of uitzonderingen.

Bekijk de sectie Veelvoorkomende problemen en tijdelijke oplossingen in dit artikel.

Controleer de sectie Met GitHub-problemen die actief wordt bewaakt. Controleer of er al een vergelijkbaar probleem met een tijdelijke oplossing is opgeslagen. Als u geen oplossing hebt gevonden, dient u een GitHub-probleem in. U kunt een ondersteuningsstreepje openen voor urgente problemen.

Diagnostische gegevens vastleggen

Alle antwoorden in de SDK, inclusief CosmosException, hebben een Diagnostics eigenschap. Deze eigenschap registreert alle informatie met betrekking tot de enkele aanvraag, inclusief of er nieuwe pogingen of tijdelijke fouten zijn opgetreden.

De diagnostische gegevens worden geretourneerd als een tekenreeks. De tekenreeks verandert met elke versie, omdat deze is verbeterd voor het oplossen van problemen met verschillende scenario's. Bij elke versie van de SDK heeft de tekenreeks belangrijke wijzigingen in de opmaak. Parseert de tekenreeks niet om wijzigingen die fouten veroorzaken te voorkomen. In het volgende codevoorbeeld ziet u hoe u diagnostische logboeken leest met behulp van de .NET SDK:

try
{
    ItemResponse<Book> response = await this.Container.CreateItemAsync<Book>(item: testItem);
    if (response.Diagnostics.GetClientElapsedTime() > ConfigurableSlowRequestTimeSpan)
    {
        // Log the response.Diagnostics.ToString() and add any additional info necessary to correlate to other logs 
    }
}
catch (CosmosException cosmosException)
{
    // Log the full exception including the stack trace with: cosmosException.ToString()
    
    // The Diagnostics can be logged separately if required with: cosmosException.Diagnostics.ToString()
}

// When using Stream APIs
ResponseMessage response = await this.Container.CreateItemStreamAsync(partitionKey, stream);
if (response.Diagnostics.GetClientElapsedTime() > ConfigurableSlowRequestTimeSpan || !response.IsSuccessStatusCode)
{
    // Log the diagnostics and add any additional info necessary to correlate to other logs with: response.Diagnostics.ToString()
}

Veelvoorkomende problemen en tijdelijke oplossingen

Algemene suggesties

  • Volg een aka.ms koppeling die is opgenomen in de details van de uitzondering.
  • Voer waar mogelijk uw app uit in dezelfde Azure-regio als uw Azure Cosmos DB-account.
  • Mogelijk ondervindt u problemen met connectiviteit/beschikbaarheid vanwege een gebrek aan resources op uw clientcomputer. We raden u aan uw CPU-gebruik te bewaken op knooppunten waarop de Azure Cosmos DB-client wordt uitgevoerd en omhoog/uit te schalen als ze met hoge belasting worden uitgevoerd.

De metrische gegevens van de portal controleren

Door de metrische gegevens van de portal te controleren, kunt u bepalen of het een probleem aan de clientzijde is of of er een probleem is met de service. Als de metrische gegevens bijvoorbeeld een hoge snelheidslimiet voor aanvragen (HTTP-statuscode 429) bevatten, wat betekent dat de aanvraag wordt beperkt, controleert u de sectie Aanvraagsnelheid te groot .

Ontwerp voor opnieuw proberen

Raadpleeg onze handleiding voor het ontwerpen van flexibele toepassingen met Azure Cosmos DB SDK's voor hulp bij het ontwerpen van tolerante toepassingen en het leren van de semantiek voor opnieuw proberen van de SDK.

SNAT

Als uw app is geïmplementeerd op virtuele Azure-machines zonder een openbaar IP-adres, maken standaard Azure SNAT-poorten verbindingen met een eindpunt buiten uw VM. Het aantal verbindingen dat van de VM naar het Azure Cosmos DB-eindpunt is toegestaan, wordt beperkt door de Azure SNAT-configuratie. Deze situatie kan leiden tot verbindingsbeperking, verbindingssluiting of de bovenstaande time-outs voor aanvragen.

Azure SNAT-poorten worden alleen gebruikt wanneer uw VIRTUELE machine een privé-IP-adres heeft dat verbinding maakt met een openbaar IP-adres. Er zijn twee tijdelijke oplossingen om azure SNAT-beperking te voorkomen (mits u al één clientexemplaren in de hele toepassing gebruikt):

  • Voeg uw Azure Cosmos DB-service-eindpunt toe aan het subnet van uw virtuele Azure-machines-netwerk. Zie Azure Virtual Network-service-eindpunten voor meer informatie.

    Wanneer het service-eindpunt is ingeschakeld, worden de aanvragen niet meer verzonden vanaf een openbaar IP-adres naar Azure Cosmos DB. In plaats daarvan worden de identiteit van het virtuele netwerk en het subnet verzonden. Deze wijziging kan leiden tot een daling van de firewall als alleen openbare IP-adressen zijn toegestaan. Als u een firewall gebruikt en u het service-eindpunt inschakelt, voegt u een subnet toe aan de firewall met behulp van ACL's voor virtueel netwerk.

  • Wijs een openbaar IP-adres toe aan uw Azure-VM.

Hoge netwerklatentie

Raadpleeg onze gids voor probleemoplossing voor latentie voor meer informatie over het oplossen van latentieproblemen.

Proxyverificatiefouten

Als u fouten ziet die worden weergegeven als HTTP 407:

Response status code does not indicate success: ProxyAuthenticationRequired (407);

Deze fout wordt niet gegenereerd door de SDK en is niet afkomstig van de Azure Cosmos DB-service. Dit is een fout met betrekking tot netwerkconfiguratie. Een proxy in uw netwerkconfiguratie mist waarschijnlijk vereiste proxyverificatie. Als u niet verwacht een proxy te gebruiken, dan neemt u contact op met uw netwerkteam. Als u een proxy gebruikt, moet u ervoor zorgen dat u de juiste WebProxy-configuratie instelt op CosmosClientOptions.WebProxy bij het maken van het clientexemplaren.

Veelvoorkomende queryproblemen

De metrische querygegevens helpen bepalen waar de query het grootste deel van de tijd doorbrengt. In de metrische querygegevens kunt u zien hoeveel er wordt besteed aan de back-end versus de client. Meer informatie over de handleiding voor queryprestaties.

Als u de volgende fout tegenkomt: Unable to load DLL 'Microsoft.Azure.Cosmos.ServiceInterop.dll' or one of its dependencies: en Windows gebruikt, moet u een upgrade uitvoeren naar de nieuwste Windows-versie.

Volgende stappen

  • Meer informatie over prestatierichtlijnen voor de .NET SDK
  • Meer informatie over de aanbevolen procedures voor de .NET SDK