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

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

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

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

คุณใช้คำอธิบายการค้นหาผ่านคอนโซล Firebase หรือใช้ไลบรารีไคลเอ็นต์เซิร์ฟเวอร์ของ Firestore ได้

คอนโซล
  1. ในคอนโซล Firebase ให้ไปที่ ฐานข้อมูลและพื้นที่เก็บข้อมูล > Firestore > ข้อมูล > เครื่องมือแก้ไขการค้นหา

  2. เรียกใช้คําค้นหาที่คุณต้องการข้อมูลการดําเนินการ
  3. คลิกแท็บ Query Explain เพื่อดูเอาต์พุตการวิเคราะห์การค้นหา
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);
}

โหมดอธิบาย

คุณเรียกใช้การค้นหาด้วย Query Explain ได้หลายโหมด ขึ้นอยู่กับสิ่งที่คุณต้องการแก้ไขข้อบกพร่อง

  • analyze: วางแผนและดำเนินการค้นหา แสดงข้อมูลเครื่องมือวางแผนการคืนสินค้า สถิติและเมตริกการดำเนินการรันไทม์ พร้อมกับผลลัพธ์ปกติ ที่เกิดจากการค้นหา

  • explain: วางแผนการค้นหา แต่ไม่ได้ดำเนินการ แสดงข้อมูลเครื่องมือวางแผน แต่ไม่มีสถิติ เมตริก หรือผลลัพธ์รันไทม์ ซึ่งจะเป็นประโยชน์ ในการแก้ไขข้อบกพร่องของลักษณะการทำงานของคําค้นหาโดยไม่ต้องเรียกใช้การดําเนินการที่มีค่าใช้จ่ายสูง

การวิเคราะห์

เอาต์พุตของ Query Explain มีองค์ประกอบหลัก 2 อย่าง ได้แก่ สถิติสรุป และแผนผังการดำเนินการ ลองดูตัวอย่างคำค้นหานี้

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

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