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
Sử dụng tính năng Giải thích truy vấn để hiểu cách thực thi truy vấn. Thông tin này cung cấp thông tin chi tiết mà bạn có thể sử dụng để tối ưu hoá truy vấn của mình.
Bạn có thể sử dụng tính năng Giải thích truy vấn thông qua bảng điều khiển của Firebase hoặc sử dụng thư viện ứng dụng máy chủ Firestore.Bảng điều khiển
-
Trong bảng điều khiển của Firebase, hãy chuyển đế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 biết thông tin thực thi.
- Nhấp vào thẻ Query Explain (Giải thích truy vấn) để xem kết quả phân tích truy vấn.
Node.js (Quản trị viên)
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 (Quản trị viên)
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); }
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 của trình lập kế hoạch, số liệu thống kê về quá trình thực thi trong thời gian chạy và các chỉ số, 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 của trình 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. Điều này rất hữu ích để 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.stats: Lập kế hoạch và thực thi truy vấn, nhưng không trả về kết quả. Trả về thông tin của trình lập kế hoạch, số liệu thống kê về việc thực thi trong thời gian chạy và các chỉ số.
Phân tích
Kết quả của Giải thích truy vấn bao gồm hai thành phần chính: Thống kê tóm tắt và Cây thực thi. Hãy xem xét 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. 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. Bảng 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 đạt đến giới hạn bộ nhớ như thế 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 lưu trữ, sau đó truyền dữ liệu 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ề việc 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á truy vấn, hãy xem phần Tối ưu hoá việc 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
- Để tìm hiểu về các nút cây thực thi, hãy xem Tài liệu tham khảo về việc thực thi truy vấn.
- Để tìm hiểu cách tối ưu hoá truy vấn, hãy xem bài viết Tối ưu hoá việc thực thi truy vấn.