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 để tìm 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 Google Cloud Console hoặc lệnh explain.
Bảng điều khiển
Thực thi một truy vấn trong Trình chỉnh sửa truy vấn rồi mở thẻ Giải thích:
-
Trong Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).
- Trong danh sách cơ sở dữ liệu, hãy chọn một cơ sở dữ liệu Cloud Firestore. Google Cloud Console sẽ mở Trình khám phá Firestore cho cơ sở dữ liệu đó.
- Nhập một truy vấn vào trình chỉnh sửa truy vấn rồi nhấp vào Chạy.
-
Nhấp vào thẻ Explanation (Giải thích) để xem kết quả phân tích truy vấn.
MongoDB API
Tính năng Giải thích truy vấn trong API MongoDB được hỗ trợ thông qua lệnh explain mà bạn có thể dùng trong các công cụ như Mongo Shell và Compass.
Lệnh explain được hỗ trợ cùng với các lệnh aggregate, find, distinct và count, ví dụ:
db.collection.explain('executionStats').find(...)
Bạn cũng có thể sử dụng phương thức explain(), ví dụ:
db.collection.find({QUERY}).explain('executionStats')Hạn chế
Hãy lưu ý những điểm khác biệt và hạn chế sau:-
Query Explain không hỗ trợ các lệnh trả về con trỏ. Ví dụ: không hỗ trợ việc gọi lệnh giải thích bằng cách gọi trực tiếp lệnh sau:
db.collection.aggregate(..., explain: true)
Tính năng Giải thích truy vấn chỉ được hỗ trợ trên các lệnh
find,aggregate,count,distinct,update,deletevàfindAndModify.-
Tính năng Giải thích truy vấn hỗ trợ các chế độ chi tiết
executionStats,allPlansExecutionvàqueryPlanner.queryPlanner: Chỉ trả về kế hoạch thực thi mà không thực thi truy vấn,executionStatsvàallPlansExecution: Trả về kế hoạch thực thi cùng với số liệu thống kê về việc thanh toán, bộ nhớ và thực thi.
Nếu bạn không chỉ định chế độ chi tiết, thì shell sẽ mặc định là
queryPlanner. Để xem số liệu thống kê đầy đủ về quá trình thực thi, bạn phải chỉ định chế độ chi tiếtexecutionStatshoặcallPlansExecution.
Phân tích
Kết quả của tính năng 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.orders.aggregate(
[
{ "$match": { "user_id": 1234 } },
{ "$sort": { "date_placed": 1 } }
]
)
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: 35
query id: 7e7b37ea1a259d79
request peak memory usage: 45.56 KiB (46,656 B)
data bytes read: 24.58 KiB (25,175 B)
entity row scanned: 265
Billing:
read units: 7
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:
Execution:
results returned: 35
query id: 7e7b37ea1a259d79
request peak memory usage: 45.56 KiB (46,656 B)
data bytes read: 24.58 KiB (25,175 B)
entity row scanned: 265
Billing:
read units: 7
Tree:
• Compute
| $out_1: map_set($record_1, "__id__", $__id___1, "__key__", unset)
| is query result: true
|
| Execution:
| records returned: 35
| latency: 204.87 ms (local 7.64 ms)
|
└── • Compute
| $__id___1: _id($__key___2)
|
| Execution:
| records returned: 35
| latency: 197.23 ms (local 2.04 ms)
|
└── • MajorSort
| fields: [$v_5 ASC]
| output: [$__key___2, $record_1]
|
| Execution:
| records returned: 35
| latency: 195.20 ms (local 28.42 ms)
| peak memory usage: 45.56 KiB (46,656 B)
|
└── • Compute
| $v_5: offset($v_4, 0L)
|
| Execution:
| records returned: 35
| latency: 166.78 ms (local 14.84 ms)
|
└── • Compute
| $v_4: sortPaths(array($date_placed_1), [date_placed ASC])
|
| Execution:
| records returned: 35
| latency: 151.94 ms (local 5.43 ms)
|
└── • TableScan
source: **/orders
order: STABLE
filter: $eq($user_id_1, 1,234)
output bindings: {$__key___2=row().__key__, $date_placed_1=row().date_placed, $record_1=row[* - { __create_time__, __update_time__ }](), $user_id_1=row().user_id}
output: [$__key___2, $date_placed_1, $record_1]
Execution:
records returned: 35
latency: 146.50 ms
data bytes returned: 3.25 KiB (3,325 B)
post-filtered rows: 230
records scanned: 265
data bytes read: 24.58 KiB (25,175 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.