Memecahkan masalah dengan kueri diagnostik tingkat lanjut dengan Azure Cosmos DB untuk NoSQL

BERLAKU UNTUK: NoSQL

Dalam artikel ini, kami akan membahas cara menulis kueri lanjutan untuk membantu memecahkan masalah dengan akun Azure Cosmos DB Anda menggunakan log diagnostik yang dikirim ke tabel Azure Diagnostics (warisan) dan khusus sumber daya (pratinjau) .

Untuk tabel Azure Diagnostics, semua data ditulis ke dalam satu tabel tunggal. Pengguna menentukan kategori mana yang ingin mereka kueri. Jika Anda ingin melihat kueri teks lengkap dari permintaan Anda, lihat Memantau data Azure Cosmos DB menggunakan pengaturan diagnostik di Azure untuk mempelajari cara mengaktifkan fitur ini.

Untuk tabel khusus sumber daya, data ditulis ke dalam tabel individual untuk setiap kategori sumber daya. Kami merekomendasikan mode ini karena:

  • Membuatnya lebih mudah untuk bekerja dengan data.
  • Memberikan penemuan skema yang lebih baik.
  • Meningkatkan performa di latensi penyerapan dan waktu kueri.

Kueri umum

Kueri umum ditampilkan dalam tabel khusus sumber daya dan Azure Diagnostics.

Kueri N(10) teratas yang diurutkan berdasarkan konsumsi Unit Permintaan (RU) dalam jangka waktu tertentu

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

Permintaan dibatasi (statusCode = 429) dalam jangka waktu tertentu

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

Kueri dengan panjang respons terbesar (ukuran payload respons server)

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

Konsumsi RU berdasarkan partisi fisik (di semua replika dalam set replika)

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

Konsumsi RU berdasarkan partisi logis (di semua replika dalam set replika)

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  

Langkah berikutnya