Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR: NoSQL
Den här artikeln beskriver vanliga problem, lösningar, diagnostiksteg och verktyg när du använder .NET SDK med Azure Cosmos DB för NoSQL-konton. .NET SDK tillhandahåller logisk representation på klientsidan för åtkomst till Azure Cosmos DB för NoSQL. I den här artikeln beskrivs verktyg och metoder för att hjälpa dig om du stöter på problem.
Checklista för felsökningsproblem
Överväg följande checklista innan du flyttar programmet till produktion. Om du använder checklistan förhindras flera vanliga problem som du kan se. Du kan också snabbt diagnostisera när ett problem uppstår:
- Använd den senaste SDK:en. Förhandsversions-SDK:er bör inte användas för produktion. Detta förhindrar att kända problem som redan har åtgärdats uppstår.
- Granska prestandatipsen och följ de föreslagna metoderna. Detta hjälper till att förhindra skalning, svarstid och andra prestandaproblem.
- Aktivera SDK-loggning för att felsöka ett problem. Aktivering av loggning kan påverka prestanda så det är bäst att aktivera den endast när du felsöker problem. Du kan aktivera följande loggar:
- Loggmetrik med hjälp av Azure-portalen. Portalmått visar telemetri för Azure Cosmos DB, vilket är användbart för att avgöra om problemet är relaterat till Azure Cosmos DB eller om det är från klientsidan.
- Logga diagnostiksträngen från åtgärderna och/eller undantagen.
Ta en titt på avsnittet Vanliga problem och lösningar i den här artikeln.
Kontrollera avsnittet GitHub-ärenden som övervakas aktivt. Kontrollera om något liknande problem med en lösning redan har lämnats in. Om du inte hittar någon lösning kan du skapa ett GitHub-problem. Du kan öppna en support-tick för brådskande problem.
Samla in diagnostik
Alla svar i SDK, inklusive CosmosException
, har en Diagnostics
egenskap. Den här egenskapen registrerar all information som rör den enskilda begäran, inklusive om det fanns återförsök eller tillfälliga fel.
Diagnostikresultaten ges som en sträng. Strängen ändras med varje version eftersom den har förbättrats för felsökning av olika scenarier. Vid varje version av SDK kommer formatet för strängen att ändras på ett sätt som bryter kompatibilitet. Parsa inte strängen för att undvika icke-bakåtkompatibla ändringar. Följande kodexempel visar hur du läser diagnostikloggar med hjälp av .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()
}
Vanliga fel och lösningar
Allmänna förslag
- Följ alla
aka.ms
länkar som ingår i undantagsinformationen. - Kör din app i samma Azure-region som ditt Azure Cosmos DB-konto när det är möjligt.
- Du kan stöta på problem med anslutning/tillgänglighet på grund av brist på resurser på klientdatorn. Vi rekommenderar att du övervakar processoranvändningen på noder som kör Azure Cosmos DB-klienten och skalar upp/ut om de körs med hög belastning.
Kontrollera portalmåtten
Genom att kontrollera portalmåtten kan du avgöra om det är ett problem på klientsidan eller om det finns ett problem med tjänsten. Om mätvärdena till exempel har en hög frekvens av begäranden som begränsas av hastighetsgränsen (HTTP-statuskod 429), vilket innebär att begäran begränsas, ska du kontrollera avsnittet Begärandefrekvens för hög.
Designa om
Se vår guide för att utforma motståndskraftiga program med Azure Cosmos DB SDK:er för vägledning om hur du utformar motståndskraftiga program och lär dig vilka som är SDK:s återförsökssemantik.
SNAT
Om din app distribueras på virtuella Azure-datorer utan en offentlig IP-adress upprättar Azure SNAT-portar som standard anslutningar till valfri slutpunkt utanför den virtuella datorn. Antalet anslutningar som tillåts från den virtuella datorn till Azure Cosmos DB-slutpunkten begränsas av Azure SNAT-konfigurationen. Den här situationen kan leda till anslutningsbegränsning, anslutningsstängning eller ovan nämnda tidsgränser för begäranden.
Azure SNAT-portar används endast när den virtuella datorn har en privat IP-adress som ansluter till en offentlig IP-adress. Det finns två lösningar för att undvika Azure SNAT-begränsning (förutsatt att du redan använder en enda klientinstans i hela programmet):
Lägg till azure Cosmos DB-tjänstslutpunkten i undernätet för ditt virtuella Azure Virtual Machines-nätverk. Mer information finns i Tjänstslutpunkter för Azure Virtual Network.
När tjänstslutpunkten är aktiverad skickas inte längre begäranden från en offentlig IP-adress till Azure Cosmos DB. I stället skickas det virtuella nätverket och undernätets identitet. Den här ändringen kan leda till att brandväggen tas bort om endast offentliga IP-adresser tillåts. Om du använder en brandvägg lägger du till ett undernät i brandväggen med hjälp av ACL:er för virtuella nätverk när du aktiverar tjänstslutpunkten.
Tilldela en offentlig IP-adress till din virtuella Azure-dator.
Hög nätverksfördröjning
Se vår felsökningsguide för svarstider för mer information om felsökning av svarstider.
Fel vid proxyautentisering
Om du ser fel som visas som HTTP 407:
Response status code does not indicate success: ProxyAuthenticationRequired (407);
Det här felet genereras inte av SDK:t och kommer inte heller från Azure Cosmos DB-tjänsten. Det här är ett fel som beror på nätverkskonfigurationen. En proxy i din nätverkskonfiguration saknar troligen den proxyautentisering som krävs. Om du inte förväntar dig proxyanvändning kontaktar du ditt nätverksteam. Om du använder en proxy kontrollerar du att du ställer in rätt WebProxy-konfiguration på CosmosClientOptions.WebProxy när du skapar klientinstansen.
Vanliga frågeproblem
Frågemåtten hjälper dig att avgöra var frågan används för det mesta. Från frågemåtten kan du se hur mycket av det som spenderas på serverdelen jämfört med klienten. Läs mer i frågeprestandaguiden.
Om du får följande fel: Unable to load DLL 'Microsoft.Azure.Cosmos.ServiceInterop.dll' or one of its dependencies:
och använder Windows bör du uppgradera till den senaste Windows-versionen.
Nästa steg
- Lär dig mer om prestandariktlinjer för .NET SDK
- Lär dig mer om metodtipsen för .NET SDK