Apache Cassandra için Azure Cosmos DB ile gelişmiş tanılama sorgularıyla ilgili sorunları giderme
ŞUNLAR IÇIN GEÇERLIDIR: NoSQL MongoDB Cassandra Gremlin
Bu makalede, kaynağa özgü tablolara gönderilen tanılama günlüklerini kullanarak Cassandra için Azure Cosmos DB hesabınızla ilgili sorunları gidermeye yardımcı olmak için daha gelişmiş sorgular yazmayı ele alacağız.
Azure Tanılama tablolarda tüm veriler tek bir tabloya yazılır. Kullanıcılar sorgulamak istedikleri kategoriyi belirtir. İsteğinizin tam metin sorgusunu görüntülemek istiyorsanız bu özelliği etkinleştirmeyi öğrenmek için bkz . Azure'da tanılama ayarlarını kullanarak Azure Cosmos DB verilerini izleme.
Kaynağa özgü tablolar için veriler, kaynağın her kategorisi için tek tek tablolara yazılır. Aşağıdakiler nedeniyle bu modu öneririz:
- Verilerle çalışmayı çok daha kolay hale getirir.
- Şemaların daha iyi bulunabilirliğini sağlar.
- Hem alma gecikme süresi hem de sorgu sürelerinde performansı artırır.
Önkoşullar
- Cassandra hesabı için API oluşturma
- Log Analytics Çalışma Alanı oluşturun.
- Tanılama Ayarları oluşturun.
Uyarı
Cassandra hesabı için API için bir Tanılama Ayarı oluştururken, "DataPlaneRequests" seçeneğinin seçili kalmadığından emin olun. Buna ek olarak, Hedef tablosu için "Azure tanılaması" üzerinden önemli maliyet tasarrufu sağladığından "Kaynağa özgü" öğesinin seçildiğinden emin olun.
Not
Tam metin tanılamasını etkinleştirerek döndürülen sorguların PII verileri içereceğini unutmayın. Bu özellik yalnızca sorgunun iskeletini karartılmış parametrelerle günlüğe kaydetmekle kalmaz, parametrelerin değerlerini de günlüğe kaydeder. Bu, belirli bir Birincil Anahtardaki (veya Birincil Anahtar kümesindeki) sorguların diğer Birincil Anahtarlardaki sorgulardan çok daha fazla RU kullanıp kullanmadığını tanılamaya yardımcı olabilir.
Farklı senaryolara sahip Log Analytics sorguları
RU tüketimi
Yüksek RU/sn tüketen Cassandra işlemleri.
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;
Mantıksal bölüm anahtarlarında işlem başına RU tüketimini izleme.
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;
RU tüketimini etkileyen en önemli sorgular nelerdir?
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 tüketimi, okuma ve yazma işlemleri için yük boyutlarındaki varyasyonlara göredir.
// 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;
Mantıksal bölüme göre okuma ve yazma işlemlerini temel alan RU tüketimi.
CDBPartitionKeyRUConsumption | where DatabaseName=="azure_cosmos" and CollectionName=="user" | where OperationName in ("Delete", "Read", "Upsert") | summarize totalRU=max(RequestCharge) by OperationName, PartitionKeyRangeId
Fiziksel ve mantıksal bölüme göre RU tüketimi.
CDBPartitionKeyRUConsumption | where DatabaseName=="azure_cosmos" and CollectionName=="user" | summarize totalRequestCharge=sum(RequestCharge) by PartitionKey, PartitionKeyRangeId;
Sık erişimli bölüm yüksek RU tüketimine yol açıyor mu?
CDBPartitionKeyStatistics | where DatabaseName=="azure_cosmos" and CollectionName=="user" | where TimeGenerated > now(-8h) | summarize StorageUsed = sum(SizeKb) by PartitionKey | order by StorageUsed desc
Bölüm anahtarı RU tüketimini nasıl etkiler?
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;
Gecikme süresi
Zaman penceresinde görülen sunucu tarafı zaman aşımlarının sayısı (Durum Kodu - 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;
Belirtilen zaman penceresinde sunucu tarafı gecikmelerinde ani artışlar gözlemleniyor mu?
CDBCassandraRequests | where TimeGenerated > now(-6h) | DatabaseName=="azure_cosmos" and CollectionName=="user" | summarize max(DurationMs) by bin(TimeGenerated, 10m) | render timechart;
Azaltılan işlemler.
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;
Azaltma
Uygulamanız herhangi bir azaltma sorunu mu yaşıyor?
CDBCassandraRequests | where RetriedDueToRateLimiting != false and RateLimitingDelayMs > 0;
Uygulamanızın belirli bir süreyle kısıtlamasına neden olan sorgular özel olarak 429'a bakar.
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;
Sonraki adımlar
- Cassandra hesabı için API'nizde log analytics'i etkinleştirin.
- Genel bakış hata kodu tanımı.