इस पेज पर बताया गया है कि क्वेरी को लागू करने पर, उससे जुड़ी जानकारी कैसे हासिल की जाती है.
क्वेरी एक्सप्लेन का इस्तेमाल करना
Query Explain का इस्तेमाल करके जानें कि आपकी क्वेरी कैसे लागू की जा रही हैं. इससे आपको ऐसी जानकारी मिलती है जिसका इस्तेमाल करके, अपनी क्वेरी को ऑप्टिमाइज़ किया जा सकता है.
Query Explain का इस्तेमाल, Firebase कंसोल या Firestore सर्वर क्लाइंट लाइब्रेरी की मदद से किया जा सकता है.कंसोल
-
Firebase कंसोल में, डेटाबेस और स्टोरेज > Firestore > डेटा > क्वेरी एडिटर पर जाएं.
- वह क्वेरी चलाएं जिसके लिए आपको क्वेरी चलाने की जानकारी चाहिए.
- क्वेरी के विश्लेषण का आउटपुट देखने के लिए, क्वेरी की जानकारी टैब पर क्लिक करें.
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); }
मोड के बारे में जानकारी
आपको जिस समस्या को डीबग करना है उसके आधार पर, क्वेरी एक्सप्लेन की मदद से क्वेरी को अलग-अलग मोड में चलाया जा सकता है:
analyze: क्वेरी को प्लान और लागू करता है. यह फ़ंक्शन, क्वेरी से मिलने वाले सामान्य नतीजों के साथ-साथ प्लानर की जानकारी, रनटाइम के दौरान प्रोसेस होने के आंकड़े, और मेट्रिक दिखाता है.explain: क्वेरी को प्लान करता है, लेकिन उसे लागू नहीं करता. यह प्लानर की जानकारी दिखाता है. हालांकि, इसमें रनटाइम के आंकड़े, मेट्रिक या नतीजे नहीं दिखते. यह क्वेरी के व्यवहार को डीबग करने के लिए उपयोगी है. इसके लिए, आपको महंगे ऑपरेशन चलाने की ज़रूरत नहीं है.stats: यह क्वेरी को प्लान और लागू करता है, लेकिन नतीजे नहीं दिखाता. यह प्लानर की जानकारी, रनटाइम के दौरान प्रोसेस होने के आंकड़े, और मेट्रिक दिखाता है.
विश्लेषण
Query Explain के आउटपुट में दो मुख्य कॉम्पोनेंट होते हैं - खास जानकारी के आंकड़े और एक्ज़ीक्यूशन ट्री. उदाहरण के लिए, इस क्वेरी को देखें:
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
आगे क्या करना है
- एग्ज़ीक्यूशन ट्री नोड के बारे में जानने के लिए, क्वेरी एग्ज़ीक्यूशन रेफ़रंस देखें.
- क्वेरी को ऑप्टिमाइज़ करने का तरीका जानने के लिए, क्वेरी के लागू होने की प्रोसेस को ऑप्टिमाइज़ करना लेख पढ़ें.