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