בדף הזה מוסבר איך לאחזר מידע על ביצוע שאילתות כשמריצים שאילתה.
שימוש בכלי Query Explain
אפשר להשתמש ב-Query Explain כדי להבין איך השאילתות מופעלות. הכלי מספק פרטים שאפשר להשתמש בהם כדי לבצע אופטימיזציה של השאילתות.
אפשר להשתמש ב-Query Explain במסוף Firebase:
- במסוף Firebase, עוברים אל Databases and Storage (מסדי נתונים ואחסון) > Firestore > Data (נתונים) > Query Editor (עורך שאילתות).
- מריצים את השאילתה שרוצים לקבל עליה מידע על הביצוע.
- לוחצים על הכרטיסייה Query Explain כדי לראות את פלט ניתוח השאילתה.
הסבר על מצבים
בהתאם למה שרוצים לנפות באגים, אפשר להריץ שאילתה באמצעות Query Explain במצבים שונים:
analyze: מתכנן ומבצע את השאילתה. הפונקציה מחזירה מידע על התכנון, נתונים סטטיסטיים ומדדים של זמן הריצה, לצד התוצאות הרגילות שהשאילתה מפיקה.
explain: מתכנן את השאילתה, אבל לא מריץ אותה. הפונקציה מחזירה את פרטי הכלי לתכנון, אבל לא נתונים סטטיסטיים, מדדים או תוצאות של זמן ריצה. האפשרות הזו שימושית כשרוצים לנפות באגים בהתנהגות של שאילתה בלי להפעיל פעולות יקרות.
ניתוח
הפלט של Query Explain מכיל שני רכיבים עיקריים – Summary Statistics ו-Execution Tree. לדוגמה, ניקח את השאילתה הבאה:
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
המאמרים הבאים
- מידע על הצמתים בעץ ההרצה זמין במאמר בנושא חומר עזר להרצת שאילתות.
- במאמר אופטימיזציה של ביצוע שאילתות מוסבר איך לבצע אופטימיזציה של השאילתות.