فقط مربوط به Cloud Firestore Enterprise edition. |
این صفحه نحوه بازیابی اطلاعات اجرای پرس و جو را هنگام اجرای پرس و جو توضیح می دهد.
از Query Explin استفاده کنید
می توانید از Query Explain برای درک نحوه اجرای پرس و جوهای خود استفاده کنید. این جزئیاتی را ارائه می دهد که می توانید از آنها برای بهینه سازی درخواست های خود استفاده کنید.
می توانید از Query Explain از طریق کنسول Google Cloud یا دستور explain
استفاده کنید.
کنسول
یک پرس و جو را در ویرایشگر Query اجرا کنید و تب توضیح را باز کنید:
در کنسول Google Cloud، به صفحه پایگاه داده بروید.
- از لیست پایگاههای داده، یک پایگاهداده Cloud Firestore با سازگاری MongoDB را انتخاب کنید. کنسول Google Cloud، Firestore Explorer را برای آن پایگاه داده باز می کند.
- یک درخواست را در ویرایشگر پرس و جو وارد کنید و روی Run کلیک کنید.
برای مشاهده خروجی تحلیل پرس و جو، روی تب توضیح کلیک کنید.
MongoDB API
Query Explain در MongoDB API از طریق دستور explain
پشتیبانی می شود که می توانید از آن در ابزارهایی مانند Mongo Shell و Compass استفاده کنید.
دستور explain
با دستورات aggregate
، find
، distinct
و count
پشتیبانی می شود، به عنوان مثال:
db.collection.explain.find(...)
همچنین می توانید از متد explain()
استفاده کنید، برای مثال:
db.collection.find({QUERY}).explain()
محدودیت ها
به محدودیت ها و تفاوت های زیر توجه کنید:Query Explain از دستوراتی که مکان نما را برمی گرداند پشتیبانی نمی کند. برای مثال، فراخوانی توضیح با فراخوانی مستقیم دستور زیر پشتیبانی نمیشود:
db.collection.aggregate(..., explain: true)
Query Explain فقط در دستورات
find
،aggregate
،count
وdistinct
پشتیبانی میشود.گزینههای
Verbosity
وComment
Query Explain از طریق MongoDB API پشتیبانی نمیشوند. رفتار با گزینهexecutionStats
مطابقت دارد. در صورت ارائه گزینههایallPlansExecution
وqueryPlanner
نادیده گرفته میشوند.
تجزیه و تحلیل
خروجی 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
بعدش چی
- برای آشنایی با گره های درخت اجرا، به مرجع اجرای Query مراجعه کنید.
- برای یادگیری نحوه بهینه سازی پرس و جوها، به بهینه سازی اجرای پرس و جو مراجعه کنید.