توضّح هذه الصفحة كيفية استرداد معلومات تنفيذ طلب البحث عند تنفيذه.
استخدام ميزة "تفسير طلب البحث"
استخدِم ميزة "تفسير طلب البحث" لفهم كيفية تنفيذ طلبات البحث. يوفّر ذلك تفاصيل يمكنك استخدامها لتحسين طلبات البحث.
يمكنك استخدام ميزة Query Explain من خلال وحدة تحكّم Firebase أو باستخدام مكتبات عملاء خادم Firestore.وحدة التحكم
-
في وحدة تحكُّم Firebase، انتقِل إلى قواعد البيانات ومساحة التخزين > Firestore > البيانات > محرِّر طلبات البحث.
- نفِّذ طلب البحث الذي تريد الحصول على معلومات التنفيذ الخاصة به.
- انقر على علامة التبويب تفسير طلب البحث لعرض نتائج تحليل طلب البحث.
Node.js (المشرف)
import { field } from '@google-cloud/firestore/pipelines';
const q = db.pipeline() .collection('/users') .sort(field('status').ascending()) .limit(100); let results; try { results = await q.execute({ explainOptions: { mode: 'analyze', outputFormat: 'text' } }); } catch (error) { console.log(error); } const metrics = results?.explainStats?.text; console.log(metrics);
Java (مشرف)
Pipeline q = db.pipeline() .collection("/users") .sort(field("status").ascending()) .limit(100); PipelineExecuteOptions pipelineOpts = new PipelineExecuteOptions().withExplainOptions( new ExplainOptions().withExecutionMode(ExplainOptions.ExecutionMode.ANALYZE) ); Pipeline.Snapshot result = q.execute(pipelineOpts).get(); String metrics = null; if (result.getExplainStats() != null) { metrics = result.getExplainStats().getText(); System.out.println(metrics); }
شرح الأوضاع
استنادًا إلى ما تريد تصحيحه، يمكنك تنفيذ طلب بحث باستخدام ميزة "تفسير طلب البحث" في أوضاع مختلفة:
analyze: يخطّط لطلب البحث وينفّذه. تعرض معلومات المخطِّط وإحصاءات تنفيذ وقت التشغيل والمقاييس، إلى جانب النتائج العادية التي ينتجها طلب البحث.explain: يخطّط لطلب البحث، ولكن لا ينفّذه. تعرض معلومات المخطِّط ولكن بدون إحصاءات أو مقاييس أو نتائج لوقت التشغيل. ويُعدّ ذلك مفيدًا لتصحيح أخطاء سلوك طلب البحث بدون تنفيذ عمليات مكلفة.
stats: يخطّط لطلب البحث وينفّذه، ولكنّه لا يعرض النتائج. تعرض معلومات المخطِّط وإحصاءات تنفيذ وقت التشغيل والمقاييس.
التحليل
يتضمّن ناتج ميزة "تفسير طلب البحث" مكوّنَين رئيسيَّين، هما "الإحصاءات التلخيصية" و"شجرة التنفيذ". لنفترض أنّ طلب البحث هو:
db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)
إحصاءات الملخّص
يحتوي الجزء العلوي من الناتج الموضَّح على ملخّص لإحصاءات التنفيذ. استخدِم هذه الإحصاءات لتحديد ما إذا كان طلب البحث يتضمّن وقت استجابة أو تكلفة مرتفعَين. وتحتوي أيضًا على إحصاءات الذاكرة التي تتيح لك معرفة مدى اقتراب طلب البحث من حدود الذاكرة.
Execution:
results returned: 2
request peak memory usage: 20.25 KiB (20,736 B)
data bytes read: 148 B
entity row scanned: 2
Billing:
read units: 1
شجرة التنفيذ
تصف شجرة التنفيذ تنفيذ طلب البحث كسلسلة من العُقد. تسترجع العُقد السفلية (العُقد الطرفية) البيانات من طبقة التخزين التي تنتقل إلى أعلى الشجرة لإنشاء ردّ على طلب البحث.
للحصول على تفاصيل حول كل عقدة تنفيذ، يُرجى الرجوع إلى مرجع التنفيذ.
لمعرفة تفاصيل حول كيفية استخدام هذه المعلومات لتحسين طلبات البحث، يُرجى الاطّلاع على تحسين تنفيذ طلبات البحث.
في ما يلي مثال على شجرة تنفيذ:
Tree:
• Compute
| $out_1: map_set($record_1, "__name__", $__name___1, "__key__", unset)
| is query result: true
|
| Execution:
| records returned: 2
| latency: 5.96 ms (local <1 ms)
|
└── • Compute
| $__name___1: map_get($record_1, "__key__")
|
| Execution:
| records returned: 2
| latency: 5.88 ms (local <1 ms)
|
└── • MajorSort
| fields: [$v_1 ASC]
| output: [$record_1]
| limit: 100
|
| Execution:
| records returned: 2
| latency: 5.86 ms (local <1 ms)
| peak memory usage: 20.25 KiB (20,736 B)
|
└── • Compute
| $v_1: map_get($record_1, "status")
|
| Execution:
| records returned: 2
| latency: 5.23 ms (local <1 ms)
|
└── • TableScan
source: /users
order: UNDEFINED
properties: *
row range: (-∞..+∞)
output record: $record_1
variables: [$record_1]
Execution:
records returned: 2
latency: 4.68 ms
records scanned: 2
data bytes read: 148 B
الخطوات التالية
- لمزيد من المعلومات عن عُقد شجرة التنفيذ، يُرجى الاطّلاع على مرجع تنفيذ طلبات البحث.
- لمعرفة كيفية تحسين طلبات البحث، يُرجى الاطّلاع على تحسين تنفيذ طلبات البحث.