اكتشاف الأخطاء وإصلاحها في استعلامات التشخيص
ينطبق على: NoSQL
MongoDB
كاساندرا
العفريت
جدول
في هذه المقالة، نغطي كيفية كتابة استعلامات بسيطة للمساعدة في استكشاف المشكلات المتعلقة بحساب Azure Cosmos DB وإصلاحها باستخدام سجلات التشخيص المرسلة إلى جداول AzureDiagnostics (القديمة) والجداول الخاصة بالموارد (معاينة ).
بالنسبة لجداول تشخيص Azure، تتم كتابة جميع البيانات في جدول واحد ويحتاج المستخدمون إلى تحديد الفئة التي يرغبون في الاستعلام عنها.
بالنسبة للجداول الخاصة بالموارد، تُكتب البيانات في جداول فردية لكل فئة من فئات المورد (غير متوفرة لواجهة برمجة تطبيقات الجدول). نوصي بهذا الوضع لأنه يجعل العمل مع البيانات أكثر سهولة، ويوفر إمكانية اكتشاف أفضل للمخططات، كما يحسن الأداء عبر زمن الوصول والاستعلام.
الاستعلامات الشائعة
فيما يلي قائمة باستعلامات استكشاف الأخطاء وإصلاحها الشائعة.
الاستعلام عن العمليات التي تستغرق أكثر من 3 مللي ثانية للتشغيل
ابحث عن العمليات التي لها مدة أكبر من 3 مللي ثانية.
AzureDiagnostics
| where toint(duration_s) > 3 and ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| summarize count() by clientIpAddress_s, TimeGenerated
الاستعلام عن وكلاء المستخدمين الذين يقومون بتشغيل العمليات
ابحث عن وكلاء المستخدمين المقترنين بكل عملية.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| summarize count() by OperationName, userAgent_s
الاستعلام عن العمليات طويلة الأمد
ابحث عن العمليات التي تم تشغيلها لفترة طويلة عن طريق ربط وقت التشغيل الخاص بها بفواصل زمنية مدتها خمس ثوان.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| project TimeGenerated , duration_s
| summarize count() by bin(TimeGenerated, 5s)
| render timechart
الحصول على إحصائيات مفتاح القسم لتقييم الانحراف عبر أهم ثلاثة أقسام لحساب قاعدة بيانات
قياس الانحراف عن طريق الحصول على إحصائيات شائعة للأقسام المادية.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| project SubscriptionId, regionName_s, databaseName_s, collectionName_s, partitionKey_s, sizeKb_d, ResourceId
الحصول على رسوم الطلب للاستعلامات باهظة الثمن
قياس رسوم الطلب (في وحدات الطلب) لأكبر الاستعلامات.
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
العثور على العمليات التي تأخذ معظم وحدات الطلب/ الثانية
فرز العمليات حسب مقدار وحدات الطلب/ الثانية التي تستخدمها.
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)
الحصول على جميع الاستعلامات التي تستهلك أكثر من 100 RU/s
ابحث عن الاستعلامات التي تستهلك وحدات الطلب/ الثانية أكثر من مقدار الأساس.
ينضم هذا الاستعلام مع البيانات من DataPlaneRequests
و 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
الحصول على رسوم الطلب ومدة تنفيذ استعلام
احصل على إحصائيات في كل من رسوم الطلب والمدة لاستعلام معين.
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)
الحصول على التوزيع لعمليات مختلفة
تجميع العمليات حسب توزيع الموارد.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h)
| summarize count = count() by OperationName, requestResourceType_s, bin(TimeGenerated, 1h)
الحصول على الحد الأقصى لمعدل النقل الذي استهلكه القسم
احصل على الحد الأقصى لمعدل النقل لقسم فعلي.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h)
| summarize max(requestCharge_s) by bin(TimeGenerated, 1h), partitionId_g
الحصول على معلومات حول استهلاك RU/s لمفاتيح الأقسام في الثانية
قياس استهلاك RU/s على أساس كل ثانية لكل مفتاح قسم.
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
الحصول على رسوم الطلب لمفتاح قسم معين
قياس رسوم الطلب لكل مفتاح قسم.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption"
| where parse_json(partitionKey_s)[0] == "2"
الحصول على مفاتيح الأقسام العلوية مع استهلاك معظم وحدات الطلب/ الثانية في فترة معينة
فرز مفاتيح الأقسام استنادا إلى استهلاك وحدة الطلب ضمن إطار زمني.
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
الحصول على سجلات لمفاتيح الأقسام التي يزيد حجم تخزينها عن 8 غيغابايت
ابحث عن سجلات لمفاتيح الأقسام التي تمت تصفيتها حسب حجم التخزين لكل مفتاح قسم.
AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| where todouble(sizeKb_d) > 800000
الحصول على زمن انتقال P99 أو P50 للعمليات أو رسوم الطلب أو طول الاستجابة
قياس الأداء من أجل؛ زمن انتقال العملية واستخدام RU/s وطول الاستجابة.
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)
الحصول على سجلات وحدة التحكم
احصل على مستوى التحكم لفترة طويلة باستخدام ControlPlaneRequests
.
تلميح
تذكر تشغيل العلامة الموضحة في تعطيل الوصول إلى كتابة بيانات التعريف المستندة إلى المفتاح، وتنفيذ العمليات باستخدام Azure PowerShell أو Azure CLI أو Azure Resource Manager.
AzureDiagnostics
| where Category =="ControlPlaneRequests"
| summarize by OperationName
الخطوات التالية
- لمزيد من المعلومات حول كيفية إنشاء إعدادات التشخيص ل Azure Cosmos DB، راجع إنشاء إعدادات التشخيص.
- للحصول على معلومات مفصلة حول كيفية إنشاء إعداد تشخيص باستخدام مدخل Microsoft Azure أو CLI أو PowerShell، راجع إنشاء إعداد تشخيص لتجميع سجلات النظام الأساسي والمقاييس في Azure.