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