בדף הזה מוסבר איך לאחזר מידע על ביצוע שאילתות כשמריצים שאילתה.
שימוש ב-Query Explain
אתם יכולים להשתמש ב-Query Explain כדי להבין איך השאילתות שלכם מבוצעות. הפרטים האלה יכולים לעזור לכם לבצע אופטימיזציה של השאילתות.
אפשר להשתמש ב-Query Explain דרך מסוף Google Cloud או באמצעות הפקודה explain.
המסוף
מריצים שאילתה בעורך השאילתות ופותחים את הכרטיסייה הסבר:
-
נכנסים לדף Databases במסוף Google Cloud.
- ברשימת מסדי הנתונים, בוחרים מסד נתונים של Cloud Firestore. ייפתח מסוף Google Cloud עם Firestore Explorer של מסד הנתונים הזה.
- מזינים שאילתה בעורך השאילתות ולוחצים על הפעלה.
-
לוחצים על הכרטיסייה הסבר כדי לראות את פלט ניתוח השאילתה.
MongoDB API
הפקודה explain תומכת בהסבר על שאילתות ב-MongoDB API. אפשר להשתמש בפקודה הזו בכלים כמו Mongo Shell ו-Compass.
הפקודה explain נתמכת בפקודות aggregate, find, distinct ו-count, למשל:
db.collection.explain('executionStats').find(...)
אפשר גם להשתמש בשיטה explain(), לדוגמה:
db.collection.find({QUERY}).explain('executionStats')מגבלות
חשוב לשים לב למגבלות ולשינויים הבאים:-
התכונה 'הסבר על שאילתה' לא תומכת בפקודות שמחזירות סמן. לדוגמה, אי אפשר להפעיל את explain על ידי הפעלת הפקודה הבאה ישירות:
db.collection.aggregate(..., explain: true)
התכונה 'הסבר על שאילתה' נתמכת רק בפקודות
find,aggregate,count,distinct,update,deleteו-findAndModify.-
הכלי Query Explain תומך במצבי הפירוט
executionStats,allPlansExecutionו-queryPlanner.-
queryPlanner: מחזיר רק את תוכנית ההרצה, בלי להריץ את השאילתה. -
executionStatsו-allPlansExecution: מחזירה את תוכנית ההפעלה יחד עם נתוני חיוב, זיכרון וביצוע.
אם לא מציינים מצב מפורט, ברירת המחדל של המעטפת היא
queryPlanner. כדי לראות את נתוני הביצוע המלאים, צריך לציין את מצב הפירוטexecutionStatsאוallPlansExecution. -
ניתוח
הפלט של Query Explain מכיל שני רכיבים עיקריים: Summary Statistics (סיכום נתונים סטטיסטיים) ו-Execution Tree (עץ הביצוע). לדוגמה, השאילתה הבאה:
db.orders.aggregate(
[
{ "$match": { "user_id": 1234 } },
{ "$sort": { "date_placed": 1 } }
]
)
סיכום נתונים סטטיסטיים
בחלק העליון של הפלט המוסבר מופיע סיכום של נתוני הביצוע. אפשר להשתמש בנתונים הסטטיסטיים האלה כדי לקבוע אם לשאילתה יש חביון או עלות גבוהים. הוא כולל גם נתוני זיכרון שמאפשרים לכם לדעת כמה קרובה השאילתה שלכם למגבלות הזיכרון.
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
עץ הביצוע
עץ ההרצה מתאר את הרצת השאילתה כסדרה של צמתים. הצמתים התחתונים (צמתי עלים) מאחזרים נתונים משכבת האחסון, והנתונים עוברים במעלה העץ כדי ליצור תשובה לשאילתה.
פרטים על כל צומת ביצוע זמינים במאמר חומר עזר בנושא ביצוע.
לפרטים על אופן השימוש במידע הזה כדי לבצע אופטימיזציה של השאילתות, אפשר לעיין במאמר אופטימיזציה של ביצוע שאילתות.
דוגמה לעץ ביצוע:
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)
המאמרים הבאים
- מידע על הצמתים בעץ ההרצה זמין בחומר העזר בנושא הרצת שאילתות.
- במאמר אופטימיזציה של ביצוע שאילתות מוסבר איך לבצע אופטימיזציה של השאילתות.