วิเคราะห์การดำเนินการค้นหาด้วย Query Explain

เกี่ยวข้องกับ Cloud Firestore Enterprise Edition เท่านั้น

หน้านี้อธิบายวิธีดึงข้อมูลการดำเนินการค้นหาเมื่อคุณดำเนินการค้นหา

ใช้คำอธิบายการค้นหา

คุณสามารถใช้คำอธิบายการค้นหาเพื่อทำความเข้าใจวิธีดำเนินการกับการค้นหา ซึ่งจะให้รายละเอียดที่คุณใช้เพิ่มประสิทธิภาพการค้นหาได้

คุณสามารถใช้คำอธิบายการค้นหาผ่านคอนโซล Google Cloud หรือคำสั่ง explain ได้

คอนโซล

เรียกใช้คำค้นหาในตัวแก้ไขคำค้นหา แล้วเปิดแท็บคำอธิบาย

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล

    ไปที่ฐานข้อมูล

  2. เลือกฐานข้อมูล Cloud Firestore ที่เข้ากันได้กับ MongoDB จากรายการฐานข้อมูล Google Cloud Console จะเปิด Firestore Explorer สำหรับฐานข้อมูลนั้น
  3. ป้อนคำค้นหาในตัวแก้ไขคำค้นหา แล้วคลิกเรียกใช้
  4. คลิกแท็บคำอธิบายเพื่อดูเอาต์พุตการวิเคราะห์การค้นหา

    แท็บอธิบายคำค้นหาในคอนโซล
MongoDB API

ระบบรองรับการค้นหา 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 มีองค์ประกอบหลัก 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

ขั้นตอนถัดไป