تحليل تنفيذ طلب البحث باستخدام Query Explain

ينطبق ذلك على إصدار Cloud Firestore Enterprise فقط.

توضّح هذه الصفحة كيفية استرداد معلومات تنفيذ طلب البحث عند تنفيذ طلب بحث.

استخدام "شرح الطلب"

يمكنك استخدام Query Explain لفهم كيفية تنفيذ طلبات البحث. يقدّم هذا القسم تفاصيل يمكنك استخدامها من أجل تحسين طلبات البحث.

يمكنك استخدام "شرح الاستعلام" من خلال وحدة تحكّم Google Cloud أو الأمر explain.

وحدة التحكم

نفِّذ طلب بحث في "محرّر طلبات البحث" وافتح علامة التبويب التفسير:

  1. في Google Cloud Console، انتقِل إلى صفحة قواعد البيانات.

    الانتقال إلى "قواعد البيانات"

  2. من قائمة قواعد البيانات، اختَر قاعدة بيانات Cloud Firestore متوافقة مع MongoDB. تفتح "وحدة تحكّم Google Cloud" مستكشف Firestore لقاعدة البيانات هذه.
  3. أدخِل طلب بحث في محرِّر طلب البحث وانقر على تنفيذ.
  4. انقر على علامة التبويب التفسير لعرض ناتج تحليل طلب البحث.

    علامة التبويب "شرح الاستعلام" في وحدة التحكّم
MongoDB API

تتوفّر ميزة "شرح الاستعلام" في MongoDB API من خلال الأمر explain الذي يمكنك استخدامه في أدوات مثل Mongo Shell وCompass.

يتوافق الأمر explain مع الأوامر aggregate وfind وdistinct وcount، على سبيل المثال:

db.collection.explain('executionStats').find(...)

يمكنك أيضًا استخدام طريقة explain()، على سبيل المثال:

db.collection.find({QUERY}).explain('executionStats')
القيود
يُرجى مراعاة القيود والاختلافات التالية:
  • لا تتيح ميزة "شرح طلب البحث" الأوامر التي تعرض مؤشرًا. على سبيل المثال، لا يمكن استدعاء explain من خلال تنفيذ الأمر التالي مباشرةً:

    db.collection.aggregate(..., explain: true)
  • لا تتوافق ميزة "شرح الاستعلام" إلا مع الأوامر find وaggregate وcount وdistinct.

  • لا تتوافق الخيارات Verbosity وComment في Query Explain مع واجهة MongoDB API. يتطابق السلوك مع الخيار executionStats. سيتم تجاهل الخيارَين allPlansExecution وqueryPlanner في حال توفيرهما.

    في حال عدم توفير مستوى تفصيل، تستخدم الصدفة queryPlannerمستوى التفصيل وتستبعد إحصاءات التنفيذ. يجب استخدام مستوى التفاصيل executionStats أو allPlansExecution للاطّلاع على الناتج الكامل.

التحليل

يحتوي ناتج Query Explain على مكوّنَين رئيسيَّين، هما "الإحصاءات الموجزة" و"شجرة التنفيذ". لِنأخذ الاستعلام التالي كمثال:

db.order.aggregate(
 [
   { "$match": { "user_id": 1234 } },
   { "$sort": { "date_placed": 1 } }
 ]
)

الإحصاءات الموجزة

يحتوي الجزء العلوي من الناتج الذي تمّت فيه عملية الشرح على ملخّص لإحصاءات التنفيذ. استخدِم هذه الإحصاءات لتحديد ما إذا كان طلب البحث يتضمّن وقت استجابة أو تكلفة مرتفعَين. وتتضمّن أيضًا إحصاءات الذاكرة التي تتيح لك معرفة مدى اقتراب طلب البحث من حدود الذاكرة.

Billing Metrics:
read units: 1

Execution Metrics:
request peak memory usage: 4.00 KiB (4,096 B)
results returned: 1

شجرة التنفيذ

يصف شجرة التنفيذ تنفيذ طلب البحث كسلسلة من العُقد. تسترجع العُقد السفلى (عُقد الأوراق) البيانات من طبقة التخزين التي تتنقّل صعودًا في الشجرة لإنشاء ردّ على طلب البحث.

للحصول على تفاصيل حول كل عقدة تنفيذ، يُرجى الرجوع إلى مرجع التنفيذ.

للحصول على تفاصيل حول كيفية استخدام هذه المعلومات لتحسين طلبات البحث، راجِع تحسين تنفيذ طلب البحث.

في ما يلي مثال على شجرة التنفيذ:

• Compute
|  $out_1: map_set($record_1, "__id__", $__id___1, "__key__", $__key___1, "__row_id__", $__row_id___1, "__$0__", $__$0___2)
|  is query result: true
|
|  Execution:
|   records returned: 1
|
└── • Compute
    |  $__$0___2: UNSET
    |
    |  Execution:
    |   records returned: 1
    |
    └── • Compute
        |  $__key___1: UNSET
        |  $__row_id___1: UNSET
        |
        |  Execution:
        |   records returned: 1
        |
        └── • Compute
            |  $__id___1: _id($record_1.__key__)
            |
            |  Execution:
            |   records returned: 1
            |
            └── • MajorSort
                |  fields: [$v_5 ASC]
                |  output: [$record_1]
                |
                |  Execution:
                |   records returned: 1
                |   peak memory usage: 4.00 KiB (4,096 B)
                |
                └── • Compute
                    |  $v_5: array_get($v_4, 0L)
                    |
                    |  Execution:
                    |   records returned: 1
                    |
                    └── • Compute
                        |  $v_4: sortPaths(array($record_1.date_placed), [date_placed ASC])
                        |
                        |  Execution:
                        |   records returned: 1
                        |
                        └── • Filter
                            |  expression: $eq($user_id_1, 1,234)
                            |
                            |  Execution:
                            |   records returned: 1
                            |
                            └── • TableScan
                                   source: **/my_collection
                                   order: STABLE
                                   properties: * - { __create_time__, __update_time__ }
                                   output record: $record_1
                                   output bindings: {$user_id_1=user_id}
                                   variables: [$record_1, $user_id_1]

                                   Execution:
                                    records returned: 1
                                    records scanned: 1

الخطوات التالية