Megosztás a következőn keresztül:


Az Apache Cassandra-hoz készült Azure Cosmos DB speciális diagnosztikai lekérdezéseivel kapcsolatos problémák elhárítása

A KÖVETKEZŐKRE VONATKOZIK: NoSQL MongoDB Cassandra Gremlin

Ebben a cikkben részletesebb lekérdezések írásával segítünk elhárítani az Azure Cosmos DB for Cassandra-fiókjával kapcsolatos problémákat az erőforrás-specifikus táblákba küldött diagnosztikai naplók használatával.

Az Azure Diagnostics-táblák esetében a rendszer minden adatot egyetlen táblába ír. A felhasználók megadják, hogy melyik kategóriát szeretnék lekérdezni. Ha meg szeretné tekinteni a kérés teljes szöveges lekérdezését, tekintse meg az Azure Cosmos DB-adatok monitorozását az Azure diagnosztikai beállításaival, és ismerje meg, hogyan engedélyezheti ezt a funkciót.

Erőforrás-specifikus táblák esetében az adatok az erőforrás egyes kategóriáinak egyes tábláiba lesznek beírva. Ezt a módot javasoljuk, mert:

  • Sokkal egyszerűbbé teszi az adatokkal való munkát.
  • A sémák jobb felderíthetőségét biztosítja.
  • Javítja a teljesítményt mind a betöltési késés, mind a lekérdezési idő tekintetében.

Előfeltételek

Figyelmeztetés

Ha diagnosztikai beállítást hoz létre a Cassandra-fiók API-hoz, győződjön meg arról, hogy a "DataPlaneRequests" nem lesz kiválasztva. Emellett a Céltábla esetében győződjön meg arról, hogy az "Erőforrás-specifikus" beállítás van kiválasztva, mivel jelentős költségmegtakarítást kínál az "Azure-diagnosztika" helyett.

Feljegyzés

Vegye figyelembe, hogy a teljes szöveges diagnosztika engedélyezésével a visszaadott lekérdezések PII-adatokat tartalmaznak. Ez a funkció nem csak a lekérdezés vázát naplózza elhomályosított paraméterekkel, hanem maguk a paraméterek értékeit is naplózza. Ez segíthet annak diagnosztizálásában, hogy egy adott elsődleges kulcs (vagy elsődleges kulcsok készlete) lekérdezései sokkal több kérelemegységet használnak-e fel, mint a többi elsődleges kulcs lekérdezései.

Log Analytics-lekérdezések különböző forgatókönyvekkel

Buborék szótérkép képe a Log Analytics Azure Cosmos DB-ben való használatával kapcsolatos lehetséges kérdésekkel

RU-használat

  • Magas RU/s-t használó Cassandra-műveletek.

    CDBCassandraRequests 
    | where DatabaseName=="azure_comos" and CollectionName=="user" 
    | project TimeGenerated, RequestCharge, OperationName,
    requestType=split(split(PIICommandText,'"')[3], ' ')[0]
    | summarize max(RequestCharge) by bin(TimeGenerated, 10m), tostring(requestType), OperationName;
    
  • Ru-használat figyelése műveletenként logikai partíciókulcsokon.

    CDBPartitionKeyRUConsumption
    | where DatabaseName=="azure_comos" and CollectionName=="user"
    | summarize TotalRequestCharge=sum(todouble(RequestCharge)) by PartitionKey, PartitionKeyRangeId
    | order by TotalRequestCharge;
    
    CDBPartitionKeyRUConsumption
    | where DatabaseName=="azure_comos" and CollectionName=="user"
    | summarize TotalRequestCharge=sum(todouble(RequestCharge)) by OperationName, PartitionKey
    | order by TotalRequestCharge;
    
    CDBPartitionKeyRUConsumption
    | where DatabaseName=="azure_comos" and CollectionName=="user"
    | summarize TotalRequestCharge=sum(todouble(RequestCharge)) by bin(TimeGenerated, 1m), PartitionKey
    | render timechart;
    
  • Melyek azok a leggyakoribb lekérdezések, amelyek hatással vannak az ru-használatra?

    CDBCassandraRequests
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | where TimeGenerated > ago(24h)
    | project ActivityId, DatabaseName, CollectionName, queryText=split(split(PIICommandText,'"')[3], ' ')[0], RequestCharge, TimeGenerated
    | order by RequestCharge desc;
    
  • Ru-használat az olvasási és írási műveletek hasznos adatméreteinek variációi alapján.

    // This query is looking at read operations
    CDBCassandraRequests
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | project ResponseLength, TimeGenerated, RequestCharge, cassandraOperationName=split(split(PIICommandText,'"')[3], ' ')[0]
    | where cassandraOperationName =="SELECT"
    | summarize maxResponseLength=max(ResponseLength), maxRU=max(RequestCharge) by bin(TimeGenerated, 10m), tostring(cassandraOperationName)
    
    // This query is looking at write operations
    CDBCassandraRequests
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | project ResponseLength, TimeGenerated, RequestCharge, cassandraOperationName=split(split(PIICommandText,'"')[3], ' ')[0]
    | where cassandraOperationName in ("CREATE", "UPDATE", "INSERT", "DELETE", "DROP")
    | summarize maxResponseLength=max(ResponseLength), maxRU=max(RequestCharge) by bin(TimeGenerated, 10m), tostring(cassandraOperationName)
    
    // Write operations over a time period.
    CDBCassandraRequests
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | project ResponseLength, TimeGenerated, RequestCharge, cassandraOperationName=split(split(PIICommandText,'"')[3], ' ')[0]
    | where cassandraOperationName in ("CREATE", "UPDATE", "INSERT", "DELETE", "DROP")
    | summarize maxResponseLength=max(ResponseLength), maxRU=max(RequestCharge) by bin(TimeGenerated, 10m), tostring(cassandraOperationName)
    | render timechart;
    
    // Read operations over a time period.
    CDBCassandraRequests
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | project ResponseLength, TimeGenerated, RequestCharge, cassandraOperationName=split(split(PIICommandText,'"')[3], ' ')[0]
    | where cassandraOperationName =="SELECT"
    | summarize maxResponseLength=max(ResponseLength), maxRU=max(RequestCharge) by bin(TimeGenerated, 10m), tostring(cassandraOperationName)
    | render timechart;
    
  • Ru-használat olvasási és írási műveletek alapján logikai partíciónként.

    CDBPartitionKeyRUConsumption
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | where OperationName in ("Delete", "Read", "Upsert")
    | summarize totalRU=max(RequestCharge) by OperationName, PartitionKeyRangeId
    
  • RU-használat fizikai és logikai partíció alapján.

    CDBPartitionKeyRUConsumption
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | summarize totalRequestCharge=sum(RequestCharge) by PartitionKey, PartitionKeyRangeId;
    
  • A gyakori elérésű partíciók magas RU-használathoz vezetnek?

    CDBPartitionKeyStatistics
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | where  TimeGenerated > now(-8h)
    | summarize StorageUsed = sum(SizeKb) by PartitionKey
    | order by StorageUsed desc
    
  • Hogyan befolyásolja a partíciókulcs az RU használatát?

    let storageUtilizationPerPartitionKey = 
    CDBPartitionKeyStatistics
    | project AccountName=tolower(AccountName), PartitionKey, SizeKb;
    CDBCassandraRequests
    | project AccountName=tolower(AccountName),RequestCharge, ErrorCode, OperationName, ActivityId, DatabaseName, CollectionName, PIICommandText, RegionName
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | join kind=inner storageUtilizationPerPartitionKey  on $left.AccountName==$right.AccountName
    | where ErrorCode != -1 //successful
    | project AccountName, PartitionKey,ErrorCode,RequestCharge,SizeKb, OperationName, ActivityId, DatabaseName, CollectionName, PIICommandText, RegionName;
    

Késés

  • Az időablakban látható kiszolgálóoldali időtúllépések száma (állapotkód – 408).

    CDBCassandraRequests
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | where ErrorCode in (4608, 4352) //Corresponding code in Cassandra
    | summarize max(DurationMs) by bin(TimeGenerated, 10m), ErrorCode
    | render timechart;
    
  • Megfigyeljük a kiszolgálóoldali késések csúcsait a megadott időablakban?

    CDBCassandraRequests
    | where TimeGenerated > now(-6h)
    | DatabaseName=="azure_cosmos" and CollectionName=="user"
    | summarize max(DurationMs) by bin(TimeGenerated, 10m)
    | render timechart;
    
  • Szabályozni kívánt műveletek.

    CDBCassandraRequests
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | project RequestLength, ResponseLength,
    RequestCharge, DurationMs, TimeGenerated, OperationName,
    query=split(split(PIICommandText,'"')[3], ' ')[0]
    | summarize max(DurationMs) by bin(TimeGenerated, 10m), RequestCharge, tostring(query),
    RequestLength, OperationName
    | order by RequestLength, RequestCharge;
    

Szabályozás

  • Az alkalmazás szabályozást tapasztal?

    CDBCassandraRequests
    | where RetriedDueToRateLimiting != false and RateLimitingDelayMs > 0;
    
  • Milyen lekérdezések okozzák az alkalmazásnak a szabályozást egy megadott időtartammal, amely kifejezetten a 429-et vizsgálja.

    CDBCassandraRequests
    | where DatabaseName=="azure_cosmos" and CollectionName=="user"
    | where ErrorCode==4097 // Corresponding error code in Cassandra
    | project DatabaseName , CollectionName , CassandraCommands=split(split(PIICommandText,'"')[3], ' ')[0] , OperationName, TimeGenerated;
    

Következő lépések