| เกี่ยวข้องกับ Cloud Firestore รุ่น Enterprise เท่านั้น |
หน้านี้อธิบายวิธีดึงข้อมูลการดำเนินการค้นหาเมื่อคุณดำเนินการค้นหา
ใช้คำอธิบายการค้นหา
คุณสามารถใช้คำอธิบายการค้นหาเพื่อทำความเข้าใจวิธีดำเนินการกับการค้นหา ซึ่งจะให้รายละเอียดที่คุณใช้เพิ่มประสิทธิภาพการค้นหาได้
คุณสามารถใช้คำอธิบายการค้นหาผ่านคอนโซล Google Cloud หรือคำสั่ง explain ได้
คอนโซล
เรียกใช้คำค้นหาในตัวแก้ไขคำค้นหา แล้วเปิดแท็บคำอธิบาย
-
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
- เลือกฐานข้อมูล Cloud Firestore ที่เข้ากันได้กับ MongoDB จากรายการฐานข้อมูล Google Cloud Console จะเปิด Firestore Explorer สำหรับฐานข้อมูลนั้น
- ป้อนคำค้นหาในตัวแก้ไขคำค้นหา แล้วคลิกเรียกใช้
-
คลิกแท็บคำอธิบายเพื่อดูเอาต์พุตการวิเคราะห์การค้นหา
MongoDB API
ระบบรองรับการค้นหา Explain ใน MongoDB API ผ่านคำสั่ง
explain
ซึ่งคุณใช้ได้ในเครื่องมือต่างๆ เช่น Mongo Shell และ Compass
คำสั่ง explain ใช้ได้กับคำสั่ง aggregate
find, distinct และ count
เช่น
db.collection.explain('executionStats').find(...)
คุณยังใช้วิธี explain() ได้ด้วย เช่น
db.collection.find({QUERY}).explain('executionStats')ข้อจำกัด
โปรดทราบข้อจำกัดและความแตกต่างต่อไปนี้-
Query Explain ไม่รองรับคำสั่งที่แสดงผลเคอร์เซอร์ ตัวอย่างเช่น ระบบไม่รองรับการเรียกใช้คำอธิบายโดยการเรียกใช้คำสั่งต่อไปนี้โดยตรง
db.collection.aggregate(..., explain: true)
Query Explain รองรับเฉพาะคำสั่ง
find,aggregate,countและdistinct-
ตัวเลือก
VerbosityและCommentของ Query Explain ไม่รองรับผ่าน MongoDB API ลักษณะการทำงานจะตรงกับตัวเลือกexecutionStatsระบบจะไม่สนใจตัวเลือกallPlansExecutionและqueryPlannerหากมีการระบุหากไม่ได้ระบุระดับรายละเอียด Shell จะใช้
queryPlannerverbosity และกรองสถิติการดำเนินการออก คุณต้องใช้executionStatsหรือallPlansExecutionความละเอียด เพื่อดูเอาต์พุตทั้งหมด
การวิเคราะห์
เอาต์พุตของคำอธิบายการค้นหามีองค์ประกอบหลัก 2 อย่าง ได้แก่ สถิติสรุปและแผนผังการดำเนินการ ลองดูตัวอย่างคำค้นหานี้
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
ขั้นตอนถัดไป
- ดูข้อมูลเกี่ยวกับโหนดแผนการดำเนินการได้ที่ข้อมูลอ้างอิงการดำเนินการของคําค้นหา
- ดูวิธีเพิ่มประสิทธิภาพการค้นหาได้ที่เพิ่มประสิทธิภาพการดำเนินการค้นหา