Memecahkan masalah dengan kueri diagnostik

BERLAKU UNTUK: Nosql MongoDB Cassandra Gremlin Meja

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

Untuk tabel Diagnostik Azure, semua data ditulis ke dalam satu tabel tunggal dan pengguna perlu menentukan kategori mana yang ingin mereka kueri.

Untuk tabel khusus sumber daya, data ditulis ke dalam tabel individual untuk setiap kategori sumber daya (tidak tersedia untuk API tabel). Kami merekomendasikan mode ini karena membuatnya jauh lebih mudah untuk bekerja dengan data, memberikan penemuan skema yang lebih baik, dan meningkatkan kinerja di latensi pencahayaan dan waktu kueri.

Kueri umum

Berikut adalah daftar kueri pemecahan masalah umum.

Kueri untuk operasi yang membutuhkan waktu lebih dari 3 milidetik untuk dijalankan

Temukan operasi yang memiliki durasi lebih besar dari 3 milidetik.

AzureDiagnostics 
| where toint(duration_s) > 3 and ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize count() by clientIpAddress_s, TimeGenerated

Kueri untuk agen pengguna yang menjalankan operasi

Temukan agen pengguna yang terkait dengan setiap operasi.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize count() by OperationName, userAgent_s

Kueri untuk operasi jangka panjang

Temukan operasi yang berjalan untuk waktu yang lama dengan mengikat runtime mereka ke dalam interval lima detik.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| project TimeGenerated , duration_s 
| summarize count() by bin(TimeGenerated, 5s)
| render timechart

Mendapatkan statistik kunci partisi untuk mengevaluasi kecondongan di tiga partisi teratas untuk akun database

Ukur condong dengan mendapatkan statistik umum untuk partisi fisik.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics" 
| project SubscriptionId, regionName_s, databaseName_s, collectionName_s, partitionKey_s, sizeKb_d, ResourceId 

Dapatkan biaya permintaan untuk kueri mahal

Ukur biaya permintaan (dalam RU) untuk kueri terbesar.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" and todouble(requestCharge_s) > 10.0
| project activityId_g, requestCharge_s
| join kind= inner (
AzureDiagnostics
| where ResourceProvider =="MICROSOFT.DOCUMENTDB" and Category == "QueryRuntimeStatistics"
| project activityId_g, querytext_s
) on $left.activityId_g == $right.activityId_g
| order by requestCharge_s desc
| limit 100

Temukan operasi mana yang mengambil sebagian besar RU/dtk

Urutkan operasi berdasarkan jumlah RU/s yang mereka gunakan.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize max(responseLength_s), max(requestLength_s), max(requestCharge_s), count = count() by OperationName, requestResourceType_s, userAgent_s, collectionRid_s, bin(TimeGenerated, 1h)

Mendapatkan semua kueri yang mengkonsumsi lebih dari 100 RU/dtk

Temukan kueri yang mengonsumsi lebih banyak RU/dtk daripada jumlah dasar.

Kueri ini bergabung dengan data dari DataPlaneRequests dan QueryRunTimeStatistics.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" and todouble(requestCharge_s) > 100.0
| project activityId_g, requestCharge_s
| join kind= inner (
        AzureDiagnostics
        | where ResourceProvider =="MICROSOFT.DOCUMENTDB" and Category == "QueryRuntimeStatistics"
        | project activityId_g, querytext_s
) on $left.activityId_g == $right.activityId_g
| order by requestCharge_s desc
| limit 100

Mendapatkan biaya permintaan dan durasi eksekusi kueri

Dapatkan statistik dalam biaya permintaan dan durasi untuk kueri tertentu.

AzureDiagnostics
| where TimeGenerated >= ago(24hr)
| where Category == "QueryRuntimeStatistics"
| join (
AzureDiagnostics
| where TimeGenerated >= ago(24hr)
| where Category == "DataPlaneRequests"
) on $left.activityId_g == $right.activityId_g
| project databasename_s, collectionname_s, OperationName1 , querytext_s,requestCharge_s1, duration_s1, bin(TimeGenerated, 1min)

Mendapatkan distribusi untuk operasi yang berbeda

Operasi grup menurut distribusi sumber daya.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize count = count()  by OperationName, requestResourceType_s, bin(TimeGenerated, 1h) 

Dapatkan throughput maksimum yang telah dikonsumsi partisi

Dapatkan throughput maksimum untuk partisi fisik.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize max(requestCharge_s) by bin(TimeGenerated, 1h), partitionId_g

Mendapatkan informasi tentang konsumsi RU/dtk kunci partisi per detik

Ukur konsumsi RU/dtk per detik per kunci partisi.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| summarize total = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, partitionKey_s, TimeGenerated 
| order by TimeGenerated asc 

Mendapatkan biaya permintaan untuk kunci partisi tertentu

Mengukur biaya permintaan per kunci partisi.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| where parse_json(partitionKey_s)[0] == "2" 

Dapatkan kunci partisi teratas dengan sebagian besar RU/dtk yang dikonsumsi dalam periode tertentu

Urutkan kunci partisi berdasarkan konsumsi unit permintaan dalam jendela waktu.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| where TimeGenerated >= datetime("11/26/2019, 11:20:00.000 PM") and TimeGenerated <= datetime("11/26/2019, 11:30:00.000 PM") 
| summarize total = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, partitionKey_s 
| order by total desc

Mendapatkan log untuk kunci partisi yang ukuran penyimpanannya lebih besar dari 8 GB

Temukan log untuk kunci partisi yang difilter berdasarkan ukuran penyimpanan per kunci partisi.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| where todouble(sizeKb_d) > 800000

Dapatkan latensi P99 atau P50 untuk operasi, biaya permintaan, atau lamanya respons

Mengukur performa untuk; latensi operasi, penggunaan RU/dtk, dan panjang respons.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2d)
| summarize percentile(todouble(responseLength_s), 50), percentile(todouble(responseLength_s), 99), max(responseLength_s), percentile(todouble(requestCharge_s), 50), percentile(todouble(requestCharge_s), 99), max(requestCharge_s), percentile(todouble(duration_s), 50), percentile(todouble(duration_s), 99), max(duration_s), count() by OperationName, requestResourceType_s, userAgent_s, collectionRid_s, bin(TimeGenerated, 1h)

Mendapatkan log sarana kontrol

Dapatkan sarana kontrol lama menggunakan ControlPlaneRequests.

Tip

Ingatlah untuk mengaktifkan bendera yang dijelaskan dalam Menonaktifkan akses tulis metadata berbasis kunci, dan jalankan operasi dengan menggunakan Azure PowerShell, Azure CLI, atau Azure Resource Manager.

AzureDiagnostics 
| where Category =="ControlPlaneRequests"
| summarize by OperationName 

Langkah berikutnya