Dela via


Felsöka problem med avancerade diagnostikfrågor med Azure Cosmos DB för NoSQL

GÄLLER FÖR: NoSQL

I den här artikeln går vi igenom hur du skriver mer avancerade frågor för att felsöka problem med ditt Azure Cosmos DB-konto med hjälp av diagnostikloggar som skickas till Azure Diagnostics-tabeller (äldre) och resursspecifika tabeller (förhandsversion).

För Azure Diagnostics-tabeller skrivs alla data till en enda tabell. Användare anger vilken kategori de vill fråga efter. Om du vill visa frågan i fulltext i din begäran kan du läsa Övervaka Azure Cosmos DB-data med hjälp av diagnostikinställningar i Azure för att lära dig hur du aktiverar den här funktionen.

För resursspecifika tabeller skrivs data till enskilda tabeller för varje kategori av resursen. Vi rekommenderar det här läget eftersom det:

  • Gör det mycket enklare att arbeta med data.
  • Ger bättre identifiering av scheman.
  • Förbättrar prestanda för både svarstid för inmatning och frågetider.

Vanliga frågor

Vanliga frågor visas i de resursspecifika tabellerna och Azure Diagnostics-tabellerna.

De översta N(10) frågorna ordnade efter RU-förbrukning (Request Unit) inom en viss tidsram

let topRequestsByRUcharge = CDBDataPlaneRequests 
| where TimeGenerated > ago(24h)
| project  RequestCharge , TimeGenerated, ActivityId;
CDBQueryRuntimeStatistics
| project QueryText, ActivityId, DatabaseName , CollectionName
| join kind=inner topRequestsByRUcharge on ActivityId
| project DatabaseName , CollectionName , QueryText , RequestCharge, TimeGenerated
| order by RequestCharge desc
| take 10

Begäranden begränsades (statusCode = 429) i ett specifikt tidsfönster

let throttledRequests = CDBDataPlaneRequests
| where StatusCode == "429"
| project  OperationName , TimeGenerated, ActivityId;
CDBQueryRuntimeStatistics
| project QueryText, ActivityId, DatabaseName , CollectionName
| join kind=inner throttledRequests on ActivityId
| project DatabaseName , CollectionName , QueryText , OperationName, TimeGenerated

Frågor med de största svarslängderna (nyttolaststorlek för serversvaret)

let operationsbyUserAgent = CDBDataPlaneRequests
| project OperationName, DurationMs, RequestCharge, ResponseLength, ActivityId;
CDBQueryRuntimeStatistics
//specify collection and database
//| where DatabaseName == "DBNAME" and CollectionName == "COLLECTIONNAME"
| join kind=inner operationsbyUserAgent on ActivityId
| summarize max(ResponseLength) by QueryText
| order by max_ResponseLength desc

RU-förbrukning efter fysisk partition (över alla repliker i replikuppsättningen)

CDBPartitionKeyRUConsumption
| where TimeGenerated >= now(-1d)
//specify collection and database
//| where DatabaseName == "DBNAME" and CollectionName == "COLLECTIONNAME"
// filter by operation type
//| where operationType_s == 'Create'
| summarize sum(todouble(RequestCharge)) by toint(PartitionKeyRangeId)
| render columnchart

RU-förbrukning efter logisk partition (över alla repliker i replikuppsättningen)

CDBPartitionKeyRUConsumption
| where TimeGenerated >= now(-1d)
//specify collection and database
//| where DatabaseName == "DBNAME" and CollectionName == "COLLECTIONNAME"
// filter by operation type
//| where operationType_s == 'Create'
| summarize sum(todouble(RequestCharge)) by PartitionKey, PartitionKeyRangeId
| render columnchart  

Nästa steg