Sdílet prostřednictvím


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

PLATÍ PRO: NoSQL MongoDB Cassandra Skřítek

V tomto článku se budeme zabývat tím, jak napsat pokročilejší dotazy, které vám pomůžou ř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).

V případě tabulek Azure Diagnostics se všechna data zapisuje do jedné tabulky. Uživatelé určují, do které kategorie 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 a zjistěte, jak tuto funkci povolit.

U tabulek specifických pro prostředky se data zapisují do jednotlivých tabulek pro každou kategorii prostředku. 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ředky a Azure Diagnostics.

Prvních N(10) jednotek žádostí (RU) využívající požadavky nebo dotazy v určitém časovém rámci

//Enable full-text query to view entire query text
CDBMongoRequests
| where TimeGenerated > ago(24h)
| project PIICommandText, ActivityId, DatabaseName , CollectionName, RequestCharge
| order by RequestCharge desc
| take 10

Omezení požadavků (statusCode = 429 nebo 16500) v určitém časovém intervalu

CDBMongoRequests
| where TimeGenerated > ago(24h)
| where ErrorCode == "429" or ErrorCode == "16500"
| project DatabaseName, CollectionName, PIICommandText, OperationName, TimeGenerated

Žádosti o vypršení časového limitu (statusCode = 50) v určitém časovém intervalu

CDBMongoRequests
| where TimeGenerated > ago(24h)
| where ErrorCode == "50"
| project DatabaseName, CollectionName, PIICommandText, OperationName, TimeGenerated

Dotazy s velkými délkami odpovědí (velikost datové části odpovědi serveru)

CDBMongoRequests
//specify collection and database
//| where DatabaseName == "DB NAME" and CollectionName == "COLLECTIONNAME"
| summarize max(ResponseLength) by PIICommandText, RequestCharge, DurationMs, OperationName, TimeGenerated
| 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 == "DB NAME" 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 == "DB NAME" and CollectionName == "COLLECTIONNAME"
// filter by operation type
//| where operationType_s == 'Create'
| summarize sum(todouble(RequestCharge)) by PartitionKey, PartitionKeyRangeId
| render columnchart  

Další kroky