Řešení potíží s pokročilými diagnostickými dotazy ve službě Azure Cosmos DB for NoSQL

PLATÍ PRO: NoSQL

V tomto článku se budeme zabývat tím, jak psát pokročilejší dotazy, které vám pomůžou vyřešit problémy s účtem služby Azure Cosmos DB pomocí diagnostických protokolů odesílaných do tabulek Azure Diagnostics (starší verze) a tabulek specifických pro prostředky (Preview).

U Azure Diagnostics tabulek se všechna data zapisuje do jedné tabulky. Uživatelé určují, na kterou kategorii se mají dotazovat. Pokud chcete zobrazit fulltextový dotaz požadavku, přečtěte si téma Monitorování dat služby Azure Cosmos DB pomocí nastavení diagnostiky v Azure , kde se dozvíte, jak tuto funkci povolit.

U tabulek specifických pro prostředek se data zapisují do jednotlivých tabulek pro každou kategorii zdroje. Tento režim doporučujeme, protože:

  • Usnadňuje práci s daty.
  • Poskytuje lepší zjistitelnost schémat.
  • Zlepšuje výkon v době latence příjmu dat i dotazů.

Běžné dotazy

Běžné dotazy se zobrazují v tabulkách specifických pro prostředek a Azure Diagnostics.

Nejvyšší počet dotazů N(10) seřazených podle spotřeby jednotek žádostí (RU) v určitém časovém rámci

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

Požadavky omezené (statusCode = 429) v určitém časovém okně

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

Dotazy s největší délkou odpovědí (velikost datové části odpovědi serveru)

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

Spotřeba RU podle fyzického oddílu (napříč všemi replikami v sadě replik)

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

Spotřeba RU podle logického oddílu (napříč všemi replikami v sadě replik)

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  

Další kroky