Phân tích quá trình thực thi truy vấn bằng Query Explain

Trang này mô tả cách truy xuất thông tin thực thi truy vấn khi bạn thực thi một truy vấn.

Sử dụng tính năng Giải thích truy vấn

Bạn có thể sử dụng tính năng Giải thích truy vấn để hiểu cách thực thi các truy vấn. Tính năng này cung cấp thông tin chi tiết mà bạn có thể dùng để tối ưu hoá các truy vấn.

Bạn có thể sử dụng tính năng Giải thích truy vấn trong bảng điều khiển của Firebase:

  • Trong bảng điều khiển Firebase, hãy chuyển đến phần Cơ sở dữ liệu và bộ nhớ > Firestore > Dữ liệu > Trình chỉnh sửa truy vấn.
  • Chạy truy vấn mà bạn muốn xem thông tin thực thi.
  • Nhấp vào thẻ Giải thích truy vấn để xem kết quả phân tích truy vấn.

Các chế độ giải thích

Tuỳ thuộc vào nội dung bạn muốn gỡ lỗi, bạn có thể thực thi một truy vấn bằng tính năng Giải thích truy vấn ở nhiều chế độ:

  • analyze: Lập kế hoạch và thực thi truy vấn. Trả về thông tin về công cụ lập kế hoạch, các chỉ số và số liệu thống kê về quá trình thực thi thời gian chạy, cùng với kết quả thông thường do truy vấn tạo ra.

  • explain: Lập kế hoạch cho truy vấn nhưng không thực thi truy vấn đó. Trả về thông tin về công cụ lập kế hoạch nhưng không có số liệu thống kê, chỉ số hoặc kết quả về thời gian chạy. Chế độ này hữu ích cho việc gỡ lỗi hành vi của một truy vấn mà không cần chạy các thao tác tốn kém.

Phân tích

Kết quả của tính năng Giải thích truy vấn chứa 2 thành phần chính: Số liệu thống kê tóm tắt và Cây thực thi. Hãy xem truy vấn này làm ví dụ:

db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)

Số liệu thống kê tóm tắt

Phần đầu của kết quả giải thích chứa thông tin tóm tắt về số liệu thống kê thực thi. Hãy sử dụng các số liệu thống kê này để xác định xem một truy vấn có độ trễ hoặc chi phí cao hay không. Phần này cũng chứa số liệu thống kê về bộ nhớ để cho bạn biết truy vấn của bạn gần với giới hạn bộ nhớ đến mức nào.

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

Cây thực thi

Cây thực thi mô tả quá trình thực thi truy vấn dưới dạng một chuỗi các nút. Các nút dưới cùng (nút lá) truy xuất dữ liệu từ lớp bộ nhớ, lớp này sẽ di chuyển lên cây để tạo phản hồi truy vấn.

Để biết thông tin chi tiết về từng nút thực thi, hãy tham khảo tài liệu tham khảo về Thực thi.

Để biết thông tin chi tiết về cách sử dụng thông tin này để tối ưu hoá các truy vấn, hãy xem bài viết Tối ưu hoá quá trình thực thi truy vấn.

Sau đây là ví dụ về cây thực thi:

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

Bước tiếp theo